summaryrefslogtreecommitdiff
path: root/sources/scala/tools/nsc/Global.scala
diff options
context:
space:
mode:
authorIulian Dragos <jaguarul@gmail.com>2005-09-23 16:04:10 +0000
committerIulian Dragos <jaguarul@gmail.com>2005-09-23 16:04:10 +0000
commit4a72b68fe32818b2532308536a91a0e573590ab9 (patch)
tree223b23cf6a9684f66efab76906a7f81957dfb3ed /sources/scala/tools/nsc/Global.scala
parent7554cbeb65687e131d88b70c951bc8b285ed2f3d (diff)
downloadscala-4a72b68fe32818b2532308536a91a0e573590ab9.tar.gz
scala-4a72b68fe32818b2532308536a91a0e573590ab9.tar.bz2
scala-4a72b68fe32818b2532308536a91a0e573590ab9.zip
Various bug fixes.
Diffstat (limited to 'sources/scala/tools/nsc/Global.scala')
-rwxr-xr-xsources/scala/tools/nsc/Global.scala26
1 files changed, 20 insertions, 6 deletions
diff --git a/sources/scala/tools/nsc/Global.scala b/sources/scala/tools/nsc/Global.scala
index 117b0271e1..8a2715eb01 100755
--- a/sources/scala/tools/nsc/Global.scala
+++ b/sources/scala/tools/nsc/Global.scala
@@ -153,6 +153,7 @@ class Global(val settings: Settings, val reporter: Reporter) extends SymbolTable
var globalPhase: Phase = NoPhase;
+
abstract class GlobalPhase(prev: Phase) extends Phase(prev) {
def run: unit = units foreach applyPhase;
def apply(unit: CompilationUnit): unit;
@@ -254,8 +255,8 @@ class Global(val settings: Settings, val reporter: Reporter) extends SymbolTable
flatten,
constructors,
mixin,
- if (settings.Xshowicode.value) genicode
- else sampleTransform);
+ genicode,
+ sampleTransform);
val parserPhase = syntaxAnalyzer.newPhase(NoPhase);
val firstPhase = parserPhase;
@@ -345,7 +346,7 @@ class Global(val settings: Settings, val reporter: Reporter) extends SymbolTable
globalPhase = globalPhase.next;
if (settings.check contains globalPhase.name) {
phase = globalPhase;
- if (globalPhase.name == "terminal" && settings.Xshowicode.value)
+ if (globalPhase.name == "terminal")
icodeChecker.checkICodes;
else
checker.checkTrees;
@@ -355,7 +356,7 @@ class Global(val settings: Settings, val reporter: Reporter) extends SymbolTable
if (settings.Xshowcls.value != "") showDef(newTermName(settings.Xshowcls.value), false);
if (settings.Xshowobj.value != "") showDef(newTermName(settings.Xshowobj.value), true);
- if (settings.Xshowicode.value) printICode();
+ if (settings.Xshowicode.value) writeICode();
if (reporter.errors() == 0) {
for (val Pair(sym, pickled) <- symData.elements.toList) {
@@ -451,8 +452,21 @@ class Global(val settings: Settings, val reporter: Reporter) extends SymbolTable
}
}
- private def printICode(): Unit = {
+ private def writeICode(): Unit = {
val printer = new icodePrinter.TextPrinter(new PrintWriter(System.out, true));
- icodes.classes.foreach(printer.printClass);
+ icodes.classes.foreach((cls) => {
+ val file = getFile(cls.symbol, ".icode");
+ try {
+ val stream = new FileOutputStream(file);
+ printer.setWriter(new PrintWriter(stream, true));
+ printer.printClass(cls);
+ informProgress("wrote " + file);
+ } catch {
+ case ex: IOException =>
+ if (settings.debug.value) ex.printStackTrace();
+ error("could not write file " + file);
+ }
+
+ });
}
}