Skip to content

Commit d65be09

Browse files
committed
Merge pull request #286 from dotty-staging/change/defaultphase
Change/defaultphase
2 parents d084887 + b7c196e commit d65be09

29 files changed

+29
-166
lines changed

src/dotty/tools/dotc/core/Contexts.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,10 @@ object Contexts {
7777

7878
/** The current context */
7979
private[this] var _period: Period = _
80-
protected def period_=(period: Period) = _period = period
80+
protected def period_=(period: Period) = {
81+
assert(period.firstPhaseId == period.lastPhaseId, period)
82+
_period = period
83+
}
8184
def period: Period = _period
8285

8386
/** The scope nesting level */
@@ -193,7 +196,7 @@ object Contexts {
193196
/** This context at given phase.
194197
* This method will always return a phase period equal to phaseId, thus will never return squashed phases
195198
*/
196-
final def withPhase(phaseId: PhaseId): Context = {
199+
final def withPhase(phaseId: PhaseId): Context =
197200
if (this.phaseId == phaseId) this
198201
else if (phasedCtx.phaseId == phaseId) phasedCtx
199202
else if (phasedCtxs != null && phasedCtxs(phaseId) != null) phasedCtxs(phaseId)
@@ -206,7 +209,6 @@ object Contexts {
206209
}
207210
ctx1
208211
}
209-
}
210212

211213
final def withPhase(phase: Phase): Context =
212214
withPhase(phase.id)

src/dotty/tools/dotc/core/Phases.scala

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -170,15 +170,15 @@ object Phases {
170170
private val patmatCache = new PhaseCache(classOf[PatternMatcher])
171171
private val flattenCache = new PhaseCache(classOf[Flatten])
172172
private val explicitOuterCache = new PhaseCache(classOf[ExplicitOuter])
173-
private val gettersSettersCache = new PhaseCache(classOf[GettersSetters])
173+
private val gettersCache = new PhaseCache(classOf[Getters])
174174

175175
def typerPhase = typerCache.phase
176176
def refchecksPhase = refChecksCache.phase
177177
def erasurePhase = erasureCache.phase
178178
def patmatPhase = patmatCache.phase
179179
def flattenPhase = flattenCache.phase
180180
def explicitOuterPhase = explicitOuterCache.phase
181-
def gettersSettersPhase = gettersSettersCache.phase
181+
def gettersPhase = gettersCache.phase
182182

183183
def isAfterTyper(phase: Phase): Boolean = phase.id > typerPhase.id
184184
}
@@ -194,7 +194,7 @@ object Phases {
194194

195195
def runOn(units: List[CompilationUnit])(implicit ctx: Context): List[CompilationUnit] =
196196
units.map { unit =>
197-
val unitCtx = ctx.fresh.setPhase(this).setCompilationUnit(unit)
197+
val unitCtx = ctx.fresh.setPhase(this.start).setCompilationUnit(unit)
198198
run(unitCtx)
199199
unitCtx.compilationUnit
200200
}

src/dotty/tools/dotc/core/Symbols.scala

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -396,15 +396,16 @@ object Symbols {
396396
* that starts being valid after `phase`.
397397
* @pre Symbol is a class member
398398
*/
399-
def enteredAfter(phase: DenotTransformer)(implicit ctx: Context): this.type = {
400-
val nextCtx = ctx.withPhase(phase.next)
401-
if (this.owner.is(Package)) {
402-
denot.validFor |= InitialPeriod
403-
if (this is Module) this.moduleClass.validFor |= InitialPeriod
399+
def enteredAfter(phase: DenotTransformer)(implicit ctx: Context): this.type =
400+
if (ctx.phaseId != phase.next.id) enteredAfter(phase)(ctx.withPhase(phase.next))
401+
else {
402+
if (this.owner.is(Package)) {
403+
denot.validFor |= InitialPeriod
404+
if (this is Module) this.moduleClass.validFor |= InitialPeriod
405+
}
406+
else this.owner.asClass.ensureFreshScopeAfter(phase)
407+
entered
404408
}
405-
else this.owner.asClass.ensureFreshScopeAfter(phase)(nextCtx)
406-
entered(nextCtx)
407-
}
408409

409410
/** This symbol, if it exists, otherwise the result of evaluating `that` */
410411
def orElse(that: => Symbol)(implicit ctx: Context) =

src/dotty/tools/dotc/core/TypeComparer.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -792,7 +792,7 @@ class TypeComparer(initctx: Context) extends DotClass {
792792
tp2.info match {
793793
case tp2i: TermRef =>
794794
isSubType(tp1, tp2i)
795-
case ExprType(tp2i: TermRef) if (ctx.phase.id > ctx.gettersSettersPhase.id) =>
795+
case ExprType(tp2i: TermRef) if (ctx.phase.id > ctx.gettersPhase.id) =>
796796
isSubType(tp1, tp2i)
797797
case _ =>
798798
false

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@ class CapturedVars extends MiniPhase with IdentityDenotTransformer { thisTransfo
2626

2727
class Transform(captured: collection.Set[Symbol]) extends TreeTransform {
2828
def phase = thisTransform
29-
override def treeTransformPhase = thisTransform.next
3029

3130
private class CollectCaptured(implicit ctx: Context) extends EnclosingMethodTraverser {
3231
private val captured = mutable.HashSet[Symbol]()

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@ class Constructors extends MiniPhaseTransform with SymTransformer { thisTransfor
3131
override def phaseName: String = "constructors"
3232
override def runsAfter: Set[Class[_ <: Phase]] = Set(classOf[Erasure])
3333

34-
override def treeTransformPhase = thisTransform.next
35-
3634
/** Symbols that are owned by either <local dummy> or a class field move into the
3735
* primary constructor.
3836
*/

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,6 @@ class ElimByName extends MiniPhaseTransform with InfoTransformer { thisTransform
5151
// assumes idents and selects have symbols; interferes with splitter distribution
5252
// that's why it's "after group".
5353

54-
override def treeTransformPhase = thisTransformer.next
55-
5654
/** The info of the tree's symbol at phase Nullarify (i.e. before transformation) */
5755
private def originalDenotation(tree: Tree)(implicit ctx: Context) =
5856
tree.symbol.denot(ctx.withPhase(thisTransformer))

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ class ExplicitOuter extends MiniPhaseTransform with InfoTransformer { thisTransf
4343
* before this phase starts
4444
*/
4545
override def runsAfter: Set[Class[_ <: Phase]] = Set(classOf[PatternMatcher])
46-
override def treeTransformPhase = thisTransformer.next
4746

4847
/** Add outer accessors if a class always needs an outer pointer */
4948
override def transformInfo(tp: Type, sym: Symbol)(implicit ctx: Context) = tp match {

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,6 @@ class ExtensionMethods extends MiniPhaseTransform with DenotTransformer with Ful
5757
ref
5858
}
5959

60-
override def treeTransformPhase = thisTransformer.next
61-
6260
protected def rewiredTarget(target: Symbol, derived: Symbol)(implicit ctx: Context): Symbol =
6361
if (isMethodWithExtension(target) &&
6462
target.owner.linkedClass == derived.owner) extensionMethod(target)

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ class FirstTransform extends MiniPhaseTransform with IdentityDenotTransformer wi
3535

3636
override def phaseName = "firstTransform"
3737

38-
3938
def transformInfo(tp: Type, sym: Symbol)(implicit ctx: Context): Type = tp
4039

4140
override def checkPostCondition(tree: Tree)(implicit ctx: Context): Unit = tree match {

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@ class Flatten extends MiniPhaseTransform with SymTransformer { thisTransform =>
2525
else ref
2626
}
2727

28-
override def treeTransformPhase = thisTransform.next
29-
3028
private val liftedDefs = new mutable.ListBuffer[Tree]
3129

3230
private def liftIfNested(tree: Tree)(implicit ctx: Context, info: TransformerInfo) =

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ class Getters extends MiniPhaseTransform with SymTransformer { thisTransform =>
4343
import ast.tpd._
4444

4545
override def phaseName = "getters"
46-
override def treeTransformPhase = thisTransform.next
4746

4847
override def transformSym(d: SymDenotation)(implicit ctx: Context): SymDenotation = {
4948
def noGetterNeeded =

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

Lines changed: 0 additions & 117 deletions
This file was deleted.

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ import StdNames._
4040
* using the most precise overload available
4141
* - `x.getClass` for getClass in primitives becomes `x.getClass` with getClass in class Object.
4242
*/
43-
class InterceptedMethods extends MiniPhaseTransform {
43+
class InterceptedMethods extends MiniPhaseTransform { thisTransform =>
4444

4545
import tpd._
4646

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ class LambdaLift extends MiniPhase with IdentityDenotTransformer { thisTransform
4545

4646
class LambdaLifter extends TreeTransform {
4747
override def phase = thisTransform
48-
override def treeTransformPhase = thisTransform.next
4948

5049
private type SymSet = TreeSet[Symbol]
5150

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@ class LazyValsTransform extends MiniPhaseTransform with IdentityDenotTransformer
3737

3838
override def phaseName: String = "LazyVals"
3939

40-
override def treeTransformPhase = this.next
41-
4240
/** List of names of phases that should have finished processing of tree
4341
* before this phase starts processing same tree */
4442
// override def ensureAfter: Set[String] = Set("mixin")

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import ast.Trees._
1515
* The constant types are eliminated by erasure, so we need to keep
1616
* the info about constantness in the trees.
1717
*/
18-
class Literalize extends MiniPhaseTransform {
18+
class Literalize extends MiniPhaseTransform { thisTransform =>
1919
import ast.tpd._
2020

2121
override def phaseName: String = "literalize"

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ import Decorators._
3535
import ast.tpd._
3636

3737
override def phaseName = "memoize"
38-
override def treeTransformPhase = thisTransform.next
3938

4039
/** Should to run after mixin so that fields get generated in the
4140
* class that contains the concrete getter rather than the trait

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,6 @@ class Mixin extends MiniPhaseTransform with SymTransformer { thisTransform =>
6767
import ast.tpd._
6868

6969
override def phaseName: String = "mixin"
70-
override def treeTransformPhase = thisTransform.next
7170

7271
override def runsAfter: Set[Class[_ <: Phase]] = Set(classOf[Erasure])
7372

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,6 @@ import scala.reflect.internal.util.Collections
3636
class PatternMatcher extends MiniPhaseTransform with DenotTransformer {thisTransformer =>
3737
import dotty.tools.dotc.ast.tpd._
3838

39-
override def treeTransformPhase = thisTransformer.next
40-
4139
override def transform(ref: SingleDenotation)(implicit ctx: Context): SingleDenotation = ref
4240

4341
override def runsAfter = Set(classOf[ElimRepeated])

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ class PrivateToStatic extends MiniPhase with SymTransformer { thisTransform =>
4848

4949
class Transform(thisParam: Symbol) extends TreeTransform {
5050
def phase = thisTransform
51-
override def treeTransformPhase = thisTransform.next
5251

5352
override def prepareForDefDef(tree: DefDef)(implicit ctx: Context) =
5453
if (shouldBeStatic(tree.symbol)) {

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,6 @@ class ResolveSuper extends MiniPhaseTransform with IdentityDenotTransformer { th
4848

4949
override def phaseName: String = "resolveSuper"
5050

51-
override def treeTransformPhase = thisTransform.next
52-
5351
/** Returns the symbol that is accessed by a super-accessor in a mixin composition.
5452
*
5553
* @param base The class in which everything is mixed together

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

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,6 @@ class RestoreScopes extends MiniPhaseTransform with IdentityDenotTransformer { t
1919
import ast.tpd._
2020
override def phaseName = "restoreScopes"
2121

22-
override def treeTransformPhase = thisTransform.next
23-
2422
override def transformTypeDef(tree: TypeDef)(implicit ctx: Context, info: TransformerInfo) = {
2523
val TypeDef(_, Template(constr, _, _, body)) = tree
2624
val restoredDecls = newScope

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

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,10 @@ import Decorators._
1818
* is called directly. The reason for this step is that JavaSeqLiterals, being arrays
1919
* keep a precise type after erasure, whereas SeqLiterals only get the erased type `Seq`,
2020
*/
21-
class SeqLiterals extends MiniPhaseTransform { thisTransformer =>
21+
class SeqLiterals extends MiniPhaseTransform {
2222
import ast.tpd._
2323

2424
override def phaseName = "seqLiterals"
25-
override def treeTransformPhase = thisTransformer.next
2625
override def runsAfter: Set[Class[_ <: Phase]] = Set(classOf[PatternMatcher])
2726

2827
override def checkPostCondition(tree: Tree)(implicit ctx: Context): Unit = tree match {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import Contexts._, Types._, Decorators._, Denotations._, Symbols._, SymDenotatio
1212
*
1313
* For now, only self references are treated.
1414
*/
15-
class Splitter extends MiniPhaseTransform {
15+
class Splitter extends MiniPhaseTransform { thisTransform =>
1616
import ast.tpd._
1717

1818
override def phaseName: String = "splitter"

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ class SyntheticMethods extends MiniPhaseTransform with IdentityDenotTransformer
170170
override def transformTemplate(impl: Template)(implicit ctx: Context, info: TransformerInfo) =
171171
if (ctx.owner.is(Case) || isDerivedValueClass(ctx.owner))
172172
cpy.Template(impl)(
173-
body = impl.body ++ syntheticMethods(ctx.owner.asClass)(ctx.withPhase(thisTransformer.next)))
173+
body = impl.body ++ syntheticMethods(ctx.owner.asClass))
174174
else
175175
impl
176176
}

0 commit comments

Comments
 (0)