summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2010-04-09 15:43:18 +0000
committerIulian Dragos <jaguarul@gmail.com>2010-04-09 15:43:18 +0000
commit04e60a56e945f760dee3813e4ce2972a4c812844 (patch)
treea1744b3d34abf7c0fefac17e08c1e0f7ec941200 /src/compiler/scala/tools/nsc
parent0528b12ed4eeb46e373452fefe4ebe4f31648b73 (diff)
downloadscala-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/scala/tools/nsc')
-rw-r--r--src/compiler/scala/tools/nsc/Phase.scala2
-rw-r--r--src/compiler/scala/tools/nsc/symtab/Symbols.scala3
-rw-r--r--src/compiler/scala/tools/nsc/transform/Erasure.scala2
-rw-r--r--src/compiler/scala/tools/nsc/transform/InfoTransform.scala2
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Analyzer.scala3
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)