Skip to content

Commit 35408ec

Browse files
committed
Fix staging level tracking in Transformer
1 parent d4b2f09 commit 35408ec

File tree

2 files changed

+10
-15
lines changed

2 files changed

+10
-15
lines changed

compiler/src/dotty/tools/dotc/ast/Trees.scala

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import annotation.unchecked.uncheckedVariance
1717
import annotation.constructorOnly
1818
import compiletime.uninitialized
1919
import Decorators._
20+
import staging.StagingLevel.*
2021

2122
object Trees {
2223

@@ -1551,9 +1552,9 @@ object Trees {
15511552
val trees1 = transform(trees)
15521553
if (trees1 eq trees) tree else Thicket(trees1)
15531554
case tree @ Quote(body) =>
1554-
cpy.Quote(tree)(transform(body))
1555+
cpy.Quote(tree)(transform(body)(using quoteContext))
15551556
case tree @ Splice(expr) =>
1556-
cpy.Splice(tree)(transform(expr))
1557+
cpy.Splice(tree)(transform(expr)(using spliceContext))
15571558
case tree @ Hole(_, _, args, content, tpt) =>
15581559
cpy.Hole(tree)(args = transform(args), content = transform(content), tpt = transform(tpt))
15591560
case _ =>

compiler/src/dotty/tools/dotc/transform/Splicing.scala

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -111,17 +111,13 @@ class Splicing extends MacroTransform:
111111

112112
override def transform(tree: tpd.Tree)(using Context): tpd.Tree =
113113
tree match
114-
case tree: Splice =>
115-
if level > 1 then
116-
val expr1 = super.transform(tree.expr)(using spliceContext)
117-
cpy.Splice(tree)(expr1)
118-
else
119-
val holeIdx = numHoles
120-
numHoles += 1
121-
val splicer = SpliceTransformer(ctx.owner, quotedDefs.contains)
122-
val newSplicedCode1 = splicer.transformSplice(tree.expr, tree.tpe, holeIdx)(using spliceContext)
123-
val newSplicedCode2 = Level0QuoteTransformer.transform(newSplicedCode1)(using spliceContext)
124-
newSplicedCode2
114+
case tree: Splice if level == 1 =>
115+
val holeIdx = numHoles
116+
numHoles += 1
117+
val splicer = SpliceTransformer(ctx.owner, quotedDefs.contains)
118+
val newSplicedCode1 = splicer.transformSplice(tree.expr, tree.tpe, holeIdx)(using spliceContext)
119+
val newSplicedCode2 = Level0QuoteTransformer.transform(newSplicedCode1)(using spliceContext)
120+
newSplicedCode2
125121
case tree: TypeDef if tree.symbol.hasAnnotation(defn.QuotedRuntime_SplicedTypeAnnot) =>
126122
val tp @ TypeRef(qual: TermRef, _) = tree.rhs.tpe.hiBound: @unchecked
127123
quotedDefs += tree.symbol
@@ -134,8 +130,6 @@ class Splicing extends MacroTransform:
134130
typeHoles.put(qual, hole)
135131
hole
136132
cpy.TypeDef(tree)(rhs = hole)
137-
case Apply(Select(_: Quote, nme.apply),List(quotes)) =>
138-
super.transform(tree)(using quoteContext)
139133
case _: Template =>
140134
for sym <- tree.symbol.owner.info.decls do
141135
quotedDefs += sym

0 commit comments

Comments
 (0)