Skip to content

Commit 966835b

Browse files
committed
Deduplicate code that transforms Quote, Splice, Type.of
1 parent 8a9871f commit 966835b

File tree

1 file changed

+15
-26
lines changed

1 file changed

+15
-26
lines changed

compiler/src/dotty/tools/dotc/staging/CrossStageSafety.scala

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -50,21 +50,20 @@ class CrossStageSafety extends TreeMapWithStages {
5050
override def transform(tree: Tree)(using Context): Tree =
5151
if (tree.source != ctx.source && tree.source.exists)
5252
transform(tree)(using ctx.withSource(tree.source))
53-
else if !inQuoteOrSpliceScope then
54-
checkAnnotations(tree)
55-
tree match
56-
case tree @ Quote(quotedTree) =>
57-
tree.cancelled match
58-
case Some(tree1) => transform(tree1.asInstance(tree.tpe)) // TODO is this asInstance still needed?
59-
case None => transformQuote(quotedTree, tree)
60-
case tree @ Splice(splicedTree) =>
61-
tree.cancelled match
62-
case Some(tree1) => transform(tree1)
63-
case None => transformSplice(splicedTree, tree)
64-
case tree @ QuotedTypeOf(quotedTree) =>
65-
transformQuotedType(quotedTree, tree)
66-
case _ => super.transform(tree)
67-
else tree match {
53+
else tree match
54+
case tree @ Quote(quotedTree) =>
55+
tree.cancelled match
56+
case Some(tree1) => transform(tree1.asInstance(tree.tpe)) // TODO is this asInstance still needed?
57+
case None => transformQuote(quotedTree, tree)
58+
case tree @ Splice(splicedTree) =>
59+
tree.cancelled match
60+
case Some(tree1) => transform(tree1)
61+
case None => transformSplice(splicedTree, tree)
62+
case tree @ QuotedTypeOf(quotedTree) =>
63+
transformQuotedType(quotedTree, tree)
64+
case _ if !inQuoteOrSpliceScope =>
65+
checkAnnotations(tree)
66+
super.transform(tree)
6867
case _: TypeTree =>
6968
val tp1 = transformTypeAnnotationSplices(tree.tpe)
7069
val healedType = healType(tree.srcPos)(tp1)
@@ -103,21 +102,11 @@ class CrossStageSafety extends TreeMapWithStages {
103102
case tree: TypeDef if tree.symbol.is(Case) && level > 0 =>
104103
report.error(reporting.CaseClassInInlinedCode(tree), tree)
105104
super.transform(tree)
106-
case tree @ Quote(quotedTree) =>
107-
tree.cancelled match
108-
case Some(tree1) => transform(tree1.asInstance(tree.tpe)) // TODO is this asInstance still needed?
109-
case None => transformQuote(quotedTree, tree)
110-
case tree @ Splice(splicedTree) =>
111-
tree.cancelled match
112-
case Some(tree1) => transform(tree1)
113-
case None => transformSplice(splicedTree, tree)
114-
case tree @ QuotedTypeOf(quotedTree) =>
115-
transformQuotedType(quotedTree, tree)
116105
case tree @ SplicedType(splicedTree) =>
117106
transformSpliceType(splicedTree, tree)
118107
case _ =>
119108
super.transform(tree)
120-
}
109+
end transform
121110

122111
/** Transform quoted trees while maintaining level correctness */
123112
private def transformQuote(body: Tree, quote: Quote)(using Context): Tree = {

0 commit comments

Comments
 (0)