summaryrefslogtreecommitdiff
path: root/sources/scalac
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-12-03 18:41:08 +0000
committerpaltherr <paltherr@epfl.ch>2004-12-03 18:41:08 +0000
commitebe2c4bf3c1662b3667ce61fed54bde84afda615 (patch)
treedbc7c91a9aaf3989966bbcea30b306869d8a69e7 /sources/scalac
parent4fdab72617dbe4e049939e268df88f7a7efe5c06 (diff)
downloadscala-ebe2c4bf3c1662b3667ce61fed54bde84afda615.tar.gz
scala-ebe2c4bf3c1662b3667ce61fed54bde84afda615.tar.bz2
scala-ebe2c4bf3c1662b3667ce61fed54bde84afda615.zip
- Removed field units in class Global
Diffstat (limited to 'sources/scalac')
-rw-r--r--sources/scalac/Global.java45
-rw-r--r--sources/scalac/ast/Tree.java.tmpl7
-rw-r--r--sources/scalac/ast/printer/TreePrinter.java8
-rw-r--r--sources/scalac/atree/ATreePrinter.java9
-rw-r--r--sources/scalac/transformer/ICodePhase.java27
-rw-r--r--sources/scalac/typechecker/AnalyzerPhase.java2
6 files changed, 41 insertions, 57 deletions
diff --git a/sources/scalac/Global.java b/sources/scalac/Global.java
index eb41e5f3e5..dd0de1b26b 100644
--- a/sources/scalac/Global.java
+++ b/sources/scalac/Global.java
@@ -42,6 +42,7 @@ import scalac.symtab.classfile.PackageParser;
import scalac.symtab.classfile.CLRPackageParser;
import scalac.typechecker.AnalyzerPhase;
import scalac.typechecker.Infer;
+import scalac.transformer.ICodePhase;
import scalac.util.*;
/** The global environment of a compiler run
@@ -94,10 +95,6 @@ public abstract class Global {
*/
private final SourceReader reader;
- /** all compilation units
- */
- public CompilationUnit[] units;
-
/** the class path
*/
public final ClassPath classPath;
@@ -142,7 +139,7 @@ public abstract class Global {
/** The set of already compiled sourcefiles
*/
- public HashSet/*<SourceFile>*/ compiledUnits = new HashSet();
+ private HashSet/*<SourceFile>*/ compiledUnits = new HashSet();
/** the current phase
*/
@@ -348,7 +345,7 @@ public abstract class Global {
/** the top-level compilation process
*/
- public void compile(String[] files, boolean console) {
+ public CompilationUnit[] compile(String[] files, boolean console) {
reporter.resetCounters();
// parse files
List units = new ArrayList(files.length);
@@ -361,8 +358,8 @@ public abstract class Global {
error(exception.getMessage());
}
}
- this.units = (CompilationUnit[])units.toArray(new CompilationUnit[units.size()]);
- compile();
+ CompilationUnit[] array = new CompilationUnit[units.size()];
+ return compile((CompilationUnit[])units.toArray(array));
}
/**
@@ -372,17 +369,17 @@ public abstract class Global {
* @param input
* @param console
*/
- public void compile(String filename, String input, boolean console) {
+ public CompilationUnit[] compile(String filename, String input, boolean console) {
reporter.resetCounters();
SourceFile source = getSourceFile(filename, input);
compiledUnits.add(source);
- units = new CompilationUnit[]{new CompilationUnit(this, source, console)};
- compile();
+ CompilationUnit[] units = {new CompilationUnit(this, source, console)};
+ return compile(units);
}
/** compile all compilation units
*/
- private void compile() {
+ private CompilationUnit[] compile(CompilationUnit[] units) {
treePrinter.begin();
currentPhase = PHASE.INITIAL.phase();
@@ -393,11 +390,13 @@ public abstract class Global {
// System.out.println("*** " + currentPhase.descriptor.description() + " ***");
currentPhase.apply(units);
stop(currentPhase.descriptor.taskDescription());
- if (currentPhase.descriptor.hasPrintFlag()) print();
+ if (currentPhase == PHASE.ANALYZER.phase())
+ units = ((AnalyzerPhase)currentPhase).getUnits();
+ if (currentPhase.descriptor.hasPrintFlag()) print(units);
// if (currentPhase.descriptor.hasGraphFlag()) // !!!
// if (currentPhase.descriptor.hasCheckFlag()) // !!!
- if (currentPhase == PHASE.PARSER.phase()) fix1();
- if (currentPhase == PHASE.ANALYZER.phase()) fix2();
+ if (currentPhase == PHASE.PARSER.phase()) fix1(units);
+ if (currentPhase == PHASE.ANALYZER.phase()) fix2(units);
}
if (reporter.errors() != 0) {
imports.clear();
@@ -411,6 +410,7 @@ public abstract class Global {
symdata.clear();
compiledNow.clear();
treePrinter.end();
+ return units;
}
/** Compiles an additional source file. */
@@ -429,30 +429,31 @@ public abstract class Global {
}
}
- private void print() {
+ private void print(CompilationUnit[] units) {
if (currentPhase.id == PHASE.MAKEBOXINGEXPLICIT.id()) {
boolean html = args.printer.value.equals(PRINTER_HTML);
if (html) writer.println("<pre>");
ATreePrinter printer = new ATreePrinter(new CodePrinter(writer));
boolean next = currentPhase.next != null;
if (next) currentPhase = currentPhase.next;
- printer.printGlobal(this);
+ printer.printUnits(units);
if (next) currentPhase = currentPhase.prev;
if (html) writer.println("</pre>");
} else if (currentPhase.id == PHASE.ICODE.id()) {
+ Phase phase = currentPhase;
boolean html = args.printer.value.equals(PRINTER_HTML);
if (html) writer.println("<pre>");
- ATreePrinter printer = ((scalac.transformer.ICodePhase)currentPhase).getPrinter(new CodePrinter(writer)); // Oh !!
+
boolean next = currentPhase.next != null;
if (next) currentPhase = currentPhase.next;
- printer.printGlobal(this);
+ ((ICodePhase)phase).print(units, new CodePrinter(writer));
if (next) currentPhase = currentPhase.prev;
if (html) writer.println("</pre>");
} else {
// go to next phase to print symbols with their new type
boolean next = currentPhase.next != null;
if (next) currentPhase = currentPhase.next;
- treePrinter.print(this);
+ treePrinter.print(units);
if (next) currentPhase = currentPhase.prev;
}
}
@@ -498,7 +499,7 @@ public abstract class Global {
private List imports = new ArrayList();
public Symbol console;
- private void fix1() {
+ private void fix1(CompilationUnit[] units) {
for (int i = 0; i < units.length; i++) {
if (units[i].console) fix1(units[i]);
}
@@ -524,7 +525,7 @@ public abstract class Global {
module++;
}
- private void fix2() {
+ private void fix2(CompilationUnit[] units) {
for (int i = 0; i < units.length; i++) {
if (units[i].console) fix2(units[i]);
}
diff --git a/sources/scalac/ast/Tree.java.tmpl b/sources/scalac/ast/Tree.java.tmpl
index 0b130451fe..8a12c16577 100644
--- a/sources/scalac/ast/Tree.java.tmpl
+++ b/sources/scalac/ast/Tree.java.tmpl
@@ -14,6 +14,7 @@ import java.io.PrintWriter;
import scala.tools.util.Position;
import scalac.Global;
+import scalac.ast.printer.TreePrinter;
import scalac.checkers.CheckTreeNodes;
import scalac.symtab.Symbol;
import scalac.symtab.Type;
@@ -111,8 +112,10 @@ public class Tree {
/** Returns the string representation of this tree. */
public String toString() {
StringWriter buffer = new StringWriter();
- Global global = Global.instance;
- global.newTextTreePrinter(new PrintWriter(buffer)).print(this).flush();
+ TreePrinter printer =
+ Global.instance.newTextTreePrinter(new PrintWriter(buffer));
+ printer.print(this);
+ printer.flush();
return buffer.toString();
}
diff --git a/sources/scalac/ast/printer/TreePrinter.java b/sources/scalac/ast/printer/TreePrinter.java
index ce6ae2bd18..a0884b0b2a 100644
--- a/sources/scalac/ast/printer/TreePrinter.java
+++ b/sources/scalac/ast/printer/TreePrinter.java
@@ -23,10 +23,6 @@ public interface TreePrinter {
public void end();
public void flush();
- public void print(Global global);
- public void print(CompilationUnit unit);
-
- public TreePrinter print(Tree tree);
- public TreePrinter print(String str);
- public TreePrinter println();
+ public void print(CompilationUnit[] units);
+ public void print(Tree tree);
}
diff --git a/sources/scalac/atree/ATreePrinter.java b/sources/scalac/atree/ATreePrinter.java
index 44098d3332..022f78aed5 100644
--- a/sources/scalac/atree/ATreePrinter.java
+++ b/sources/scalac/atree/ATreePrinter.java
@@ -239,15 +239,10 @@ public class ATreePrinter {
//########################################################################
// Public Methods - Printing trees
- /** Prints all global units. */
- public ATreePrinter printGlobal(Global global) {
- Phase phase = global.currentPhase;
- println("[[attributed trees at "+phase+" (after "+phase.prev+")]]");
- return printUnits(global.units);
- }
-
/** Prints the units. */
public ATreePrinter printUnits(CompilationUnit[] units) {
+ Phase phase = global.currentPhase;
+ println("[[attributed trees at "+phase+" (after "+phase.prev+")]]");
for (int i = 0; i < units.length; i++) printUnit(units[i]);
return this;
}
diff --git a/sources/scalac/transformer/ICodePhase.java b/sources/scalac/transformer/ICodePhase.java
index beaa7f6aab..7ac77cb11f 100644
--- a/sources/scalac/transformer/ICodePhase.java
+++ b/sources/scalac/transformer/ICodePhase.java
@@ -8,15 +8,12 @@
package scalac.transformer;
+import ch.epfl.lamp.util.CodePrinter;
+
import scalac.Global;
import scalac.Phase;
import scalac.PhaseDescriptor;
import scalac.CompilationUnit;
-import scalac.symtab.Definitions;
-
-import ch.epfl.lamp.util.CodePrinter;
-import scalac.atree.ATreePrinter;
-
/**
* This class represents the ICode phase for the java version
@@ -25,12 +22,7 @@ import scalac.atree.ATreePrinter;
* scala one. See scala.tools.scalac.icode.ICodePhase for
* implementation
*/
-public class ICodePhase extends Phase {
-
- //########################################################################
- // Private Fields
-
- private final Definitions definitions;
+public abstract class ICodePhase extends Phase {
//########################################################################
// Public Constructors
@@ -38,21 +30,16 @@ public class ICodePhase extends Phase {
/** Initializes this instance. */
public ICodePhase(Global global, PhaseDescriptor descriptor) {
super(global, descriptor);
- this.definitions = global.definitions;
}
//########################################################################
// Public Methods
/** Applies this phase to the given compilation units. */
- public void apply(CompilationUnit[] units) {
- // This java version doesn't make anything
- }
+ public abstract void apply(CompilationUnit[] units);
- public ATreePrinter getPrinter(CodePrinter cp) {
- return new ATreePrinter(cp);
- // !! Useless
- }
+ /** Prints the given compilation units. */
+ public abstract void print(CompilationUnit[] units, CodePrinter printer);
+ //########################################################################
}
-
diff --git a/sources/scalac/typechecker/AnalyzerPhase.java b/sources/scalac/typechecker/AnalyzerPhase.java
index 7104adfd03..c4f56d22e8 100644
--- a/sources/scalac/typechecker/AnalyzerPhase.java
+++ b/sources/scalac/typechecker/AnalyzerPhase.java
@@ -31,4 +31,6 @@ public abstract class AnalyzerPhase extends Phase {
public abstract void lateEnter(CompilationUnit unit);
+ public abstract CompilationUnit[] getUnits();
+
}