summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/Global.scala
diff options
context:
space:
mode:
authorSean McDirmid <sean.mcdirmid@gmail.com>2008-04-07 15:56:41 +0000
committerSean McDirmid <sean.mcdirmid@gmail.com>2008-04-07 15:56:41 +0000
commit67af71b370af294fef48d78efb3337274dbcecd3 (patch)
treecd0c131c59909070d75e2918aad0ff67e130504d /src/compiler/scala/tools/nsc/Global.scala
parent97f01e6f8e81ea83f1d06dbb770234cc8b260c50 (diff)
downloadscala-67af71b370af294fef48d78efb3337274dbcecd3.tar.gz
scala-67af71b370af294fef48d78efb3337274dbcecd3.tar.bz2
scala-67af71b370af294fef48d78efb3337274dbcecd3.zip
Fixing infinite loop bug in type checker.
Diffstat (limited to 'src/compiler/scala/tools/nsc/Global.scala')
-rw-r--r--src/compiler/scala/tools/nsc/Global.scala15
1 files changed, 13 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/Global.scala b/src/compiler/scala/tools/nsc/Global.scala
index 1c59d6d8bc..8e82d056ed 100644
--- a/src/compiler/scala/tools/nsc/Global.scala
+++ b/src/compiler/scala/tools/nsc/Global.scala
@@ -188,6 +188,16 @@ class Global(var settings: Settings, var reporter: Reporter) extends SymbolTable
new classPath0.Build(settings.classpath.value, settings.sourcepath.value,
settings.outdir.value, settings.bootclasspath.value,
settings.extdirs.value, settings.Xcodebase.value)
+ /* .NET's equivalent of a classpath */
+ lazy val assemrefs = {
+ import java.util.{StringTokenizer}
+ val set = new HashSet[File]
+ val assems = new StringTokenizer(settings.assemrefs.value, File.pathSeparator)
+ while (assems.hasMoreTokens())
+ set += new java.io.File(assems.nextToken())
+ set
+ }
+
if (settings.verbose.value) {
inform("[Classpath = " + classPath + "]")
@@ -597,11 +607,12 @@ 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.hasErrors) {
+ while (localPhase != null && (localPhase.id < globalPhase.id || localPhase.id <= namerPhase.id) && !reporter.hasErrors) {
val oldSource = reporter.getSource
reporter.setSource(unit.source)
atPhase(localPhase)(localPhase.applyPhase(unit))
- localPhase = localPhase.next.asInstanceOf[GlobalPhase]
+ val newLocalPhase = localPhase.next.asInstanceOf[GlobalPhase]
+ localPhase = if (localPhase == newLocalPhase) null else newLocalPhase
reporter.setSource(oldSource)
}
refreshProgress