Skip to content

Commit 60b81b9

Browse files
committed
Add cache to avoid multiple definitions
1 parent b0c190c commit 60b81b9

File tree

1 file changed

+3
-5
lines changed

1 file changed

+3
-5
lines changed

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,9 @@ class MacroAnnotations(phase: IdentityDenotTransformer):
6161
insertedAfter = suffixed :: insertedAfter
6262
for prefixedTree <- prefixed do
6363
checkMacroDef(prefixedTree, tree, annot)
64-
enterMissingSymbols(prefixedTree)
6564
for suffixedTree <- suffixed do
6665
checkMacroDef(suffixedTree, tree, annot)
67-
enterMissingSymbols(suffixedTree)
6866
TreeChecker.checkMacroGeneratedTree(tree, newTree)
69-
enterMissingSymbols(newTree)
7067
newTree
7168
case (Nil, Nil) =>
7269
report.error(i"Unexpected `Nil` returned by `(${annot.tree}).transform(..)` during macro expansion", annot.tree.srcPos)
@@ -82,6 +79,7 @@ class MacroAnnotations(phase: IdentityDenotTransformer):
8279
insertedAfter.foreach(allTrees.++=)
8380

8481
val result = allTrees.result()
82+
for tree <- result do enterMissingSymbols(tree)
8583
debug.println(result.map(_.show).mkString("expanded to:\n", "\n", ""))
8684
result
8785

@@ -136,7 +134,7 @@ class MacroAnnotations(phase: IdentityDenotTransformer):
136134
else if annotated.isClass && annotated.owner.is(Package) /*&& !sym.isClass*/ then
137135
report.error(i"macro annotation can not add top-level ${sym.showKind}. $annot tried to add $sym.", annot.tree)
138136

139-
private def enterMissingSymbols(tree: MemberDef)(using Context) = new TreeTraverser {
137+
private def enterMissingSymbols(tree: DefTree)(using Context) = new TreeTraverser {
140138
def traverse(tree: tpd.Tree)(using Context): Unit = tree match
141139
case tdef @ TypeDef(_, template: Template) =>
142140
//for tree <- template.constr :: template.body do
@@ -146,7 +144,7 @@ class MacroAnnotations(phase: IdentityDenotTransformer):
146144
report.error(em"Macro added a definition with the wrong owner - ${tree.symbol.owner} - ${tdef.symbol} in ${tree.source}")
147145
else if !isSymbolInDecls(tree.symbol) then
148146
tree.symbol.enteredAfter(phase)
149-
traverseChildren(tree) // Taverse before or after dealing with this class?
147+
traverseChildren(tree) // Traverse before or after dealing with this class?
150148
case _ => traverseChildren(tree)
151149
}.traverse(tree)
152150

0 commit comments

Comments
 (0)