Skip to content

Commit 5ab7c6c

Browse files
committed
Avoid phase caches
Extra work would be needed to keep them up-to-date. In the end its easier to just set speficic phases on initialization.
1 parent a516a4e commit 5ab7c6c

File tree

1 file changed

+45
-45
lines changed

1 file changed

+45
-45
lines changed

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

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,7 @@ object Phases {
149149
})
150150

151151
phases = (NoPhase :: flatPhases.toList ::: new TerminalPhase :: Nil).toArray
152+
setSpecificPhases()
152153
var phasesAfter:Set[Class[_ <: Phase]] = Set.empty
153154
nextDenotTransformerId = new Array[Int](phases.length)
154155
denotTransformers = new Array[DenotTransformer](phases.length)
@@ -211,53 +212,52 @@ object Phases {
211212
config.println(s"nextDenotTransformerId = ${nextDenotTransformerId.deep}")
212213
}
213214

214-
def phaseOfClass(pclass: Class[_]) = phases.find(pclass.isInstance).getOrElse(NoPhase)
215-
216-
private val cachedPhases = collection.mutable.Set[PhaseCache]()
217-
private def cleanPhaseCache = cachedPhases.foreach(_.myPhase = NoPhase)
218-
219-
/** A cache to compute the phase with given name, which
220-
* stores the phase as soon as phaseNamed returns something
221-
* different from NoPhase.
222-
*/
223-
private class PhaseCache(pclass: Class[_ <: Phase]) {
224-
var myPhase: Phase = NoPhase
225-
def phase = {
226-
if (myPhase eq NoPhase) myPhase = phaseOfClass(pclass)
227-
myPhase
228-
}
229-
cachedPhases += this
215+
private var myTyperPhase: Phase = _
216+
private var myPicklerPhase: Phase = _
217+
private var myRefChecksPhase: Phase = _
218+
private var myPatmatPhase: Phase = _
219+
private var myElimRepeatedPhase: Phase = _
220+
private var myExtensionMethodsPhase: Phase = _
221+
private var myExplicitOuterPhase: Phase = _
222+
private var myGettersPhase: Phase = _
223+
private var myErasurePhase: Phase = _
224+
private var myElimErasedValueTypePhase: Phase = _
225+
private var myLambdaLiftPhase: Phase = _
226+
private var myFlattenPhase: Phase = _
227+
private var myGenBCodePhase: Phase = _
228+
229+
def typerPhase = myTyperPhase
230+
def picklerPhase = myPicklerPhase
231+
def refchecksPhase = myRefChecksPhase
232+
def patmatPhase = myPatmatPhase
233+
def elimRepeatedPhase = myElimRepeatedPhase
234+
def extensionMethodsPhase = myExtensionMethodsPhase
235+
def explicitOuterPhase = myExplicitOuterPhase
236+
def gettersPhase = myGettersPhase
237+
def erasurePhase = myErasurePhase
238+
def elimErasedValueTypePhase = myElimErasedValueTypePhase
239+
def lambdaLiftPhase = myLambdaLiftPhase
240+
def flattenPhase = myFlattenPhase
241+
def genBCodePhase = myGenBCodePhase
242+
243+
private def setSpecificPhases() = {
244+
def phaseOfClass(pclass: Class[_]) = phases.find(pclass.isInstance).getOrElse(NoPhase)
245+
246+
myTyperPhase = phaseOfClass(classOf[FrontEnd])
247+
myPicklerPhase = phaseOfClass(classOf[Pickler])
248+
myRefChecksPhase = phaseOfClass(classOf[RefChecks])
249+
myElimRepeatedPhase = phaseOfClass(classOf[ElimRepeated])
250+
myExtensionMethodsPhase = phaseOfClass(classOf[ExtensionMethods])
251+
myErasurePhase = phaseOfClass(classOf[Erasure])
252+
myElimErasedValueTypePhase = phaseOfClass(classOf[ElimErasedValueType])
253+
myPatmatPhase = phaseOfClass(classOf[PatternMatcher])
254+
myLambdaLiftPhase = phaseOfClass(classOf[LambdaLift])
255+
myFlattenPhase = phaseOfClass(classOf[Flatten])
256+
myExplicitOuterPhase = phaseOfClass(classOf[ExplicitOuter])
257+
myGettersPhase = phaseOfClass(classOf[Getters])
258+
myGenBCodePhase = phaseOfClass(classOf[GenBCode])
230259
}
231260

232-
private val typerCache = new PhaseCache(classOf[FrontEnd])
233-
private val picklerCache = new PhaseCache(classOf[Pickler])
234-
235-
private val refChecksCache = new PhaseCache(classOf[RefChecks])
236-
private val elimRepeatedCache = new PhaseCache(classOf[ElimRepeated])
237-
private val extensionMethodsCache = new PhaseCache(classOf[ExtensionMethods])
238-
private val erasureCache = new PhaseCache(classOf[Erasure])
239-
private val elimErasedValueTypeCache = new PhaseCache(classOf[ElimErasedValueType])
240-
private val patmatCache = new PhaseCache(classOf[PatternMatcher])
241-
private val lambdaLiftCache = new PhaseCache(classOf[LambdaLift])
242-
private val flattenCache = new PhaseCache(classOf[Flatten])
243-
private val explicitOuterCache = new PhaseCache(classOf[ExplicitOuter])
244-
private val gettersCache = new PhaseCache(classOf[Getters])
245-
private val genBCodeCache = new PhaseCache(classOf[GenBCode])
246-
247-
def typerPhase = typerCache.phase
248-
def picklerPhase = picklerCache.phase
249-
def refchecksPhase = refChecksCache.phase
250-
def elimRepeatedPhase = elimRepeatedCache.phase
251-
def extensionMethodsPhase = extensionMethodsCache.phase
252-
def erasurePhase = erasureCache.phase
253-
def elimErasedValueTypePhase = elimErasedValueTypeCache.phase
254-
def patmatPhase = patmatCache.phase
255-
def lambdaLiftPhase = lambdaLiftCache.phase
256-
def flattenPhase = flattenCache.phase
257-
def explicitOuterPhase = explicitOuterCache.phase
258-
def gettersPhase = gettersCache.phase
259-
def genBCodePhase = genBCodeCache.phase
260-
261261
def isAfterTyper(phase: Phase): Boolean = phase.id > typerPhase.id
262262
}
263263

0 commit comments

Comments
 (0)