diff options
author | Iulian Dragos <jaguarul@gmail.com> | 2010-04-09 15:43:18 +0000 |
---|---|---|
committer | Iulian Dragos <jaguarul@gmail.com> | 2010-04-09 15:43:18 +0000 |
commit | 04e60a56e945f760dee3813e4ce2972a4c812844 (patch) | |
tree | a1744b3d34abf7c0fefac17e08c1e0f7ec941200 /src/compiler | |
parent | 0528b12ed4eeb46e373452fefe4ebe4f31648b73 (diff) | |
download | scala-04e60a56e945f760dee3813e4ce2972a4c812844.tar.gz scala-04e60a56e945f760dee3813e4ce2972a4c812844.tar.bz2 scala-04e60a56e945f760dee3813e4ce2972a4c812844.zip |
Changed default of 'keepsTypeParams' to true. All
phases that may change type parameters have to
explicitly override this method.
Diffstat (limited to 'src/compiler')
5 files changed, 9 insertions, 3 deletions
diff --git a/src/compiler/scala/tools/nsc/Phase.scala b/src/compiler/scala/tools/nsc/Phase.scala index de089ff7b6..cd5a399c12 100644 --- a/src/compiler/scala/tools/nsc/Phase.scala +++ b/src/compiler/scala/tools/nsc/Phase.scala @@ -36,7 +36,7 @@ abstract class Phase(val prev: Phase) { def devirtualized: Boolean = false def erasedTypes: Boolean = false def flatClasses: Boolean = false - def keepsTypeParams = false + def keepsTypeParams = true def run: Unit override def toString() = name diff --git a/src/compiler/scala/tools/nsc/symtab/Symbols.scala b/src/compiler/scala/tools/nsc/symtab/Symbols.scala index 2ccab7641a..4c702d7c42 100644 --- a/src/compiler/scala/tools/nsc/symtab/Symbols.scala +++ b/src/compiler/scala/tools/nsc/symtab/Symbols.scala @@ -902,7 +902,8 @@ trait Symbols extends reflect.generic.Symbols { self: SymbolTable => else { val current = phase try { - while (phase.keepsTypeParams) phase = phase.prev + while (phase.keepsTypeParams && (phase.prev ne NoPhase)) phase = phase.prev + if (phase ne current) phase = phase.next rawInfo.typeParams } finally { phase = current diff --git a/src/compiler/scala/tools/nsc/transform/Erasure.scala b/src/compiler/scala/tools/nsc/transform/Erasure.scala index ea759b30f5..94d52bc1cb 100644 --- a/src/compiler/scala/tools/nsc/transform/Erasure.scala +++ b/src/compiler/scala/tools/nsc/transform/Erasure.scala @@ -31,6 +31,8 @@ abstract class Erasure extends AddInterfaces with typechecker.Analyzer with ast. def newTransformer(unit: CompilationUnit): Transformer = new ErasureTransformer(unit) + override def keepsTypeParams = false + // -------- erasure on types -------------------------------------------------------- /** An extractor objec for generic arrays */ diff --git a/src/compiler/scala/tools/nsc/transform/InfoTransform.scala b/src/compiler/scala/tools/nsc/transform/InfoTransform.scala index 05fbe06174..9872705dfc 100644 --- a/src/compiler/scala/tools/nsc/transform/InfoTransform.scala +++ b/src/compiler/scala/tools/nsc/transform/InfoTransform.scala @@ -23,7 +23,7 @@ trait InfoTransform extends Transform { new Phase(prev) protected def changesBaseClasses = true - protected def keepsTypeParams = false + protected def keepsTypeParams = true class Phase(prev: scala.tools.nsc.Phase) extends super.Phase(prev) { override val keepsTypeParams = InfoTransform.this.keepsTypeParams diff --git a/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala b/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala index 519ad1b0bf..635608520d 100644 --- a/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala +++ b/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala @@ -33,6 +33,8 @@ trait Analyzer extends AnyRef val runsRightAfter = None def newPhase(_prev: Phase): StdPhase = new StdPhase(_prev) { override val checkable = false + override def keepsTypeParams = false + def apply(unit: CompilationUnit) { newNamer(rootContext(unit)).enterSym(unit.body) } @@ -71,6 +73,7 @@ trait Analyzer extends AnyRef val runsAfter = List[String]() val runsRightAfter = Some("packageobjects") def newPhase(_prev: Phase): StdPhase = new StdPhase(_prev) { + override def keepsTypeParams = false resetTyper() override def run { val start = startTimer(typerNanos) |