Skip to content

Commit ec460a1

Browse files
oderskyBlaisorblade
authored andcommitted
rearrange try-catch in MegaPhase
Move it from `transformNode` to `goNamed` and `goUnnamed`. This might be faster since that way `transformNode` should be an inline candidate since it is short.
1 parent c3b9ff7 commit ec460a1

File tree

1 file changed

+51
-43
lines changed

1 file changed

+51
-43
lines changed

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

+51-43
Original file line numberDiff line numberDiff line change
@@ -157,49 +157,57 @@ class MegaPhase(val miniPhases: Array[MiniPhase]) extends Phase {
157157

158158
/** Transform node using all phases in this group that have idxInGroup >= start */
159159
def transformNode(tree: Tree, start: Int)(implicit ctx: Context): Tree = {
160-
def goNamed(tree: Tree, start: Int) = tree match {
161-
case tree: Ident => goIdent(tree, start)
162-
case tree: Select => goSelect(tree, start)
163-
case tree: ValDef => goValDef(tree, start)
164-
case tree: DefDef => goDefDef(tree, start)
165-
case tree: TypeDef => goTypeDef(tree, start)
166-
case tree: Bind => goBind(tree, start)
167-
case _ => goOther(tree, start)
168-
}
169-
def goUnnamed(tree: Tree, start: Int) = tree match {
170-
case tree: Apply => goApply(tree, start)
171-
case tree: TypeTree => goTypeTree(tree, start)
172-
case tree: Thicket =>
173-
cpy.Thicket(tree)(tree.trees.mapConserve(transformNode(_, start)))
174-
case tree: This => goThis(tree, start)
175-
case tree: Literal => goLiteral(tree, start)
176-
case tree: Block => goBlock(tree, start)
177-
case tree: TypeApply => goTypeApply(tree, start)
178-
case tree: If => goIf(tree, start)
179-
case tree: New => goNew(tree, start)
180-
case tree: Typed => goTyped(tree, start)
181-
case tree: CaseDef => goCaseDef(tree, start)
182-
case tree: Closure => goClosure(tree, start)
183-
case tree: Assign => goAssign(tree, start)
184-
case tree: SeqLiteral => goSeqLiteral(tree, start)
185-
case tree: Super => goSuper(tree, start)
186-
case tree: Template => goTemplate(tree, start)
187-
case tree: Match => goMatch(tree, start)
188-
case tree: UnApply => goUnApply(tree, start)
189-
case tree: PackageDef => goPackageDef(tree, start)
190-
case tree: Try => goTry(tree, start)
191-
case tree: Inlined => goInlined(tree, start)
192-
case tree: Return => goReturn(tree, start)
193-
case tree: Alternative => goAlternative(tree, start)
194-
case tree => goOther(tree, start)
195-
}
196-
try
197-
if (tree.isInstanceOf[NameTree]) goNamed(tree, start) else goUnnamed(tree, start)
198-
catch {
199-
case ex: TypeError =>
200-
ctx.error(ex.toMessage, tree.pos)
201-
tree
202-
}
160+
def goNamed(tree: Tree, start: Int) =
161+
try
162+
tree match {
163+
case tree: Ident => goIdent(tree, start)
164+
case tree: Select => goSelect(tree, start)
165+
case tree: ValDef => goValDef(tree, start)
166+
case tree: DefDef => goDefDef(tree, start)
167+
case tree: TypeDef => goTypeDef(tree, start)
168+
case tree: Bind => goBind(tree, start)
169+
case _ => goOther(tree, start)
170+
}
171+
catch {
172+
case ex: TypeError =>
173+
ctx.error(ex.toMessage, tree.pos)
174+
tree
175+
}
176+
def goUnnamed(tree: Tree, start: Int) =
177+
try
178+
tree match {
179+
case tree: Apply => goApply(tree, start)
180+
case tree: TypeTree => goTypeTree(tree, start)
181+
case tree: Thicket =>
182+
cpy.Thicket(tree)(tree.trees.mapConserve(transformNode(_, start)))
183+
case tree: This => goThis(tree, start)
184+
case tree: Literal => goLiteral(tree, start)
185+
case tree: Block => goBlock(tree, start)
186+
case tree: TypeApply => goTypeApply(tree, start)
187+
case tree: If => goIf(tree, start)
188+
case tree: New => goNew(tree, start)
189+
case tree: Typed => goTyped(tree, start)
190+
case tree: CaseDef => goCaseDef(tree, start)
191+
case tree: Closure => goClosure(tree, start)
192+
case tree: Assign => goAssign(tree, start)
193+
case tree: SeqLiteral => goSeqLiteral(tree, start)
194+
case tree: Super => goSuper(tree, start)
195+
case tree: Template => goTemplate(tree, start)
196+
case tree: Match => goMatch(tree, start)
197+
case tree: UnApply => goUnApply(tree, start)
198+
case tree: PackageDef => goPackageDef(tree, start)
199+
case tree: Try => goTry(tree, start)
200+
case tree: Inlined => goInlined(tree, start)
201+
case tree: Return => goReturn(tree, start)
202+
case tree: Alternative => goAlternative(tree, start)
203+
case tree => goOther(tree, start)
204+
}
205+
catch {
206+
case ex: TypeError =>
207+
ctx.error(ex.toMessage, tree.pos)
208+
tree
209+
}
210+
if (tree.isInstanceOf[NameTree]) goNamed(tree, start) else goUnnamed(tree, start)
203211
}
204212

205213
/** Transform full tree using all phases in this group that have idxInGroup >= start */

0 commit comments

Comments
 (0)