@@ -135,38 +135,35 @@ object MacroImpl {
135
135
val Arbitrary = (ofType[String ] <|> uriChar.repeat(1 ).mapToExpr)
136
136
.repeat()(using typeclass.Repeated .quotedConcatenateString)
137
137
val Mapping = {
138
- class StringExpr private (val isEmpty : Boolean , private val direct : Option [Expr [String ]], private val accStats : List [Expr [StringBuilder ] => Expr [Unit ]]) {
138
+ class StringExpr private (val isEmpty : Boolean , private val direct : Option [Expr [String ]], private val parts : List [Expr [StringBuilder ] => Expr [StringBuilder ]]) {
139
139
def ++ (other : StringExpr ): StringExpr = {
140
140
if (this .isEmpty) {
141
141
other
142
142
} else if (other.isEmpty) {
143
143
this
144
144
} else {
145
- new StringExpr (false , None , this .accStats ++: other.accStats )
145
+ new StringExpr (false , None , this .parts ++: other.parts )
146
146
}
147
147
}
148
148
def result : Expr [String ] = {
149
149
this .direct match {
150
150
case Some (x) => x
151
- case None => {
152
- val accumulator : Expr [StringBuilder ] = ' {new scala.collection.mutable.StringBuilder }
153
- import quotes .reflect .*
154
- val retval = ValDef .let(Symbol .spliceOwner, " builder$" , accumulator.asTerm): accumulatorRef =>
155
- val accumulatorRefExpr = accumulatorRef.asExprOf[StringBuilder ]
156
- Block (
157
- accStats.map(accStat => accStat(accumulatorRefExpr).asTerm),
158
- Apply (Select .unique(accumulatorRef, " toString" ), Nil ),
159
- )
160
- retval.asExprOf[String ]
151
+ case None => ' {
152
+ $ {
153
+ parts.foldLeft
154
+ (' {new scala.collection.mutable.StringBuilder })
155
+ ({(builder, part) => part(builder)})
156
+ }
157
+ .result
161
158
}
162
159
}
163
160
}
164
161
}
165
162
object StringExpr {
166
163
def empty : StringExpr = new StringExpr (true , Option (Expr (" " )), Nil )
167
- def single (direct : Expr [String ]): StringExpr = new StringExpr (false , Some (direct), List (acc => ' {$acc.append($direct); () }))
168
- def single (direct : Expr [String ], accStats : List [Expr [StringBuilder ] => Expr [Unit ]]): StringExpr = new StringExpr (false , Some (direct), accStats)
169
- def multiple (accStats : List [Expr [StringBuilder ] => Expr [Unit ]]): StringExpr = new StringExpr (false , None , accStats)
164
+ def single (direct : Expr [String ]): StringExpr = new StringExpr (false , Some (direct), List (acc => ' {$acc.append($direct)}))
165
+ def single (direct : Expr [String ], accStats : List [Expr [StringBuilder ] => Expr [StringBuilder ]]): StringExpr = new StringExpr (false , Some (direct), accStats)
166
+ def multiple (accStats : List [Expr [StringBuilder ] => Expr [StringBuilder ]]): StringExpr = new StringExpr (false , None , accStats)
170
167
}
171
168
172
169
implicit def AndThenStringExpr : typeclass.Sequenced [StringExpr , StringExpr , StringExpr ] = (a: StringExpr , b: StringExpr ) => a ++ b
@@ -197,9 +194,9 @@ object MacroImpl {
197
194
.map(x =>
198
195
StringExpr .multiple(
199
196
List (
200
- (sb : Expr [StringBuilder ]) => ' { $sb.append($x._1); () },
201
- (sb : Expr [StringBuilder ]) => ' { $sb.append(" =" ); () },
202
- (sb : Expr [StringBuilder ]) => ' { $sb.append($x._2); () },
197
+ (sb : Expr [StringBuilder ]) => ' { $sb.append($x._1) },
198
+ (sb : Expr [StringBuilder ]) => ' { $sb.append(" =" ) },
199
+ (sb : Expr [StringBuilder ]) => ' { $sb.append($x._2) },
203
200
)
204
201
)
205
202
)
@@ -209,7 +206,7 @@ object MacroImpl {
209
206
val map : Interpolator [StringExpr ] = ofType[scala.collection.Map [String , String ]]
210
207
.map(m => StringExpr .single(
211
208
' { $m.map($tupleConcatFun).mkString(" &" ) },
212
- List ((sb : Expr [StringBuilder ]) => ' {$m.map($tupleConcatFun).addString($sb, " &" ); () })
209
+ List ((sb : Expr [StringBuilder ]) => ' {$m.map($tupleConcatFun).addString($sb, " &" )})
213
210
))
214
211
215
212
val mapOrPair : Interpolator [StringExpr ] = map <|> pair
0 commit comments