summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/compiler/scala/tools/nsc/Global.scala15
-rw-r--r--src/compiler/scala/tools/nsc/Phase.scala2
-rw-r--r--src/compiler/scala/tools/nsc/Settings.scala2
-rw-r--r--src/compiler/scala/tools/nsc/ast/parser/SyntaxAnalyzer.scala1
-rw-r--r--src/compiler/scala/tools/nsc/backend/icode/Checkers.scala2
-rw-r--r--src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala7
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/Analyzer.scala1
-rw-r--r--src/compiler/scala/tools/nsc/typechecker/TreeCheckers.scala3
8 files changed, 25 insertions, 8 deletions
diff --git a/src/compiler/scala/tools/nsc/Global.scala b/src/compiler/scala/tools/nsc/Global.scala
index 5a2c5bac5c..8eb42292d1 100644
--- a/src/compiler/scala/tools/nsc/Global.scala
+++ b/src/compiler/scala/tools/nsc/Global.scala
@@ -586,12 +586,17 @@ class Global(var settings: Settings, var reporter: Reporter) extends SymbolTable
if (settings.browse contains globalPhase.name) treeBrowser.browse(units)
informTime(globalPhase.description, startTime)
- globalPhase = globalPhase.next
- if (settings.check contains globalPhase.name) {
- phase = globalPhase
- if (globalPhase.id >= icodePhase.id) icodeChecker.checkICodes
- else checker.checkTrees
+ if ((settings.check contains globalPhase.name) ||
+ (settings.check contains "all")) {
+ if (globalPhase.checkable) {
+ phase = globalPhase
+ if (globalPhase.id >= icodePhase.id) icodeChecker.checkICodes
+ else checker.checkTrees
+ } else if (!(settings.check contains "all")) {
+ warning("It is not possible to check the result of the "+globalPhase.name+" phase")
+ }
}
+ globalPhase = globalPhase.next
if (settings.statistics.value) statistics.print(phase)
advancePhase
}
diff --git a/src/compiler/scala/tools/nsc/Phase.scala b/src/compiler/scala/tools/nsc/Phase.scala
index 57780ed5ee..2a7a339ec7 100644
--- a/src/compiler/scala/tools/nsc/Phase.scala
+++ b/src/compiler/scala/tools/nsc/Phase.scala
@@ -31,6 +31,8 @@ abstract class Phase(val prev: Phase) {
def name: String
def description: String = name
+ // Will running with -Ycheck:name work?
+ def checkable: Boolean = true
def devirtualized: Boolean = false
def erasedTypes: Boolean = false
def flatClasses: Boolean = false
diff --git a/src/compiler/scala/tools/nsc/Settings.scala b/src/compiler/scala/tools/nsc/Settings.scala
index 0651e3b55a..3b1a3cff21 100644
--- a/src/compiler/scala/tools/nsc/Settings.scala
+++ b/src/compiler/scala/tools/nsc/Settings.scala
@@ -128,7 +128,7 @@ class Settings(error: String => Unit) {
val Yhelp = BooleanSetting ("-Y", "Print a synopsis of private options").hideToIDE
val browse = PhasesSetting ("-Ybrowse", "Browse the abstract syntax tree after")
- val check = PhasesSetting ("-Ycheck", "Check the tree at start of")
+ val check = PhasesSetting ("-Ycheck", "Check the tree at the end of the given phase. Specify \"all\" to check all checkable phases")
val Xcloselim = BooleanSetting ("-Yclosure-elim", "Perform closure elimination")
val Xcodebase = StringSetting ("-Ycodebase", "codebase", "Specify the URL containing the Scala libraries", "").hideToIDE
val debug = BooleanSetting ("-Ydebug", "Output debugging messages").hideToIDE
diff --git a/src/compiler/scala/tools/nsc/ast/parser/SyntaxAnalyzer.scala b/src/compiler/scala/tools/nsc/ast/parser/SyntaxAnalyzer.scala
index 577ca3c451..c8c1b3e7c9 100644
--- a/src/compiler/scala/tools/nsc/ast/parser/SyntaxAnalyzer.scala
+++ b/src/compiler/scala/tools/nsc/ast/parser/SyntaxAnalyzer.scala
@@ -17,6 +17,7 @@ abstract class SyntaxAnalyzer extends SubComponent with Parsers with MarkupParse
def newPhase(prev: Phase): StdPhase = new ParserPhase(prev)
class ParserPhase(prev: scala.tools.nsc.Phase) extends StdPhase(prev) {
+ override val checkable = false
def apply(unit: global.CompilationUnit) {
global.informProgress("parsing " + unit)
unit.body =
diff --git a/src/compiler/scala/tools/nsc/backend/icode/Checkers.scala b/src/compiler/scala/tools/nsc/backend/icode/Checkers.scala
index 46b5066e63..fd85877bfa 100644
--- a/src/compiler/scala/tools/nsc/backend/icode/Checkers.scala
+++ b/src/compiler/scala/tools/nsc/backend/icode/Checkers.scala
@@ -70,7 +70,7 @@ abstract class Checkers {
// val CASE_CLASS = REFERENCE(definitions.getClass("scala.CaseClass"))
def checkICodes: Unit = {
- Console.println("[[consistency check at beginning of phase " + globalPhase.name + "]]")
+ Console.println("[[consistency check at end of phase " + globalPhase.name + "]]")
classes.values foreach check
}
diff --git a/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala b/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
index 56c20854db..ed370bc48e 100644
--- a/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
+++ b/src/compiler/scala/tools/nsc/transform/ExplicitOuter.scala
@@ -524,4 +524,11 @@ abstract class ExplicitOuter extends InfoTransform with TransMatcher with Patter
atPhase(phase.next) { super.transformUnit(unit) }
}
}
+
+ override def newPhase(prev: scala.tools.nsc.Phase): StdPhase =
+ new Phase(prev)
+
+ class Phase(prev: scala.tools.nsc.Phase) extends super.Phase(prev) {
+ override val checkable = false
+ }
}
diff --git a/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala b/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala
index bca41b1fee..ca9f654b76 100644
--- a/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/Analyzer.scala
@@ -25,6 +25,7 @@ trait Analyzer extends AnyRef
val global: Analyzer.this.global.type = Analyzer.this.global
val phaseName = "namer"
def newPhase(_prev: Phase): StdPhase = new StdPhase(_prev) {
+ override val checkable = false
def apply(unit: CompilationUnit) {
newNamer(rootContext(unit)).enterSym(unit.body)
}
diff --git a/src/compiler/scala/tools/nsc/typechecker/TreeCheckers.scala b/src/compiler/scala/tools/nsc/typechecker/TreeCheckers.scala
index 73c9191c61..077b66035f 100644
--- a/src/compiler/scala/tools/nsc/typechecker/TreeCheckers.scala
+++ b/src/compiler/scala/tools/nsc/typechecker/TreeCheckers.scala
@@ -16,7 +16,8 @@ abstract class TreeCheckers extends Analyzer {
val tpeOfTree = new scala.collection.mutable.HashMap[Tree, Type]
def checkTrees {
- Console.println("[consistency check at start of phase " + phase + "]")
+ if (settings.verbose.value)
+ Console.println("[consistency check at end of phase " + phase + "]")
for (unit <- currentRun.units) check(unit)
}