@@ -15,8 +15,17 @@ trait Checked1ParamAny[Chk[Cond0[_,_], Msg0[_,_], T0, ParamFace0, Param0], Cond[
1515
1616object Checked1ParamAny {
1717 trait LP [Chk [Cond0 [_,_], Msg0 [_,_], T0 , ParamFace0 , Param0 ], Face ] {
18- implicit def fromNum [Cond [_,_], Msg [_,_], T >: Face , ParamFace , Param , Out <: T ](value : T )
19- : Chk [Cond , Msg , Out , ParamFace , Param ] = macro Builder .Macro .fromNumValue[Chk [Cond ,Msg ,_,_,_], Cond [_,_], Msg [_,_], T , ParamFace , Param ]
18+ def create [Cond [_,_], Msg [_,_], T , ParamFace , Param ](value : Face ) : Chk [Cond , Msg , T , ParamFace , Param ]
19+
20+ // This is a hack to force Scalac to actually display the constructed error message in all cases
21+ // From some weird reason only direct macro calls displays the error in a case of an implicit conversion
22+ implicit def requireMsg [Cond [_,_], Msg [_,_], T >: Face , ParamFace , Param , Out <: T ](value : T )
23+ : Chk [Cond , Msg , Out , ParamFace , Param ] = macro Builder .Macro .requireMsg[Chk [Cond ,Msg ,_,_,_], Cond [_,_], Msg [_,_], T , ParamFace , Param ]
24+
25+ // from non-singleton values
26+ implicit def fromNumNonSing [Cond [_,_], Msg [_,_], ParamFace , Param ](value : Face )(
27+ implicit req : RequireMsg [IsNonLiteral [GetArg0 ] || IsNonLiteral [Param ] || Cond [GetArg0 , Param ], Msg [GetArg0 , Param ]],
28+ ) : Chk [Cond , Msg , Face , ParamFace , Param ] = create[Cond , Msg , Face , ParamFace , Param ](value)
2029 }
2130 trait Builder [Chk [Cond0 [_,_], Msg0 [_,_], T0 , ParamFace0 , Param0 ], Face ] extends LP [Chk , Face ]{
2231 trait Alias {
@@ -27,49 +36,36 @@ object Checked1ParamAny {
2736 final type CheckedShell [T , Param ] = CheckedShellSym [NoSym , T , Param ]
2837 final type CheckedShellSym [Sym , T , Param ] = CheckedShell2 [Cond , Msg , Sym , T , Face , Param , ParamFace ]
2938 }
30-
31- def create [Cond [_,_], Msg [_,_], T , ParamFace , Param ](value : Face ) : Chk [Cond , Msg , T , ParamFace , Param ]
3239
3340 // //////////////////////////////////////////////////////////////////////////////////////
3441 // Generic Implicit Conversions
3542 // Currently triggers good-code-red IntelliJ issue
3643 // https://youtrack.jetbrains.com/issue/SCL-13089
3744 // //////////////////////////////////////////////////////////////////////////////////////
38- implicit def ev [Cond [_,_], Msg [_,_], ParamFace , T , Param ](implicit value : AcceptNonLiteral [Id [T ]])
39- : Chk [Cond , Msg , T , ParamFace , Param ] = macro Builder .Macro .fromOpImpl[Chk [Cond ,Msg ,_,_,_], Cond [_,_], Msg [_,_], T , ParamFace , Param ]
45+ implicit def ev [Cond [_,_], Msg [_,_], ParamFace , T , Param ](
46+ implicit req : RequireMsg [IsNonLiteral [Param ] || Cond [T , Param ], Msg [T , Param ]], value : AcceptNonLiteral [Id [T ]]
47+ ) : Chk [Cond , Msg , T , ParamFace , Param ] = create[Cond , Msg , T , ParamFace , Param ](value.valueWide.asInstanceOf [Face ])
4048
41- implicit def fromNumSing [Cond [_,_], Msg [_,_], T <: Face with Singleton , ParamFace , Param ](value : T )(implicit req : RequireMsg [Cond [T , Param ], Msg [T , Param ]])
42- : Chk [Cond , Msg , T , ParamFace , Param ] = create[Cond , Msg , T , ParamFace , Param ](value)
49+ implicit def fromNumSing [Cond [_,_], Msg [_,_], T <: Face with Singleton , ParamFace , Param ](value : T )(
50+ implicit req : RequireMsg [IsNonLiteral [Param ] || Cond [T , Param ], Msg [T , Param ]]
51+ ) : Chk [Cond , Msg , T , ParamFace , Param ] = create[Cond , Msg , T , ParamFace , Param ](value)
4352
44- implicit def fromTF [Cond [_,_], Msg [_,_], T >: Face , ParamFace , Param , Out <: T ](value : TwoFaceAny [Face , T ])
45- : Chk [Cond , Msg , Out , ParamFace , Param ] = macro Builder .Macro .fromTF[Chk [Cond ,Msg ,_,_,_], Cond [_,_], Msg [_,_], T , ParamFace , Param ]
53+ implicit def fromTF [Cond [_,_], Msg [_,_], T , ParamFace , Param ](tfValue : TwoFaceAny [Face , T ])(
54+ implicit req : RequireMsg [IsNonLiteral [T ] || IsNonLiteral [Param ] || Cond [T , Param ], Msg [T , Param ]], di : DummyImplicit
55+ ) : Chk [Cond , Msg , T , ParamFace , Param ] = create[Cond , Msg , T , ParamFace , Param ](tfValue.getValue)
4656
47- implicit def widen [Cond [_,_], Msg [_,_], T , ParamFace , Param ](value : Chk [Cond , Msg , T , ParamFace , Param ])
48- : Chk [Cond , Msg , Face , ParamFace , Param ] = value.asInstanceOf [Chk [Cond , Msg , Face , ParamFace , Param ]]
57+ implicit def argCast [Cond [_,_], Msg [_,_], F , T , ParamFace , Param ](c : Chk [Cond , Msg , F , ParamFace , Param ])(
58+ implicit eq : OpContainer .Eq [F , T , Face ]
59+ ) : Chk [Cond , Msg , T , ParamFace , Param ] = c.asInstanceOf [Chk [Cond , Msg , T , ParamFace , Param ]]
4960 // //////////////////////////////////////////////////////////////////////////////////////
5061 }
5162
5263 object Builder {
5364 final class Macro (val c : whitebox.Context ) extends GeneralMacros {
54- def fromOpImpl [Chk , Cond , Msg , T , ParamFace , Param ](value : c.Tree )(
55- implicit
56- chk : c.WeakTypeTag [Chk ], cond : c.WeakTypeTag [Cond ], msg : c.WeakTypeTag [Msg ], t : c.WeakTypeTag [T ], paramFace : c.WeakTypeTag [ParamFace ], p : c.WeakTypeTag [Param ]
57- ): c.Tree = Checked1ParamMaterializer [Chk , Cond , Msg , T , ParamFace , Param ].fromOpImpl(value)
58-
59- def fromNumValue [Chk , Cond , Msg , T , ParamFace , Param ](value : c.Tree )(
65+ def requireMsg [Chk , Cond , Msg , T , ParamFace , Param ](value : c.Tree )(
6066 implicit
6167 chk : c.WeakTypeTag [Chk ], cond : c.WeakTypeTag [Cond ], msg : c.WeakTypeTag [Msg ], t : c.WeakTypeTag [T ], paramFace : c.WeakTypeTag [ParamFace ], p : c.WeakTypeTag [Param ]
6268 ): c.Tree = Checked1ParamMaterializer [Chk , Cond , Msg , T , ParamFace , Param ].fromNumValue(value)
63-
64- def fromTF [Chk , Cond , Msg , T , ParamFace , Param ](value : c.Tree )(
65- implicit
66- chk : c.WeakTypeTag [Chk ], cond : c.WeakTypeTag [Cond ], msg : c.WeakTypeTag [Msg ], t : c.WeakTypeTag [T ], paramFace : c.WeakTypeTag [ParamFace ], p : c.WeakTypeTag [Param ]
67- ): c.Tree = Checked1ParamMaterializer [Chk , Cond , Msg , T , ParamFace , Param ].fromTF(value)
68-
69- def widen [Chk , Cond , Msg , T , ParamFace , Param ](value : c.Tree )(
70- implicit
71- chk : c.WeakTypeTag [Chk ], cond : c.WeakTypeTag [Cond ], msg : c.WeakTypeTag [Msg ], t : c.WeakTypeTag [T ], paramFace : c.WeakTypeTag [ParamFace ], p : c.WeakTypeTag [Param ]
72- ): c.Tree = Checked1ParamMaterializer [Chk , Cond , Msg , T , ParamFace , Param ].widen(value)
7369 }
7470 }
7571
0 commit comments