Skip to content

Commit 60803fa

Browse files
committed
Merge memoize with miniphases following it into one group.
1 parent b07c30b commit 60803fa

File tree

4 files changed

+31
-20
lines changed

4 files changed

+31
-20
lines changed

src/dotty/tools/dotc/Compiler.scala

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,12 +51,12 @@ class Compiler {
5151
List(new ElimByName,
5252
new InterceptedMethods,
5353
new Literalize,
54-
new Getters),
55-
List(new ResolveSuper),
54+
new Getters,
55+
new ResolveSuper),
5656
List(new Erasure),
5757
List(new Mixin),
58-
List(new Memoize),
59-
List(new CapturedVars,
58+
List(new Memoize,
59+
new CapturedVars,
6060
new Constructors),
6161
List(new LambdaLift,
6262
new Flatten,

src/dotty/tools/dotc/transform/Memoize.scala

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -37,28 +37,40 @@ import Decorators._
3737
override def phaseName = "memoize"
3838
override def treeTransformPhase = thisTransform.next
3939

40+
override def prepareForDefDef(tree: DefDef)(implicit ctx: Context) = {
41+
val sym = tree.symbol
42+
if (sym.isGetter && !sym.is(NoFieldNeeded)) {
43+
// allocate field early so that initializer has the right owner for subsequeny phases in
44+
// the group.
45+
val maybeMutable = if (sym is Stable) EmptyFlags else Mutable
46+
val field = ctx.newSymbol(
47+
owner = ctx.owner,
48+
name = sym.name.asTermName.fieldName,
49+
flags = Private | maybeMutable,
50+
info = sym.info.resultType,
51+
coord = tree.pos).enteredAfter(thisTransform)
52+
tree.rhs.changeOwnerAfter(sym, field, thisTransform)
53+
}
54+
this
55+
}
56+
4057
override def transformDefDef(tree: DefDef)(implicit ctx: Context, info: TransformerInfo): Tree = {
4158
val sym = tree.symbol
59+
def field = {
60+
val field = sym.field.asTerm
61+
assert(field.exists, i"no field for ${sym.showLocated} in ${sym.owner.info.decls.toList.map{_.showDcl}}%; %")
62+
field
63+
}
4264
if (sym.is(Accessor, butNot = NoFieldNeeded))
4365
if (sym.isGetter) {
44-
val maybeMutable = if (sym is Stable) EmptyFlags else Mutable
45-
println(i"add field for $sym")
46-
val field = ctx.newSymbol(
47-
owner = ctx.owner,
48-
name = sym.name.asTermName.fieldName,
49-
flags = Private | maybeMutable,
50-
info = sym.info.resultType,
51-
coord = tree.pos).enteredAfter(thisTransform)
52-
var fieldInit = tree.rhs.changeOwner(sym, field)
53-
val fieldDef = ValDef(field, fieldInit)
54-
val getterDef = cpy.DefDef(tree)(rhs = ref(field))
66+
val fieldDef = transformFollowing(ValDef(field, tree.rhs))
67+
val getterDef = cpy.DefDef(tree)(rhs = transformFollowingDeep(ref(field)))
5568
Thicket(fieldDef, getterDef)
5669
}
5770
else if (sym.isSetter) {
5871
val Literal(Constant(())) = tree.rhs
59-
assert(sym.field.exists, i"no field for ${sym.showLocated} in ${sym.owner.info.decls.toList.map{_.showDcl}}%; %")
60-
val initializer = Assign(ref(sym.field), ref(tree.vparamss.head.head.symbol))
61-
cpy.DefDef(tree)(rhs = initializer)
72+
val initializer = Assign(ref(field), ref(tree.vparamss.head.head.symbol))
73+
cpy.DefDef(tree)(rhs = transformFollowingDeep(initializer))
6274
}
6375
else tree // curiously, some accessors from Scala2 have ' ' suffixes. They count as
6476
// neither getters nor setters

src/dotty/tools/dotc/transform/Mixin.scala

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,6 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
149149
def traitInits(mixin: ClassSymbol): List[Tree] =
150150
for (getter <- mixin.decls.filter(getr => getr.isGetter && !wasDeferred(getr)).toList)
151151
yield {
152-
println(i"impl for getter $getter!")
153152
DefDef(implementation(getter.asTerm), superRef(initializer(getter)).appliedToNone)
154153
}
155154

test/dotc/tests.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class tests extends CompilerTest {
1515

1616
implicit val defaultOptions = noCheckOptions ++ List(
1717
"-Yno-deep-subtypes",
18-
"-Ycheck:patternMatcher,mixin,gettersSetters,restoreScopes"
18+
"-Ycheck:resolveSuper,mixin,restoreScopes"
1919
)
2020

2121
val twice = List("#runs", "2", "-YnoDoubleBindings")

0 commit comments

Comments
 (0)