aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSébastien Doeraene <sjrdoeraene@gmail.com>2016-03-16 12:02:07 +0100
committerSébastien Doeraene <sjrdoeraene@gmail.com>2016-03-16 12:02:07 +0100
commit9b98abf49849549eec4b2cf09e029b745abb0557 (patch)
tree7a595ec9fca812b0b4c28db99eff63bf80fe529f
parent3f47afb0f8655b734ed432002a9e07aad92e7867 (diff)
downloaddotty-9b98abf49849549eec4b2cf09e029b745abb0557.tar.gz
dotty-9b98abf49849549eec4b2cf09e029b745abb0557.tar.bz2
dotty-9b98abf49849549eec4b2cf09e029b745abb0557.zip
Cache the Phases we need in JSCodeGen like all other phases.
-rw-r--r--src/dotty/tools/backend/sjs/JSCodeGen.scala11
-rw-r--r--src/dotty/tools/dotc/core/Phases.scala4
2 files changed, 7 insertions, 8 deletions
diff --git a/src/dotty/tools/backend/sjs/JSCodeGen.scala b/src/dotty/tools/backend/sjs/JSCodeGen.scala
index 006c9f674..de5c8711d 100644
--- a/src/dotty/tools/backend/sjs/JSCodeGen.scala
+++ b/src/dotty/tools/backend/sjs/JSCodeGen.scala
@@ -58,11 +58,6 @@ class JSCodeGen()(implicit ctx: Context) {
private val positionConversions = new JSPositions()(ctx)
import positionConversions.{pos2irPos, implicitPos2irPos}
- private val elimRepeatedPhase =
- ctx.phaseOfClass(classOf[dotty.tools.dotc.transform.ElimRepeated])
- private val elimErasedValueTypePhase =
- ctx.phaseOfClass(classOf[dotty.tools.dotc.transform.ElimErasedValueType])
-
// Some state --------------------------------------------------------------
private val currentClassSym = new ScopedVar[Symbol]
@@ -1743,7 +1738,7 @@ class JSCodeGen()(implicit ctx: Context) {
if (isStat) {
boxedResult
} else {
- val tpe = ctx.atPhase(elimErasedValueTypePhase) { implicit ctx =>
+ val tpe = ctx.atPhase(ctx.elimErasedValueTypePhase) { implicit ctx =>
sym.info.finalResultType
}
unbox(boxedResult, tpe)
@@ -2208,12 +2203,12 @@ class JSCodeGen()(implicit ctx: Context) {
def paramNamesAndTypes(implicit ctx: Context): List[(Names.TermName, Type)] =
sym.info.paramNamess.flatten.zip(sym.info.paramTypess.flatten)
- val wereRepeated = ctx.atPhase(elimRepeatedPhase) { implicit ctx =>
+ val wereRepeated = ctx.atPhase(ctx.elimRepeatedPhase) { implicit ctx =>
for ((name, tpe) <- paramNamesAndTypes)
yield (name -> tpe.isRepeatedParam)
}.toMap
- val paramTypes = ctx.atPhase(elimErasedValueTypePhase) { implicit ctx =>
+ val paramTypes = ctx.atPhase(ctx.elimErasedValueTypePhase) { implicit ctx =>
paramNamesAndTypes
}.toMap
diff --git a/src/dotty/tools/dotc/core/Phases.scala b/src/dotty/tools/dotc/core/Phases.scala
index b60f437d5..ce87506ae 100644
--- a/src/dotty/tools/dotc/core/Phases.scala
+++ b/src/dotty/tools/dotc/core/Phases.scala
@@ -233,8 +233,10 @@ object Phases {
private val picklerCache = new PhaseCache(classOf[Pickler])
private val refChecksCache = new PhaseCache(classOf[RefChecks])
+ private val elimRepeatedCache = new PhaseCache(classOf[ElimRepeated])
private val extensionMethodsCache = new PhaseCache(classOf[ExtensionMethods])
private val erasureCache = new PhaseCache(classOf[Erasure])
+ private val elimErasedValueTypeCache = new PhaseCache(classOf[ElimErasedValueType])
private val patmatCache = new PhaseCache(classOf[PatternMatcher])
private val lambdaLiftCache = new PhaseCache(classOf[LambdaLift])
private val flattenCache = new PhaseCache(classOf[Flatten])
@@ -245,8 +247,10 @@ object Phases {
def typerPhase = typerCache.phase
def picklerPhase = picklerCache.phase
def refchecksPhase = refChecksCache.phase
+ def elimRepeatedPhase = elimRepeatedCache.phase
def extensionMethodsPhase = extensionMethodsCache.phase
def erasurePhase = erasureCache.phase
+ def elimErasedValueTypePhase = elimErasedValueTypeCache.phase
def patmatPhase = patmatCache.phase
def lambdaLiftPhase = lambdaLiftCache.phase
def flattenPhase = flattenCache.phase