Skip to content

Commit f37fe1d

Browse files
committed
Reorder pattern match based on frequency
transformUnnamed total number of matches when compiling the dotty bootstrapped compiler (Apply,988737) (TypeTree,938211) (Thicket,314168) (This,258670) (Literal,207556) (Block,200439) (TypeApply,142962) (If,86724) (New,51117) (Typed,43350) (CaseDef,41226) (Closure,31121) (Assign,29101) (SeqLiteral,24646) (Super,19849) (Template,18180) (Match,11466) (default,10334) (UnApply,9327) (PackageDef,6392) (Try,1655) (Inlined,1528) (Return,1255) (Alternative,659)
1 parent 2ed6914 commit f37fe1d

File tree

1 file changed

+87
-87
lines changed

1 file changed

+87
-87
lines changed

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

Lines changed: 87 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -1014,17 +1014,6 @@ object TreeTransforms {
10141014

10151015
final private[TreeTransforms] def transformUnnamed(tree: Tree, info: TransformerInfo, cur: Int)(implicit ctx: Context): Tree =
10161016
tree match {
1017-
case tree: This =>
1018-
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForThis, info.nx.nxPrepThis, tree, cur)
1019-
if (mutatedInfo eq null) tree
1020-
else goThis(tree, mutatedInfo.nx.nxTransThis(cur))
1021-
case tree: Super =>
1022-
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForSuper, info.nx.nxPrepSuper, tree, cur)
1023-
if (mutatedInfo eq null) tree
1024-
else {
1025-
val qual = transform(tree.qual, mutatedInfo, cur)
1026-
goSuper(cpy.Super(tree)(qual, tree.mix), mutatedInfo.nx.nxTransSuper(cur))
1027-
}
10281017
case tree: Apply =>
10291018
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForApply, info.nx.nxPrepApply, tree, cur)
10301019
if (mutatedInfo eq null) tree
@@ -1033,6 +1022,28 @@ object TreeTransforms {
10331022
val args = transformSubTrees(tree.args, mutatedInfo, cur)
10341023
goApply(cpy.Apply(tree)(fun, args), mutatedInfo.nx.nxTransApply(cur))
10351024
}
1025+
case tree: TypeTree =>
1026+
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForTypeTree, info.nx.nxPrepTypeTree, tree, cur)
1027+
if (mutatedInfo eq null) tree
1028+
else goTypeTree(tree, mutatedInfo.nx.nxTransTypeTree(cur))
1029+
case Thicket(trees) =>
1030+
cpy.Thicket(tree)(transformTrees(trees, info, cur))
1031+
case tree: This =>
1032+
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForThis, info.nx.nxPrepThis, tree, cur)
1033+
if (mutatedInfo eq null) tree
1034+
else goThis(tree, mutatedInfo.nx.nxTransThis(cur))
1035+
case tree: Literal =>
1036+
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForLiteral, info.nx.nxPrepLiteral, tree, cur)
1037+
if (mutatedInfo eq null) tree
1038+
else goLiteral(tree, mutatedInfo.nx.nxTransLiteral(cur))
1039+
case tree: Block =>
1040+
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForBlock, info.nx.nxPrepBlock, tree, cur)
1041+
if (mutatedInfo eq null) tree
1042+
else {
1043+
val stats = transformStats(tree.stats, ctx.owner, mutatedInfo, cur)
1044+
val expr = transform(tree.expr, mutatedInfo, cur)
1045+
goBlock(cpy.Block(tree)(stats, expr), mutatedInfo.nx.nxTransBlock(cur))
1046+
}
10361047
case tree: TypeApply =>
10371048
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForTypeApply, info.nx.nxPrepTypeApply, tree, cur)
10381049
if (mutatedInfo eq null) tree
@@ -1041,10 +1052,15 @@ object TreeTransforms {
10411052
val args = transformTrees(tree.args, mutatedInfo, cur)
10421053
goTypeApply(cpy.TypeApply(tree)(fun, args), mutatedInfo.nx.nxTransTypeApply(cur))
10431054
}
1044-
case tree: Literal =>
1045-
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForLiteral, info.nx.nxPrepLiteral, tree, cur)
1055+
case tree: If =>
1056+
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForIf, info.nx.nxPrepIf, tree, cur)
10461057
if (mutatedInfo eq null) tree
1047-
else goLiteral(tree, mutatedInfo.nx.nxTransLiteral(cur))
1058+
else {
1059+
val cond = transform(tree.cond, mutatedInfo, cur)
1060+
val thenp = transform(tree.thenp, mutatedInfo, cur)
1061+
val elsep = transform(tree.elsep, mutatedInfo, cur)
1062+
goIf(cpy.If(tree)(cond, thenp, elsep), mutatedInfo.nx.nxTransIf(cur))
1063+
}
10481064
case tree: New =>
10491065
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForNew, info.nx.nxPrepNew, tree, cur)
10501066
if (mutatedInfo eq null) tree
@@ -1060,6 +1076,24 @@ object TreeTransforms {
10601076
val tpt = transform(tree.tpt, mutatedInfo, cur)
10611077
goTyped(cpy.Typed(tree)(expr, tpt), mutatedInfo.nx.nxTransTyped(cur))
10621078
}
1079+
case tree: CaseDef =>
1080+
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForCaseDef, info.nx.nxPrepCaseDef, tree, cur)
1081+
if (mutatedInfo eq null) tree
1082+
else {
1083+
val pat = transform(tree.pat, mutatedInfo, cur)(ctx.addMode(Mode.Pattern))
1084+
val guard = transform(tree.guard, mutatedInfo, cur)
1085+
val body = transform(tree.body, mutatedInfo, cur)
1086+
goCaseDef(cpy.CaseDef(tree)(pat, guard, body), mutatedInfo.nx.nxTransCaseDef(cur))
1087+
}
1088+
case tree: Closure =>
1089+
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForClosure, info.nx.nxPrepClosure, tree, cur)
1090+
if (mutatedInfo eq null) tree
1091+
else {
1092+
val env = transformTrees(tree.env, mutatedInfo, cur)
1093+
val meth = transform(tree.meth, mutatedInfo, cur)
1094+
val tpt = transform(tree.tpt, mutatedInfo, cur)
1095+
goClosure(cpy.Closure(tree)(env, meth, tpt), mutatedInfo.nx.nxTransClosure(cur))
1096+
}
10631097
case tree: Assign =>
10641098
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForAssign, info.nx.nxPrepAssign, tree, cur)
10651099
if (mutatedInfo eq null) tree
@@ -1068,31 +1102,30 @@ object TreeTransforms {
10681102
val rhs = transform(tree.rhs, mutatedInfo, cur)
10691103
goAssign(cpy.Assign(tree)(lhs, rhs), mutatedInfo.nx.nxTransAssign(cur))
10701104
}
1071-
case tree: Block =>
1072-
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForBlock, info.nx.nxPrepBlock, tree, cur)
1105+
case tree: SeqLiteral =>
1106+
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForSeqLiteral, info.nx.nxPrepSeqLiteral, tree, cur)
10731107
if (mutatedInfo eq null) tree
10741108
else {
1075-
val stats = transformStats(tree.stats, ctx.owner, mutatedInfo, cur)
1076-
val expr = transform(tree.expr, mutatedInfo, cur)
1077-
goBlock(cpy.Block(tree)(stats, expr), mutatedInfo.nx.nxTransBlock(cur))
1109+
val elems = transformTrees(tree.elems, mutatedInfo, cur)
1110+
val elemtpt = transform(tree.elemtpt, mutatedInfo, cur)
1111+
goSeqLiteral(cpy.SeqLiteral(tree)(elems, elemtpt), mutatedInfo.nx.nxTransSeqLiteral(cur))
10781112
}
1079-
case tree: If =>
1080-
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForIf, info.nx.nxPrepIf, tree, cur)
1113+
case tree: Super =>
1114+
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForSuper, info.nx.nxPrepSuper, tree, cur)
10811115
if (mutatedInfo eq null) tree
10821116
else {
1083-
val cond = transform(tree.cond, mutatedInfo, cur)
1084-
val thenp = transform(tree.thenp, mutatedInfo, cur)
1085-
val elsep = transform(tree.elsep, mutatedInfo, cur)
1086-
goIf(cpy.If(tree)(cond, thenp, elsep), mutatedInfo.nx.nxTransIf(cur))
1117+
val qual = transform(tree.qual, mutatedInfo, cur)
1118+
goSuper(cpy.Super(tree)(qual, tree.mix), mutatedInfo.nx.nxTransSuper(cur))
10871119
}
1088-
case tree: Closure =>
1089-
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForClosure, info.nx.nxPrepClosure, tree, cur)
1120+
case tree: Template =>
1121+
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForTemplate, info.nx.nxPrepTemplate, tree, cur)
10901122
if (mutatedInfo eq null) tree
10911123
else {
1092-
val env = transformTrees(tree.env, mutatedInfo, cur)
1093-
val meth = transform(tree.meth, mutatedInfo, cur)
1094-
val tpt = transform(tree.tpt, mutatedInfo, cur)
1095-
goClosure(cpy.Closure(tree)(env, meth, tpt), mutatedInfo.nx.nxTransClosure(cur))
1124+
val constr = transformSub(tree.constr, mutatedInfo, cur)
1125+
val parents = transformTrees(tree.parents, mutatedInfo, cur)(ctx.superCallContext)
1126+
val self = transformSub(tree.self, mutatedInfo, cur)
1127+
val body = transformStats(tree.body, tree.symbol, mutatedInfo, cur)
1128+
goTemplate(cpy.Template(tree)(constr, parents, self, body), mutatedInfo.nx.nxTransTemplate(cur))
10961129
}
10971130
case tree: Match =>
10981131
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForMatch, info.nx.nxPrepMatch, tree, cur)
@@ -1102,26 +1135,23 @@ object TreeTransforms {
11021135
val cases = transformSubTrees(tree.cases, mutatedInfo, cur)
11031136
goMatch(cpy.Match(tree)(selector, cases), mutatedInfo.nx.nxTransMatch(cur))
11041137
}
1105-
case tree: CaseDef =>
1106-
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForCaseDef, info.nx.nxPrepCaseDef, tree, cur)
1138+
case tree: UnApply =>
1139+
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForUnApply, info.nx.nxPrepUnApply, tree, cur)
11071140
if (mutatedInfo eq null) tree
11081141
else {
1109-
val pat = transform(tree.pat, mutatedInfo, cur)(ctx.addMode(Mode.Pattern))
1110-
val guard = transform(tree.guard, mutatedInfo, cur)
1111-
val body = transform(tree.body, mutatedInfo, cur)
1112-
goCaseDef(cpy.CaseDef(tree)(pat, guard, body), mutatedInfo.nx.nxTransCaseDef(cur))
1142+
val fun = transform(tree.fun, mutatedInfo, cur)
1143+
val implicits = transformTrees(tree.implicits, mutatedInfo, cur)
1144+
val patterns = transformTrees(tree.patterns, mutatedInfo, cur)
1145+
goUnApply(cpy.UnApply(tree)(fun, implicits, patterns), mutatedInfo.nx.nxTransUnApply(cur))
11131146
}
1114-
case tree: Return =>
1115-
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForReturn, info.nx.nxPrepReturn, tree, cur)
1147+
case tree: PackageDef =>
1148+
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForPackageDef, info.nx.nxPrepPackageDef, tree, cur)
11161149
if (mutatedInfo eq null) tree
11171150
else {
1118-
val expr = transform(tree.expr, mutatedInfo, cur)
1119-
val from = tree.from
1120-
// don't transform the `from` part, as this is not a normal ident, but
1121-
// a pointer to the enclosing method. Transforming this as a normal ident
1122-
// can go wrong easily. If a transformation is needed, it should be
1123-
// the responsibility of the transformReturn method to handle this also.
1124-
goReturn(cpy.Return(tree)(expr, from), mutatedInfo.nx.nxTransReturn(cur))
1151+
val nestedCtx = localContext(tree.symbol)
1152+
val pid = transformSub(tree.pid, mutatedInfo, cur)
1153+
val stats = transformStats(tree.stats, tree.symbol, mutatedInfo, cur)(nestedCtx)
1154+
goPackageDef(cpy.PackageDef(tree)(pid, stats), mutatedInfo.nx.nxTransPackageDef(cur))
11251155
}
11261156
case tree: Try =>
11271157
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForTry, info.nx.nxPrepTry, tree, cur)
@@ -1132,14 +1162,6 @@ object TreeTransforms {
11321162
val finalizer = transform(tree.finalizer, mutatedInfo, cur)
11331163
goTry(cpy.Try(tree)(block, cases1, finalizer), mutatedInfo.nx.nxTransTry(cur))
11341164
}
1135-
case tree: SeqLiteral =>
1136-
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForSeqLiteral, info.nx.nxPrepSeqLiteral, tree, cur)
1137-
if (mutatedInfo eq null) tree
1138-
else {
1139-
val elems = transformTrees(tree.elems, mutatedInfo, cur)
1140-
val elemtpt = transform(tree.elemtpt, mutatedInfo, cur)
1141-
goSeqLiteral(cpy.SeqLiteral(tree)(elems, elemtpt), mutatedInfo.nx.nxTransSeqLiteral(cur))
1142-
}
11431165
case tree: Inlined =>
11441166
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForInlined, info.nx.nxPrepInlined, tree, cur)
11451167
if (mutatedInfo eq null) tree
@@ -1148,47 +1170,25 @@ object TreeTransforms {
11481170
val expansion = transform(tree.expansion, mutatedInfo, cur)(inlineContext(tree))
11491171
goInlined(cpy.Inlined(tree)(tree.call, bindings, expansion), mutatedInfo.nx.nxTransInlined(cur))
11501172
}
1151-
case tree: TypeTree =>
1152-
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForTypeTree, info.nx.nxPrepTypeTree, tree, cur)
1173+
case tree: Return =>
1174+
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForReturn, info.nx.nxPrepReturn, tree, cur)
11531175
if (mutatedInfo eq null) tree
1154-
else goTypeTree(tree, mutatedInfo.nx.nxTransTypeTree(cur))
1176+
else {
1177+
val expr = transform(tree.expr, mutatedInfo, cur)
1178+
val from = tree.from
1179+
// don't transform the `from` part, as this is not a normal ident, but
1180+
// a pointer to the enclosing method. Transforming this as a normal ident
1181+
// can go wrong easily. If a transformation is needed, it should be
1182+
// the responsibility of the transformReturn method to handle this also.
1183+
goReturn(cpy.Return(tree)(expr, from), mutatedInfo.nx.nxTransReturn(cur))
1184+
}
11551185
case tree: Alternative =>
11561186
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForAlternative, info.nx.nxPrepAlternative, tree, cur)
11571187
if (mutatedInfo eq null) tree
11581188
else {
11591189
val trees = transformTrees(tree.trees, mutatedInfo, cur)
11601190
goAlternative(cpy.Alternative(tree)(trees), mutatedInfo.nx.nxTransAlternative(cur))
11611191
}
1162-
case tree: UnApply =>
1163-
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForUnApply, info.nx.nxPrepUnApply, tree, cur)
1164-
if (mutatedInfo eq null) tree
1165-
else {
1166-
val fun = transform(tree.fun, mutatedInfo, cur)
1167-
val implicits = transformTrees(tree.implicits, mutatedInfo, cur)
1168-
val patterns = transformTrees(tree.patterns, mutatedInfo, cur)
1169-
goUnApply(cpy.UnApply(tree)(fun, implicits, patterns), mutatedInfo.nx.nxTransUnApply(cur))
1170-
}
1171-
case tree: Template =>
1172-
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForTemplate, info.nx.nxPrepTemplate, tree, cur)
1173-
if (mutatedInfo eq null) tree
1174-
else {
1175-
val constr = transformSub(tree.constr, mutatedInfo, cur)
1176-
val parents = transformTrees(tree.parents, mutatedInfo, cur)(ctx.superCallContext)
1177-
val self = transformSub(tree.self, mutatedInfo, cur)
1178-
val body = transformStats(tree.body, tree.symbol, mutatedInfo, cur)
1179-
goTemplate(cpy.Template(tree)(constr, parents, self, body), mutatedInfo.nx.nxTransTemplate(cur))
1180-
}
1181-
case tree: PackageDef =>
1182-
implicit val mutatedInfo: TransformerInfo = mutateTransformers(info, prepForPackageDef, info.nx.nxPrepPackageDef, tree, cur)
1183-
if (mutatedInfo eq null) tree
1184-
else {
1185-
val nestedCtx = localContext(tree.symbol)
1186-
val pid = transformSub(tree.pid, mutatedInfo, cur)
1187-
val stats = transformStats(tree.stats, tree.symbol, mutatedInfo, cur)(nestedCtx)
1188-
goPackageDef(cpy.PackageDef(tree)(pid, stats), mutatedInfo.nx.nxTransPackageDef(cur))
1189-
}
1190-
case Thicket(trees) =>
1191-
cpy.Thicket(tree)(transformTrees(trees, info, cur))
11921192
case tree =>
11931193
implicit val originalInfo: TransformerInfo = info
11941194
goOther(tree, info.nx.nxTransOther(cur))

0 commit comments

Comments
 (0)