Skip to content

Commit 7cedbe4

Browse files
committed
interpret more constant CodeMakerConfig expressions
1 parent acc0b51 commit 7cedbe4

File tree

2 files changed

+13
-3
lines changed

2 files changed

+13
-3
lines changed

jsoniter-scala-macros/shared/src/main/scala-3/FieldNameMapper.scala

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,13 +84,14 @@ object CompileTimeEval {
8484
case _ =>
8585
Left((s"map ${m.show} should be a constrictoor literal, we have ${m.asTerm}", m))
8686

87+
8788
def evalTerm(using Quotes)(ft: quotes.reflect.Term, input:String): Either[(String,Expr[Any]),Option[String]] =
8889
import quotes.reflect._
8990
ft match
9091
case Inlined(oring, bindings, body) => evalTerm(body, input)
9192
case Lambda(params, body) => ???
9293
case Select(term, string) => ???
9394

94-
95+
9596

9697
}

jsoniter-scala-macros/shared/src/main/scala-3/JsonCodeMaker.scala

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,15 @@ object CodecMakerConfig extends CodecMakerConfig(
283283
report.warning(message, expr)
284284
None
285285
}
286+
case '{ (${x}:CodecMakerConfig).withAllowRecursiveTypes($v) } =>
287+
val vv = v.valueOrAbort
288+
val vx = x.valueOrAbort
289+
Some(vx.withAllowRecursiveTypes(vv))
290+
case '{ CodecMakerConfig } =>
291+
Some(CodecMakerConfig)
292+
case other =>
293+
report.error(s"Can't interpret ${other.show} as constant expression, tree=$other")
294+
None
286295
}
287296

288297
}
@@ -983,7 +992,7 @@ object JsonCodecMaker {
983992
}
984993

985994

986-
def genReadSet[B:Type,C:Type](newBuilder: Expr[B], readVal: Expr[B] => UpdateOp, default: Expr[C], result: Expr[B] => Expr[C], in: Expr[JsonReader]): Expr[C] =
995+
def genReadSet[B:Type,C:Type](newBuilder: Expr[B], readVal: Quotes ?=> Expr[B] => UpdateOp, default: Expr[C], result: Expr[B] => Expr[C], in: Expr[JsonReader]): Expr[C] =
987996
'{ if ($in.isNextToken('[')) {
988997
if ($in.isNextToken(']')) $default
989998
else {
@@ -1823,7 +1832,7 @@ object JsonCodecMaker {
18231832
case _ => cannotFindValueCodecError(tpe)
18241833
}
18251834

1826-
def genReadValForGrowable[G<:Growable[V]:Type,V:Type](types: List[TypeRepr], isStringified: Boolean, x: Expr[G], in: Expr[JsonReader]): Expr[Unit] =
1835+
def genReadValForGrowable[G<:Growable[V]:Type,V:Type](types: List[TypeRepr], isStringified: Boolean, x: Expr[G], in: Expr[JsonReader])(using Quotes): Expr[Unit] =
18271836
'{ $x.addOne(${genReadVal[V](types, genNullValue[V](types), isStringified, None, in)}) }
18281837

18291838
def genArraysCopyOf[T:Type](tpe: TypeRepr, x:Expr[Array[T]], newLen:Expr[Int]): Expr[Array[T]] = {

0 commit comments

Comments
 (0)