summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/Global.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/compiler/scala/tools/nsc/Global.scala')
-rw-r--r--src/compiler/scala/tools/nsc/Global.scala36
1 files changed, 17 insertions, 19 deletions
diff --git a/src/compiler/scala/tools/nsc/Global.scala b/src/compiler/scala/tools/nsc/Global.scala
index eebbf739ed..6466a02d8d 100644
--- a/src/compiler/scala/tools/nsc/Global.scala
+++ b/src/compiler/scala/tools/nsc/Global.scala
@@ -206,7 +206,7 @@ class Global(var settings: Settings, var reporter: Reporter) extends SymbolTable
abstract class GlobalPhase(prev: Phase) extends Phase(prev) {
phaseWithId(id) = this
- def run: unit = currentRun.units foreach applyPhase
+ def run { currentRun.units foreach applyPhase }
def apply(unit: CompilationUnit): unit
private val isErased = prev.name == "erasure" || prev.erasedTypes
@@ -217,7 +217,7 @@ class Global(var settings: Settings, var reporter: Reporter) extends SymbolTable
if (settings.debug.value) inform("[running phase " + name + " on " + unit + "]")
val unit0 = currentRun.currentUnit
currentRun.currentUnit = unit
- apply(unit)
+ if (!reporter.cancelled) apply(unit)
currentRun.advanceUnit
assert(currentRun.currentUnit == unit)
currentRun.currentUnit = unit0
@@ -393,13 +393,12 @@ class Global(var settings: Settings, var reporter: Reporter) extends SymbolTable
var uncheckedWarnings: boolean = false
private var p: Phase = firstPhase
- private var stopped = false
- for (val pd <- phaseDescriptors) {
- if (!stopped) {
- if (!(settings.skip contains pd.phaseName)) p = pd.newPhase(p)
- stopped = settings.stop contains pd.phaseName
- }
- }
+
+ for (val pd <- phaseDescriptors.takeWhile(pd => !(settings.stop contains pd.phaseName)))
+ if (!(settings.skip contains pd.phaseName)) p = pd.newPhase(p)
+
+ def cancel { reporter.cancelled = true }
+
// progress tracking
def progress(current: Int, total: Int): Unit = {}
@@ -469,7 +468,7 @@ class Global(var settings: Settings, var reporter: Reporter) extends SymbolTable
addUnit(new CompilationUnit(source))
globalPhase = firstPhase
- while (globalPhase != terminalPhase && reporter.errors == 0) {
+ while (globalPhase != terminalPhase && !reporter.hasErrors) {
val startTime = currentTime
phase = globalPhase
globalPhase.run
@@ -493,19 +492,19 @@ class Global(var settings: Settings, var reporter: Reporter) extends SymbolTable
if (settings.Xshowobj.value != "")
showDef(newTermName(settings.Xshowobj.value), true)
- if (reporter.errors == 0) {
- assert(stopped || symData.isEmpty, symData.elements.toList)
+ if (reporter.hasErrors) {
+ for (val Pair(sym, file) <- symSource.elements) {
+ sym.reset(new loaders.SourcefileLoader(file))
+ if (sym.isTerm) sym.moduleClass.reset(loaders.moduleClassLoader)
+ }
+ } else {
+ assert(symData.isEmpty || !settings.stop.value.isEmpty || !settings.skip.value.isEmpty)
if (deprecationWarnings) {
warning("there were deprecation warnings; re-run with -deprecation for details")
}
if (uncheckedWarnings) {
warning("there were unchecked warnings; re-run with -unchecked for details")
}
- } else {
- for (val Pair(sym, file) <- symSource.elements) {
- sym.reset(new loaders.SourcefileLoader(file))
- if (sym.isTerm) sym.moduleClass.reset(loaders.moduleClassLoader)
- }
}
for (val Pair(sym, file) <- symSource.elements) resetPackageClass(sym.owner)
//units foreach (.clear())
@@ -523,8 +522,7 @@ class Global(var settings: Settings, var reporter: Reporter) extends SymbolTable
val unit = new CompilationUnit(getSourceFile(file))
addUnit(unit)
var localPhase = firstPhase.asInstanceOf[GlobalPhase]
- while ((localPhase.id < globalPhase.id || localPhase.id <= namerPhase.id) &&
- reporter.errors == 0) {
+ while ((localPhase.id < globalPhase.id || localPhase.id <= namerPhase.id) && !reporter.hasErrors) {
atPhase(localPhase)(localPhase.applyPhase(unit))
localPhase = localPhase.next.asInstanceOf[GlobalPhase]
}