@@ -16,105 +16,59 @@ object Macro {
16
16
def fooErrors (strCtxExpr : Expr [StringContext ], argsExpr : Expr [Seq [Any ]]) given (reflect : Reflection ): Expr [List [(Boolean , Int , Int , Int , String )]] = {
17
17
(strCtxExpr, argsExpr) match {
18
18
case (' { StringContext ($ {ExprSeq (parts)}: _* ) }, ExprSeq (args)) =>
19
- val errors = List .newBuilder[Expr [(Boolean , Int , Int , Int , String )]]
20
- // true if error, false if warning
21
- // 0 if part, 1 if arg, 2 if strCtx, 3 if args
22
- // index in the list if arg or part, -1 otherwise
23
- // offset, 0 if strCtx, args or arg
24
- // message as given
25
- val reporter = new dotty.internal.StringContextMacro .Reporter {
26
- private [this ] var reported = false
27
- private [this ] var oldReported = false
28
- def partError (message : String , index : Int , offset : Int ) : Unit = {
29
- reported = true
30
- errors += ' { Tuple5 (true , 0 , $index, $offset, $message) }
31
- }
32
- def partWarning (message : String , index : Int , offset : Int ) : Unit = {
33
- reported = true
34
- errors += ' { Tuple5 (false , 0 , $index, $offset, $message) }
35
- }
36
-
37
- def argError (message : String , index : Int ) : Unit = {
38
- reported = true
39
- errors += ' { Tuple5 (true , 1 , $index, 0 , $message) }
40
- }
41
-
42
- def strCtxError (message : String ) : Unit = {
43
- reported = true
44
- errors += ' { Tuple5 (true , 2 , - 1 , 0 , $message) }
45
- }
46
- def argsError (message : String ) : Unit = {
47
- reported = true
48
- errors += ' { Tuple5 (true , 3 , - 1 , 0 , $message) }
49
- }
50
-
51
- def hasReported () : Boolean = {
52
- reported
53
- }
54
-
55
- def resetReported () : Unit = {
56
- oldReported = reported
57
- reported = false
58
- }
59
-
60
- def restoreReported () : Unit = {
61
- reported = oldReported
62
- }
63
- }
64
- val partsExpr = dotty.internal.StringContextMacro .getPartsExprs(strCtxExpr)
65
- val args = dotty.internal.StringContextMacro .getArgsExprs(argsExpr)
66
- dotty.internal.StringContextMacro .interpolate(partsExpr, args, argsExpr, reporter) // Discard result
67
- errors.result().toExprOfList
19
+ fooErrorsImpl(parts, args, argsExpr)
68
20
case (' { new StringContext ($ {ExprSeq (parts)}: _* ) }, ExprSeq (args)) =>
69
- val errors = List .newBuilder[Expr [(Boolean , Int , Int , Int , String )]]
70
- // true if error, false if warning
71
- // 0 if part, 1 if arg, 2 if strCtx, 3 if args
72
- // index in the list if arg or part, -1 otherwise
73
- // offset, 0 if strCtx, args or arg
74
- // message as given
75
- val reporter = new dotty.internal.StringContextMacro .Reporter {
76
- private [this ] var reported = false
77
- private [this ] var oldReported = false
78
- def partError (message : String , index : Int , offset : Int ) : Unit = {
79
- reported = true
80
- errors += ' { Tuple5 (true , 0 , $index, $offset, $message) }
81
- }
82
- def partWarning (message : String , index : Int , offset : Int ) : Unit = {
83
- reported = true
84
- errors += ' { Tuple5 (false , 0 , $index, $offset, $message) }
85
- }
21
+ fooErrorsImpl(parts, args, argsExpr)
22
+ }
23
+ }
24
+
25
+ def fooErrorsImpl (parts : Seq [Expr [String ]], args : Seq [Expr [Any ]], argsExpr : Expr [Seq [Any ]]) given (reflect : Reflection )= {
26
+ val errors = List .newBuilder[Expr [(Boolean , Int , Int , Int , String )]]
27
+ // true if error, false if warning
28
+ // 0 if part, 1 if arg, 2 if strCtx, 3 if args
29
+ // index in the list if arg or part, -1 otherwise
30
+ // offset, 0 if strCtx, args or arg
31
+ // message as given
32
+ val reporter = new dotty.internal.StringContextMacro .Reporter {
33
+ private [this ] var reported = false
34
+ private [this ] var oldReported = false
35
+ def partError (message : String , index : Int , offset : Int ) : Unit = {
36
+ reported = true
37
+ errors += ' { Tuple5 (true , 0 , $index, $offset, $message) }
38
+ }
39
+ def partWarning (message : String , index : Int , offset : Int ) : Unit = {
40
+ reported = true
41
+ errors += ' { Tuple5 (false , 0 , $index, $offset, $message) }
42
+ }
86
43
87
- def argError (message : String , index : Int ) : Unit = {
88
- reported = true
89
- errors += ' { Tuple5 (true , 1 , $index, 0 , $message) }
90
- }
44
+ def argError (message : String , index : Int ) : Unit = {
45
+ reported = true
46
+ errors += ' { Tuple5 (true , 1 , $index, 0 , $message) }
47
+ }
91
48
92
- def strCtxError (message : String ) : Unit = {
93
- reported = true
94
- errors += ' { Tuple5 (true , 2 , - 1 , 0 , $message) }
95
- }
96
- def argsError (message : String ) : Unit = {
97
- reported = true
98
- errors += ' { Tuple5 (true , 3 , - 1 , 0 , $message) }
99
- }
49
+ def strCtxError (message : String ) : Unit = {
50
+ reported = true
51
+ errors += ' { Tuple5 (true , 2 , - 1 , 0 , $message) }
52
+ }
53
+ def argsError (message : String ) : Unit = {
54
+ reported = true
55
+ errors += ' { Tuple5 (true , 3 , - 1 , 0 , $message) }
56
+ }
100
57
101
- def hasReported () : Boolean = {
102
- reported
103
- }
58
+ def hasReported () : Boolean = {
59
+ reported
60
+ }
104
61
105
- def resetReported () : Unit = {
106
- oldReported = reported
107
- reported = false
108
- }
62
+ def resetReported () : Unit = {
63
+ oldReported = reported
64
+ reported = false
65
+ }
109
66
110
- def restoreReported () : Unit = {
111
- reported = oldReported
112
- }
113
- }
114
- val partsExpr = dotty.internal.StringContextMacro .getPartsExprs(strCtxExpr)
115
- val args = dotty.internal.StringContextMacro .getArgsExprs(argsExpr)
116
- dotty.internal.StringContextMacro .interpolate(partsExpr, args, argsExpr, reporter) // Discard result
117
- errors.result().toExprOfList
67
+ def restoreReported () : Unit = {
68
+ reported = oldReported
69
+ }
118
70
}
71
+ dotty.internal.StringContextMacro .interpolate(parts.toList, args.toList, argsExpr, reporter) // Discard result
72
+ errors.result().toExprOfList
119
73
}
120
74
}
0 commit comments