summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2004-07-01 14:03:41 +0000
committerMartin Odersky <odersky@gmail.com>2004-07-01 14:03:41 +0000
commitcffaae565155f3ffa95865dc469c1a1d7cbe0498 (patch)
tree4db08d4a30af008e2deeb4ee2ea45f0d69aa7654
parentc8065927475a558d9ad4580dedcc1b91296f9da4 (diff)
downloadscala-cffaae565155f3ffa95865dc469c1a1d7cbe0498.tar.gz
scala-cffaae565155f3ffa95865dc469c1a1d7cbe0498.tar.bz2
scala-cffaae565155f3ffa95865dc469c1a1d7cbe0498.zip
*** empty log message ***
-rw-r--r--config/list/compiler.lst2
-rw-r--r--config/list/scalac.lst2
-rw-r--r--sources/scala/tools/scalac/MyCompilerPhases.scala4
-rw-r--r--sources/scala/tools/scalac/ast/parser/MarkupParser.scala2
-rw-r--r--sources/scala/tools/scalac/ast/parser/Parser.scala6
-rw-r--r--sources/scala/tools/scalac/ast/parser/ParserPhase.scala4
-rw-r--r--sources/scala/tools/scalac/ast/parser/PatternNormalizer.scala4
-rw-r--r--sources/scala/tools/scalac/ast/parser/Scanner.scala3
-rw-r--r--sources/scala/tools/scalac/ast/printer/HTMLPrinter.scala11
-rw-r--r--sources/scala/tools/scalac/ast/printer/TextTreePrinter.scala11
-rw-r--r--sources/scala/tools/scalac/backend/GenJVMFromICode.scala8
-rw-r--r--sources/scala/tools/scalac/backend/GenJVMFromICodePhase.scala4
-rw-r--r--sources/scala/tools/scalac/icode/IBasicBlock.scala7
-rw-r--r--sources/scala/tools/scalac/icode/ICInstruction.scala6
-rw-r--r--sources/scala/tools/scalac/icode/ICTypeStack.scala8
-rw-r--r--sources/scala/tools/scalac/icode/ICode.scala4
-rw-r--r--sources/scala/tools/scalac/icode/ICodePhase.scala12
-rw-r--r--sources/scala/tools/scalac/icode/ICodePrinter.scala10
-rw-r--r--sources/scala/tools/scalac/transformer/TransMatch.scala7
-rw-r--r--sources/scala/tools/scalac/transformer/TransMatchPhase.scala4
-rw-r--r--sources/scala/tools/scalac/transformer/matching/FullRegularTranslator.scala3
-rw-r--r--sources/scala/tools/scalac/transformer/matching/MutableGrammar.scala5
-rw-r--r--sources/scala/tools/scalac/typechecker/Analyzer.scala332
-rw-r--r--sources/scala/tools/scalac/typechecker/AnalyzerPhase.scala33
-rw-r--r--sources/scala/tools/scalac/typechecker/ConstantFolder.scala4
-rw-r--r--sources/scala/tools/scalac/typechecker/Context.scala52
-rw-r--r--sources/scala/tools/scalac/typechecker/DeSugarize.scala14
-rw-r--r--sources/scala/tools/scalac/typechecker/Infer.scala6
-rw-r--r--sources/scala/tools/scalac/typechecker/Substituter.scala4
-rwxr-xr-xsources/scala/tools/scalac/typechecker/View.scala4
-rw-r--r--sources/scala/tools/scalac/util/NewArray.scala6
-rw-r--r--sources/scala/tools/scalac/wholeprog/ApplicationBuilder.scala14
-rw-r--r--sources/scala/tools/scalac/wholeprog/Inline.scala6
-rw-r--r--sources/scala/tools/scalac/wholeprog/MonomorphicCS.scala22
-rw-r--r--sources/scala/tools/scalac/wholeprog/PrintDotFile.scala6
-rw-r--r--sources/scala/tools/scaladoc/Comment.java8
-rw-r--r--sources/scala/tools/scaladoc/HTMLGenerator.java4
-rwxr-xr-xsources/scala/tools/scaladoc/HTMLGeneratorPhase.scala4
-rwxr-xr-xsources/scala/tools/scaladoc/MLType.scala5
-rw-r--r--sources/scala/tools/scaladoc/ScalaSearch.java6
-rw-r--r--sources/scala/tools/scaladoc/StandardDocModule.java2
-rw-r--r--sources/scala/tools/scalai/Compiler.java4
-rw-r--r--sources/scala/xml/nobinding/NoBindingFactoryAdapter.scala2
-rw-r--r--sources/scala/xml/nobinding/XML.scala2
-rw-r--r--sources/scala/xml/path/Expression.scala2
-rw-r--r--sources/scalac/Global.java16
-rw-r--r--sources/scalac/Phase.java6
-rw-r--r--sources/scalac/Unit.java6
-rw-r--r--sources/scalac/ast/Transformer.java.tmpl10
-rw-r--r--sources/scalac/ast/Traverser.java.tmpl6
-rw-r--r--sources/scalac/ast/printer/TreePrinter.java4
-rw-r--r--sources/scalac/atree/ATreeFromSTree.java4
-rw-r--r--sources/scalac/atree/ATreePrinter.java6
-rw-r--r--sources/scalac/backend/jvm/GenJVM.java2
-rw-r--r--sources/scalac/backend/jvm/GenJVMPhase.java4
-rw-r--r--sources/scalac/backend/msil/GenMSIL.java6
-rw-r--r--sources/scalac/backend/msil/GenMSILPhase.java4
-rw-r--r--sources/scalac/backend/msil/TypeCreator.java10
-rw-r--r--sources/scalac/checkers/TreeChecker.java12
-rw-r--r--sources/scalac/symtab/Symbol.java36
-rw-r--r--sources/scalac/symtab/classfile/ClassfileParser.java29
-rw-r--r--sources/scalac/symtab/classfile/UnPickle.java1
-rw-r--r--sources/scalac/transformer/AddAccessorsPhase.java4
-rw-r--r--sources/scalac/transformer/AddConstructorsPhase.java4
-rw-r--r--sources/scalac/transformer/AddInterfacesPhase.java2
-rw-r--r--sources/scalac/transformer/Erasure.java6
-rw-r--r--sources/scalac/transformer/ErasurePhase.java4
-rw-r--r--sources/scalac/transformer/ExpandMixinsPhase.java6
-rw-r--r--sources/scalac/transformer/ExplicitOuterClassesPhase.java4
-rw-r--r--sources/scalac/transformer/ICodePhase.java4
-rw-r--r--sources/scalac/transformer/LambdaLift.java8
-rw-r--r--sources/scalac/transformer/LambdaLiftPhase.java2
-rw-r--r--sources/scalac/transformer/MakeBoxingExplicitPhase.java4
-rw-r--r--sources/scalac/transformer/OwnerTransformer.java2
-rw-r--r--sources/scalac/transformer/TailCallPhase.java4
-rw-r--r--sources/scalac/transformer/TypesAsValuesPhase.java4
-rw-r--r--sources/scalac/transformer/UnCurry.java4
-rw-r--r--sources/scalac/transformer/UnCurryPhase.java2
-rw-r--r--sources/scalac/transformer/matching/AlgebraicMatcher.java2
-rw-r--r--sources/scalac/transformer/matching/BerrySethi.java6
-rw-r--r--sources/scalac/transformer/matching/BindingBerrySethi.java4
-rw-r--r--sources/scalac/transformer/matching/CaseEnv.java2
-rw-r--r--sources/scalac/transformer/matching/CodeFactory.java2
-rw-r--r--sources/scalac/transformer/matching/PatternMatcher.java4
-rw-r--r--sources/scalac/transformer/matching/PatternNodeCreator.java2
-rw-r--r--sources/scalac/transformer/matching/PatternTool.java6
-rw-r--r--sources/scalac/transformer/matching/RightTracerInScala.java2
-rw-r--r--sources/scalac/transformer/matching/SequenceMatcher.java2
-rw-r--r--sources/scalac/typechecker/AnalyzerPhase.java4
-rw-r--r--sources/scalac/typechecker/RefCheck.java10
-rw-r--r--sources/scalac/typechecker/RefCheckPhase.java2
-rw-r--r--sources/scalac/util/EmptyPhase.java4
-rw-r--r--test/files/run/imports.scala8
93 files changed, 504 insertions, 451 deletions
diff --git a/config/list/compiler.lst b/config/list/compiler.lst
index d15366c919..5d2eaaac1c 100644
--- a/config/list/compiler.lst
+++ b/config/list/compiler.lst
@@ -9,7 +9,7 @@ CompilerPhases.java
Global.java
Phase.java
PhaseDescriptor.java
-Unit.java
+CompilationUnit.java
ast/DefaultTreeFactory.java
ast/LazyTreeCopier.java
diff --git a/config/list/scalac.lst b/config/list/scalac.lst
index acaa2db448..f40cbd0433 100644
--- a/config/list/scalac.lst
+++ b/config/list/scalac.lst
@@ -34,7 +34,7 @@ typechecker/AnalyzerPhase.scala
typechecker/ConstantFolder.scala
typechecker/Context.scala
typechecker/DeSugarize.scala
-typechecker/ImportList.scala
+# typechecker/ImportList.scala
typechecker/Infer.scala
typechecker/Substituter.scala
typechecker/View.scala
diff --git a/sources/scala/tools/scalac/MyCompilerPhases.scala b/sources/scala/tools/scalac/MyCompilerPhases.scala
index 43431a80ef..75c074aeba 100644
--- a/sources/scala/tools/scalac/MyCompilerPhases.scala
+++ b/sources/scala/tools/scalac/MyCompilerPhases.scala
@@ -17,7 +17,7 @@ import scala.tools.scalac.{CompilerPhases => old_CompilerPhases}
import scalac.{Global => scalac_Global}
import scalac.transformer.{ICodePhase => scalac_ICodePhase}
import scalac.PhaseDescriptor;
-import scalac.{Unit => scalac_Unit}
+import scalac.{CompilationUnit => scalac_CompilationUnit}
import scalac.atree._;
import scala.tools.scalac.wholeprog._;
//import scalac.ast._;
@@ -61,7 +61,7 @@ class WholeProgPhase(global: scalac_Global, descriptor: PhaseDescriptor)
// Public methods
/* Apply the global analysis phase to the given units */
- override def apply(units: Array[scalac_Unit]): unit = {
+ override def apply(units: Array[scalac_CompilationUnit]): unit = {
if (!global.args.XdotFile.value.equals("$")) {
val dotFilePrinter = new PrintDotFile(units);
diff --git a/sources/scala/tools/scalac/ast/parser/MarkupParser.scala b/sources/scala/tools/scalac/ast/parser/MarkupParser.scala
index b483b85aaa..fd2085e7d3 100644
--- a/sources/scala/tools/scalac/ast/parser/MarkupParser.scala
+++ b/sources/scala/tools/scalac/ast/parser/MarkupParser.scala
@@ -21,7 +21,7 @@ import scalac.util.Name;
package scala.tools.scalac.ast.parser {
-class MarkupParser( unit:Unit, s:Scanner, p:Parser, preserveWS:boolean ) {
+class MarkupParser( unit: CompilationUnit, s:Scanner, p:Parser, preserveWS:boolean ) {
import Tokens.{EMPTY, LBRACE, RBRACE} ;
import scala.tools.scalac.ast.{TreeList => myTreeList}
diff --git a/sources/scala/tools/scalac/ast/parser/Parser.scala b/sources/scala/tools/scalac/ast/parser/Parser.scala
index dac75db0d0..39d79db828 100644
--- a/sources/scala/tools/scalac/ast/parser/Parser.scala
+++ b/sources/scala/tools/scalac/ast/parser/Parser.scala
@@ -7,7 +7,7 @@
\* */
import scalac.symtab.Modifiers;
-import scalac.symtab.Type;
+import scalac.{symtab => scalac_symtab}
import scalac.ast._;
import scalac.atree.AConstant;
import scalac._;
@@ -22,12 +22,14 @@ import scala.collection.mutable.ListBuffer;
package scala.tools.scalac.ast.parser {
+import scalac_symtab.Type;
+
/** A recursive descent parser for the programming language Scala.
*
* @author Martin Odersky, Matthias Zenger, Burak Emir
* @version 1.3
*/
-class Parser(unit: Unit) {
+class Parser(unit: CompilationUnit) {
import Tokens._;
import scala.tools.scalac.ast.{TreeList => myTreeList}
diff --git a/sources/scala/tools/scalac/ast/parser/ParserPhase.scala b/sources/scala/tools/scalac/ast/parser/ParserPhase.scala
index 14dc2b6d56..9c8b53fb38 100644
--- a/sources/scala/tools/scalac/ast/parser/ParserPhase.scala
+++ b/sources/scala/tools/scalac/ast/parser/ParserPhase.scala
@@ -9,13 +9,13 @@
import scalac.{Global => scalac_Global}
import scalac.Phase;
import scalac.PhaseDescriptor;
-import scalac.Unit;
+import scalac.CompilationUnit;
package scala.tools.scalac.ast.parser {
class ParserPhase(global: scalac_Global, descriptor: PhaseDescriptor) extends Phase(global, descriptor) {
- def apply(units: Array[Unit]): unit = {
+ def apply(units: Array[CompilationUnit]): unit = {
for (val i <- Iterator.range(0, units.length)) {
global.start();
units(i).body = new Parser(units(i)).parse();
diff --git a/sources/scala/tools/scalac/ast/parser/PatternNormalizer.scala b/sources/scala/tools/scalac/ast/parser/PatternNormalizer.scala
index f4dbf8de26..17cee21251 100644
--- a/sources/scala/tools/scalac/ast/parser/PatternNormalizer.scala
+++ b/sources/scala/tools/scalac/ast/parser/PatternNormalizer.scala
@@ -18,7 +18,7 @@ import java.util.HashMap;
import scalac.util.Names;
/*
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.ast.*;
import scalac.util.Name;
import Tree.*;
@@ -34,7 +34,7 @@ package scala.tools.scalac.ast.parser {
* @version 1.0
*/
- class PatternNormalizer( unit:Unit ) {
+ class PatternNormalizer( unit:CompilationUnit ) {
val make = unit.global.make ;
diff --git a/sources/scala/tools/scalac/ast/parser/Scanner.scala b/sources/scala/tools/scalac/ast/parser/Scanner.scala
index b810ea1a0b..bbb0e148d9 100644
--- a/sources/scala/tools/scalac/ast/parser/Scanner.scala
+++ b/sources/scala/tools/scalac/ast/parser/Scanner.scala
@@ -16,13 +16,12 @@ package scala.tools.scalac.ast.parser {
import scala.tools.util.Position;
import scala.tools.util.SourceFile;
-
/** A scanner for the programming language Scala.
*
* @author Matthias Zenger, Martin Odersky, Burak Emir
* @version 1.1
*/
-class Scanner(_unit: Unit) extends TokenData {
+class Scanner(_unit: CompilationUnit) extends TokenData {
import Tokens._;
import java.lang.{Integer, Long, Float, Double}
diff --git a/sources/scala/tools/scalac/ast/printer/HTMLPrinter.scala b/sources/scala/tools/scalac/ast/printer/HTMLPrinter.scala
index 1d7e07c930..f313cf7801 100644
--- a/sources/scala/tools/scalac/ast/printer/HTMLPrinter.scala
+++ b/sources/scala/tools/scalac/ast/printer/HTMLPrinter.scala
@@ -7,12 +7,13 @@
// $Id$
-import scalac.Unit;
-import scalac.symtab.Symbol;
+import scalac.CompilationUnit;
+import scalac.{symtab => scalac_symtab}
import scalac.ast.Tree;
package scala.tools.scalac.ast.printer {
+import scalac_symtab.Symbol;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.lang.Math;
@@ -155,16 +156,16 @@ class HTMLTreePrinter(writer: PrintWriter) extends TextTreePrinter(writer) {
super.print(text);
}
- override def print(unit: Unit) = super.print(unit);
+ override def print(unit: CompilationUnit) = super.print(unit);
override def print(str: String) = super.print(str);
override def print(tree: Tree) = super.print(tree);
- override protected def printUnitHeader(unit: Unit): unit = {
+ override protected def printUnitHeader(unit: CompilationUnit): unit = {
beginSection1(outSectionLevel + 1, unit.source.toString());
startTag("pre");
}
- override protected def printUnitFooter(unit: Unit): unit = {
+ override protected def printUnitFooter(unit: CompilationUnit): unit = {
endTag("pre");
}
}
diff --git a/sources/scala/tools/scalac/ast/printer/TextTreePrinter.scala b/sources/scala/tools/scalac/ast/printer/TextTreePrinter.scala
index a17f54774c..a2d877cfb3 100644
--- a/sources/scala/tools/scalac/ast/printer/TextTreePrinter.scala
+++ b/sources/scala/tools/scalac/ast/printer/TextTreePrinter.scala
@@ -9,15 +9,16 @@
import scalac.ast.printer._;
import scalac.ast._;
-import scalac.symtab._;
+import scalac.{symtab => scalac_symtab}
import scalac.util.Debug;
import scalac.{Global => scalac_Global, Phase};
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.util.Name;
import scalac.util.TypeNames;
package scala.tools.scalac.ast.printer {
+import scalac_symtab._;
import java.io._;
/**
@@ -200,7 +201,7 @@ class TextTreePrinter(writer: PrintWriter) with TreePrinter {
print(global.units(i));
}
- def print(unit: Unit): unit = {
+ def print(unit: CompilationUnit): unit = {
printUnitHeader(unit);
if (unit.body != null) {
for (val i <- Iterator.range(0, unit.body.length)) {
@@ -214,10 +215,10 @@ class TextTreePrinter(writer: PrintWriter) with TreePrinter {
flush();
}
- protected def printUnitHeader(unit: Unit): unit =
+ protected def printUnitHeader(unit: CompilationUnit): unit =
print(Simple("// Scala source: " + unit.source + "\n"));
- protected def printUnitFooter(unit: Unit): unit =
+ protected def printUnitFooter(unit: CompilationUnit): unit =
print(Newline);
def print(tree: Tree): TreePrinter = {
diff --git a/sources/scala/tools/scalac/backend/GenJVMFromICode.scala b/sources/scala/tools/scalac/backend/GenJVMFromICode.scala
index 2b33996592..73acdb59ad 100644
--- a/sources/scala/tools/scalac/backend/GenJVMFromICode.scala
+++ b/sources/scala/tools/scalac/backend/GenJVMFromICode.scala
@@ -6,10 +6,10 @@
// $Id$
-import scalac.symtab._;
+import scalac.{symtab => scalac_symtab}
import scalac.{Global => scalac_Global};
import scalac.atree._;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.util.Debug;
import scala.tools.scalac.icode._;
import ch.epfl.lamp.fjbg._;
@@ -20,6 +20,8 @@ import java.io.File;
package scala.tools.scalac.backend {
+import scalac_symtab._;
+
/* This class implements the backend which create
* Java Virtual Machine's bytecode with
* The Intermediate Code of the compiler */
@@ -52,7 +54,7 @@ class GenJVMFromICode(global: scalac_Global) {
// Public methods
/* This method generates byte code for a single unit */
- def translate(unit: Unit) = {
+ def translate(unit: CompilationUnit) = {
global.log("Jvm.translate() called");
currentSrcFileName = unit.source.toString();
// 1. ##### Generate the structure
diff --git a/sources/scala/tools/scalac/backend/GenJVMFromICodePhase.scala b/sources/scala/tools/scalac/backend/GenJVMFromICodePhase.scala
index d43183e414..3b49723c49 100644
--- a/sources/scala/tools/scalac/backend/GenJVMFromICodePhase.scala
+++ b/sources/scala/tools/scalac/backend/GenJVMFromICodePhase.scala
@@ -7,7 +7,7 @@
// $Id$
import scalac.{Global => scalac_Global}
-import scalac.{Unit => scalac_Unit}
+import scalac.{CompilationUnit => scalac_CompilationUnit}
import scalac.PhaseDescriptor;
import scalac.Phase;
@@ -22,7 +22,7 @@ class GenJVMFromICodePhase(global: scalac_Global, descriptor: PhaseDescriptor) e
// Public method
/* Apply this phase to all units */
- def apply(units: Array[scalac_Unit]) = {
+ def apply(units: Array[scalac_CompilationUnit]) = {
val generator = new GenJVMFromICode(global); // !!! super global
Iterator.fromArray(units).foreach(generator.translate);
}
diff --git a/sources/scala/tools/scalac/icode/IBasicBlock.scala b/sources/scala/tools/scalac/icode/IBasicBlock.scala
index 27e1a897f1..034c2276d6 100644
--- a/sources/scala/tools/scalac/icode/IBasicBlock.scala
+++ b/sources/scala/tools/scalac/icode/IBasicBlock.scala
@@ -7,13 +7,14 @@
// $Id$
-import scalac.symtab.Symbol;
-import scalac.symtab.Type;
-
+import scalac.{symtab => scalac_symtab}
import scalac.atree._;
package scala.tools.scalac.icode {
+import scalac_symtab.Symbol;
+import scalac_symtab.Type;
+
/** This class represents a basic block */
class IBasicBlock (theLabel: int) {
diff --git a/sources/scala/tools/scalac/icode/ICInstruction.scala b/sources/scala/tools/scalac/icode/ICInstruction.scala
index 673c4034b1..d6521b84b9 100644
--- a/sources/scala/tools/scalac/icode/ICInstruction.scala
+++ b/sources/scala/tools/scalac/icode/ICInstruction.scala
@@ -8,13 +8,15 @@
// $Id$
-import scalac.symtab.Symbol;
-import scalac.symtab.Type;
+import scalac.{symtab => scalac_symtab}
import scalac.atree._;
package scala.tools.scalac.icode {
+import scalac_symtab.Symbol;
+import scalac_symtab.Type;
+
/** This class represents an instruction of intermediate code */
abstract class ICInstruction {
diff --git a/sources/scala/tools/scalac/icode/ICTypeStack.scala b/sources/scala/tools/scalac/icode/ICTypeStack.scala
index cda14e19cb..8e3e9d5be8 100644
--- a/sources/scala/tools/scalac/icode/ICTypeStack.scala
+++ b/sources/scala/tools/scalac/icode/ICTypeStack.scala
@@ -7,11 +7,13 @@
// $Id$
import scalac.atree._;
-import scalac.symtab._;
-import scalac.Global;
+import scalac.{symtab => scalac_symtab}
+import scalac.{Global => scalac_Global};
package scala.tools.scalac.icode {
+import scalac_symtab._;
+
/* This class simulates the type of the opperand
* stack of the ICode. */
class ICTypeStack() {
@@ -20,7 +22,7 @@ class ICTypeStack() {
// Private fields
private var stack : List[Type] = Nil;
- private val global = Global.instance;
+ private val global = scalac_Global.instance;
private val definitions = global.definitions;
diff --git a/sources/scala/tools/scalac/icode/ICode.scala b/sources/scala/tools/scalac/icode/ICode.scala
index 8779b884e4..566cf12c24 100644
--- a/sources/scala/tools/scalac/icode/ICode.scala
+++ b/sources/scala/tools/scalac/icode/ICode.scala
@@ -11,12 +11,14 @@ import scalac.{Global => scalac_Global}
import scala.collection.mutable.HashMap;
import scala.collection.mutable.HashSet;
-import scalac.symtab._;
+import scalac.{symtab => scalac_symtab}
import scalac.atree._;
import scalac.util.Debug;
package scala.tools.scalac.icode {
+import scalac_symtab._;
+
/** This class represents the intermediate code of a method*/
class ICode(label: String, global: scalac_Global) {
diff --git a/sources/scala/tools/scalac/icode/ICodePhase.scala b/sources/scala/tools/scalac/icode/ICodePhase.scala
index f8e5ecdd72..513c7ed65c 100644
--- a/sources/scala/tools/scalac/icode/ICodePhase.scala
+++ b/sources/scala/tools/scalac/icode/ICodePhase.scala
@@ -6,12 +6,11 @@
// $Id$
+import scalac.{symtab => scalac_symtab}
import scalac.transformer.{ICodePhase => scalac_ICodePhase}
import scalac.{Global => scalac_Global}
-import scalac.{Unit => scalac_Unit}
+import scalac.{CompilationUnit => scalac_CompilationUnit}
import scalac.PhaseDescriptor;
-import scalac.symtab.Symbol;
-import scalac.symtab.Type;
import scalac.Phase;
import scalac.atree._;
@@ -19,6 +18,9 @@ import ch.epfl.lamp.util.CodePrinter;
package scala.tools.scalac.icode {
+import scalac_symtab.Symbol;
+import scalac_symtab.Type;
+
/** This class represents the ICode phase. This phase use the ATrees
* that represents the code with some primitives backends-like
* and convert them in a inline form: The ICode (for intermediate
@@ -30,7 +32,7 @@ class ICodePhase(global: scalac_Global, descriptor: PhaseDescriptor) extends sca
// Public methods
/* Apply the icode phase to the given units */
- override def apply(units: Array[scalac_Unit]) = {
+ override def apply(units: Array[scalac_CompilationUnit]) = {
val units_it = Iterator.fromArray(units);
units_it.foreach(translate);
@@ -44,7 +46,7 @@ class ICodePhase(global: scalac_Global, descriptor: PhaseDescriptor) extends sca
/** This method translates a single unit, it traverses all methods and
* generates ICode for each of them */
- private def translate(u: scalac_Unit) : unit = {
+ private def translate(u: scalac_CompilationUnit) : unit = {
def genClass(c: AClass) : unit = {
val nestedClasses_it = Iterator.fromArray(c.classes());
nestedClasses_it.foreach(genClass);
diff --git a/sources/scala/tools/scalac/icode/ICodePrinter.scala b/sources/scala/tools/scalac/icode/ICodePrinter.scala
index 2f6f9f5e12..7af0d6fa5e 100644
--- a/sources/scala/tools/scalac/icode/ICodePrinter.scala
+++ b/sources/scala/tools/scalac/icode/ICodePrinter.scala
@@ -9,14 +9,16 @@
import ch.epfl.lamp.util.CodePrinter;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.{Global => scalac_Global}
import scalac.atree._;
-import scalac.symtab.{Symbol => scalac_Symbol}
+import scalac.{symtab => scalac_symtab}
package scala.tools.scalac.icode {
+import scalac_symtab.Symbol;
+
/* This class implements a Printer for the ICode */
class ICodePrinter (printer: CodePrinter) extends ATreePrinter (printer: CodePrinter) {
@@ -35,7 +37,7 @@ class ICodePrinter (printer: CodePrinter) extends ATreePrinter (printer: CodePri
}
/* This method print a single unit. */
- def printAnUnit(unit: Unit) = { // ??? Private
+ def printAnUnit(unit: CompilationUnit) = { // ??? Private
printer.println ("// Scala source: "+unit.source);
val classes_it = Iterator.fromArray(unit.repository.classes());
classes_it.foreach((c: AClass) => {
@@ -50,7 +52,7 @@ class ICodePrinter (printer: CodePrinter) extends ATreePrinter (printer: CodePri
printer.println("Initial stack -> "+bb.initialStack);
printer.println("Substituable variables : ");
if (bb.substituteVars != null)
- bb.substituteVars.foreach((s: scalac_Symbol) => printer.print(s.name.toString()));
+ bb.substituteVars.foreach((s: Symbol) => printer.print(s.name.toString()));
else
printer.println(" {Empty} ");
printer.println("Instructions:");
diff --git a/sources/scala/tools/scalac/transformer/TransMatch.scala b/sources/scala/tools/scalac/transformer/TransMatch.scala
index 9b90de9642..04e96e359a 100644
--- a/sources/scala/tools/scalac/transformer/TransMatch.scala
+++ b/sources/scala/tools/scalac/transformer/TransMatch.scala
@@ -11,7 +11,7 @@ import java.util._;
import scalac.{Global => scalac_Global};
import scalac._;
import scalac.ast._;
-import scalac.symtab._;
+import scalac.{symtab => scalac_symtab}
import scalac.util._; // Names
import scalac.transformer.{ OwnerTransformer => scalac_transformer_OwnerTransformer };
@@ -28,15 +28,16 @@ import scalac.transformer.matching.AlgebraicMatcher ;
*/
package scala.tools.scalac.transformer {
+import scalac_symtab._;
import matching.FullRegularTranslator ;
import matching.GrammarPrinter ; //DEBUG
class TransMatch( global:scalac_Global )
extends scalac_transformer_OwnerTransformer( global ) {
- var cunit:Unit = null;
+ var cunit:CompilationUnit = null;
- override def apply( cunit:Unit ):unit = {
+ override def apply( cunit:CompilationUnit ):unit = {
this.cunit = cunit;
super.apply( cunit );
}
diff --git a/sources/scala/tools/scalac/transformer/TransMatchPhase.scala b/sources/scala/tools/scalac/transformer/TransMatchPhase.scala
index 092221313c..39f34c68af 100644
--- a/sources/scala/tools/scalac/transformer/TransMatchPhase.scala
+++ b/sources/scala/tools/scalac/transformer/TransMatchPhase.scala
@@ -9,7 +9,7 @@
import scalac.{Global => scalac_Global}
import scalac.Phase;
import scalac.PhaseDescriptor;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.checkers._;
package scala.tools.scalac.transformer {
@@ -18,7 +18,7 @@ class TransMatchPhase(global:scalac_Global, descriptor:PhaseDescriptor )
extends Phase(global, descriptor) {
/** Applies this phase to the given compilation units. */
- def apply( units:Array[Unit] ):unit = {
+ def apply( units:Array[CompilationUnit] ):unit = {
for(val u <- units) {
new TransMatch( global ).apply( u );
}
diff --git a/sources/scala/tools/scalac/transformer/matching/FullRegularTranslator.scala b/sources/scala/tools/scalac/transformer/matching/FullRegularTranslator.scala
index 8da5bec966..fce0920e2e 100644
--- a/sources/scala/tools/scalac/transformer/matching/FullRegularTranslator.scala
+++ b/sources/scala/tools/scalac/transformer/matching/FullRegularTranslator.scala
@@ -8,13 +8,14 @@ import scala.collection.immutable;
import scalac.ast._ ;
import scalac.{Global => scalac_Global}
-import scalac.symtab.Symbol ;
+import scalac.{symtab => scalac_symtab}
import scalac.util.Names ;
package scala.tools.scalac.transformer.matching {
+ import scalac_symtab.Symbol ;
import PatternInfo.minimalWidth;
import TreeInfo.isSequenceValued;
diff --git a/sources/scala/tools/scalac/transformer/matching/MutableGrammar.scala b/sources/scala/tools/scalac/transformer/matching/MutableGrammar.scala
index fa6ae97b68..816d2b7c93 100644
--- a/sources/scala/tools/scalac/transformer/matching/MutableGrammar.scala
+++ b/sources/scala/tools/scalac/transformer/matching/MutableGrammar.scala
@@ -2,11 +2,12 @@
import scala.collection.immutable;
import scala.collection.mutable;
import scala.runtime.matching._;
-
-import scalac.symtab.Symbol;
+import scalac.{symtab => scalac_symtab}
package scala.tools.scalac.transformer.matching {
+import scalac_symtab.Symbol;
+
object InitialGrammar {
/** returns an initial grammar, with any tree rule and any hedge rule */
def make:MutableGrammar = {
diff --git a/sources/scala/tools/scalac/typechecker/Analyzer.scala b/sources/scala/tools/scalac/typechecker/Analyzer.scala
index 9ee89519d1..a999f184fa 100644
--- a/sources/scala/tools/scalac/typechecker/Analyzer.scala
+++ b/sources/scala/tools/scalac/typechecker/Analyzer.scala
@@ -15,27 +15,28 @@
import ch.epfl.lamp.util.Pair;
import scala.tools.util.Position;
-import scalac._;
+import scalac.{symtab => scalac_symtab, _};
import scalac.util._;
import scalac.ast._;
import scalac.ast.printer._;
import scalac.atree.AConstant;
import scalac.atree.AConstant$CHAR;
import scalac.atree.AConstant$INT;
-import scalac.symtab._;
import scalac.symtab.classfile._;
import Tree._;
import java.util.HashMap;
-import java.lang.{Boolean, Byte, Short, Character, Integer, Object}
import scala.tools.scalac.util.NewArray;
import scalac.{Global => scalac_Global}
package scala.tools.scalac.typechecker {
+import java.lang.{Boolean, Byte, Short, Character, Integer, Object}
+
/** The main attribution phase.
*/
class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(global) {
+ import scalac_symtab._;
import Modifiers._;
import Kinds._;
@@ -54,9 +55,9 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
val desugarize = new DeSugarize(make, copy, gen, infer, global);
val constfold = new ConstantFolder(global);
- var unit: Unit = _;
+ var unit: CompilationUnit = _;
- override def apply(units: Array[Unit]): unit = {
+ override def apply(units: Array[CompilationUnit]): unit = {
var i = 0; while (i < units.length) {
enterUnit(units(i));
i = i + 1
@@ -65,10 +66,10 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
var n = descr.newSources.size();
while (n > 0) { // this calls apply(u) for every unit `u'.
val l = global.units.length;
- val newUnits = new Array[Unit](l + n);
+ val newUnits = new Array[CompilationUnit](l + n);
System.arraycopy(global.units, 0, newUnits, 0, l);
var i = 0; while (i < n) {
- newUnits(i + l) = descr.newSources.get(i).asInstanceOf[Unit];
+ newUnits(i + l) = descr.newSources.get(i).asInstanceOf[CompilationUnit];
i = i + 1
}
global.units = newUnits;
@@ -81,28 +82,26 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
}
}
- def enterUnit(unit: Unit): unit =
+ def enterUnit(unit: CompilationUnit): unit =
enter(
new Context(
Tree.Empty,
if (unit.console) descr.consoleContext else descr.startContext),
unit);
- def enter(context: Context, unit: Unit): unit = {
+ def enter(context: Context, unit: CompilationUnit): unit = {
assert(this.unit == null, "start unit non null for " + unit);
context.infer = infer;
this.unit = unit;
this.context = context;
this.patternVars = new HashMap();
- val prevImports = context.imports;
descr.contexts.put(unit, context);
enterSyms(unit.body);
- context.imports = prevImports;
this.unit = null;
this.context = null;
}
- def lateEnter(unit: Unit): unit = {
+ def lateEnter(unit: CompilationUnit): unit = {
enterUnit(unit);
descr.newSources.add(unit);
}
@@ -121,7 +120,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
}
}
- override def apply(unit: Unit): unit = {
+ override def apply(unit: CompilationUnit): unit = {
global.log("checking " + unit);
assert(this.unit == null, "start unit non null for " + unit);
this.unit = unit;
@@ -331,7 +330,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
// we are not within same statement sequence
var c: Context = context;
while (c != Context.NONE && c.owner != bsym)
- c = c.outer;
+ c = c.outer.enclClass;
if (c == Context.NONE) {
error(constrs(i).pos, "illegal inheritance from sealed class");
}
@@ -622,15 +621,12 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
// Contexts -------------------------------------------------------------------
/** Push new context associated with given tree, owner, and scope on stack.
- * Fields `imports' and, possibly, `enclClass' are inherited from parent.
- */
- def pushContext(tree: Tree, owner: Symbol, scope: Scope): unit =
+ */
+ def pushContext(tree: Tree, owner: Symbol, scope: Scope): Context = {
+ val prevContext = context;
context = new Context(tree, owner, scope, context);
-
- /** Pop context from stack.
- */
- def popContext(): unit =
- context = context.outer;
+ prevContext
+ }
// Lazy Types ------------------------------------------------------------------
@@ -639,7 +635,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
*/
class LazyTreeType(_tree: Tree) extends Type$LazyType {
val tree: Tree = _tree;
- val u: Unit = unit;
+ val u: CompilationUnit = unit;
val c: Context = context;
override def complete(sym: Symbol): unit = {
@@ -864,17 +860,16 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
enterInScope(sym);
}
tree.setSymbol(sym);
-
sym
}
- /** Make `sym' the symbol of import `tree' and create an entry in
- * current imports list.
- */
+ /** Make `sym' the symbol of import `tree' and push an
+ * import context.
+ */
def enterImport(tree: Tree, sym: Symbol): Symbol = {
sym.setInfo(new LazyTreeType(tree));
tree.setSymbol(sym);
- context.imports = new ImportList(tree, context.scope, context.imports);
+ pushContext(tree, context.owner, context.scope);
sym
}
@@ -884,17 +879,16 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
var packaged = _packaged;
templ match {
case Tree$Template(_, body) =>
- pushContext(tree, context.owner, context.scope);
- context.imports = null;
+ val prevContext = pushContext(tree, context.owner, context.scope);
packaged = transformPackageId(packaged);
tree.asInstanceOf[Tree$PackageDef].packaged = packaged;
- popContext();
+ context = prevContext;
val pkg: Symbol = checkStable(packaged).symbol();
if (pkg != null && !pkg.isError()) {
if (pkg.isPackage()) {
- pushContext(templ, pkg.moduleClass(), pkg.members());
+ val prevContext = pushContext(templ, pkg.moduleClass(), pkg.members());
enterSyms(body);
- popContext();
+ context = prevContext;
} else {
error(tree.pos, "only Java packages allowed for now");
}
@@ -948,17 +942,18 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
case Tree$DefDef(mods, name, _, _, _, _) =>
var sym: Symbol = null;
if (name == Names.CONSTRUCTOR) {
- val clazz: Symbol = context.enclClass.owner;
- if (!(context.tree.isInstanceOf[Tree$Template]) ||
- clazz.isModuleClass() ||
- clazz.isAnonymousClass() ||
- clazz.isCompoundSym() ||
- clazz.isPackageClass()) {
- error(tree.pos, "constructor definition not allowed here");
- }
- sym = clazz.newConstructor(tree.pos, clazz.flags & CONSTRFLAGS);
- clazz.addConstructor(sym);
- sym.flags = sym.flags | mods;
+ var c = context;
+ while (c.tree.isInstanceOf[Tree$Import]) c = c.outer;
+ val clazz: Symbol = c.enclClass.owner;
+ if (!(c.tree.isInstanceOf[Tree$Template]) ||
+ clazz.isModuleClass() ||
+ clazz.isAnonymousClass() ||
+ clazz.isCompoundSym() ||
+ clazz.isPackageClass())
+ error(tree.pos, "constructor definition not allowed here");
+ sym = clazz.newConstructor(tree.pos, clazz.flags & CONSTRFLAGS);
+ clazz.addConstructor(sym);
+ sym.flags = sym.flags | mods;
} else {
sym = termSymbol(tree.pos, name, owner, mods, context.scope);
}
@@ -1062,28 +1057,19 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
}
}
-/*
- def addOverloaded(tp: Type, sym: Symbol): Type = {
- if (!sym.isPrivate()) {
- val owner = sym.owner();
- if (owner.kind == CLASS) {
- for (p <- sym.owner().info.parents()) {
- val sym1 = p.lookupNonPrivate(sym.name);
- if (sym1.kind != NONE) {
-
- }
- }
- }
- }
- }
-*/
+ def addInheritedOverloaded(sym: Symbol, tp: Type): unit =
+ if (sym.owner().kind == CLASS &&
+ !sym.isConstructor() &&
+ sym.owner().lookup(sym.name) == sym)
+ // it's a class member which is not an overloaded alternative
+ sym.addInheritedOverloaded(tp);
// Definining Symbols -------------------------------------------------------
/** Define symbol associated with `tree' using given `unit' and `context'.
*/
- def defineSym(tree: Tree, unit: Unit, curcontext: Context): unit = {
- val savedUnit: Unit = this.unit;
+ def defineSym(tree: Tree, unit: CompilationUnit, curcontext: Context): unit = {
+ val savedUnit: CompilationUnit = this.unit;
this.unit = unit;
val savedContext: Context = this.context;
this.context = curcontext;
@@ -1098,7 +1084,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
var owntype: Type = null;
tree match {
case Tree$ClassDef(mods, name, tparams, vparams, tpe, templ) =>
- pushContext(
+ val prevContext = pushContext(
tree, sym.primaryConstructor(), new Scope(context.scope));
val tparamSyms = enterParams(tparams);
var vparamSyms = enterParams(vparams);
@@ -1129,15 +1115,15 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
defineTemplate(templ, sym, new Scope());
owntype = templ.getType();
- popContext();
+ context = prevContext;
case Tree$ModuleDef(mods, name, _tpe, templ) =>
var tpe = _tpe;
val clazz: Symbol = sym.moduleClass();
- pushContext(
+ val prevContext = pushContext(
tree, clazz.primaryConstructor(), context.scope);
defineTemplate(templ, clazz, new Scope());
- popContext();
+ context = prevContext;
clazz.setInfo(templ.getType());
tpe = transform(tpe, TYPEmode);
(tree.asInstanceOf[Tree$ModuleDef]).tpe = tpe;
@@ -1149,7 +1135,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
var tpe = _tpe;
var rhs = _rhs;
var restype: Type = null;
- pushContext(tree, sym, new Scope(context.scope));
+ val prevContext = pushContext(tree, sym, new Scope(context.scope));
val tparamSyms = enterParams(tparams);
val vparamSyms = enterParams(vparams);
if (tpe != Tree.Empty) {
@@ -1173,11 +1159,11 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
error(tree.pos, "result type of view may not be a type variable");
restype = definitions.ANY_TYPE();
}
- popContext();
+ context = prevContext;
owntype = makeMethodType(tparamSyms, vparamSyms, restype);
//System.out.println("methtype " + name + ":" + owntype);//DEBUG
- sym.addInheritedOverloaded(owntype);
+ addInheritedOverloaded(sym, owntype);
case Tree$ValDef(mods, name, _tpe, _rhs) =>
var tpe = _tpe;
@@ -1187,7 +1173,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
(tree.asInstanceOf[Tree$ValDef]).tpe = tpe;
owntype = tpe.getType();
} else {
- pushContext(tree, sym, context.scope);
+ val prevContext = pushContext(tree, sym, context.scope);
if (rhs == Tree.Empty) {
if ((sym.owner().flags & ACCESSOR) != 0) {
// this is the parameter of a variable setter method.
@@ -1208,20 +1194,20 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
if (sym.isVariable() || !sym.isFinal())
owntype = owntype.deconst();
}
- popContext();
- sym.addInheritedOverloaded(owntype);
+ context = prevContext;
+ addInheritedOverloaded(sym, owntype);
}
case Tree$AliasTypeDef(mods, name, tparams, _rhs) =>
var rhs = _rhs;
- pushContext(tree, sym.primaryConstructor(), new Scope(context.scope));
+ val prevContext = pushContext(tree, sym.primaryConstructor(), new Scope(context.scope));
val tparamSyms = enterParams(tparams);
rhs = transform(rhs, TYPEmode);
(tree.asInstanceOf[Tree$AliasTypeDef]).rhs = rhs;
owntype = rhs.getType();
sym.primaryConstructor().setInfo(
new Type$PolyType(tparamSyms, owntype));
- popContext();
+ context = prevContext;
case Tree$AbsTypeDef(mods, name, _rhs, _lobound) =>
var rhs = _rhs;
@@ -1292,10 +1278,10 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
val parents = Tree.typeOf(templ.parents);
// enter all members
- pushContext(templ, clazz, members);
+ val prevContext = pushContext(templ, clazz, members);
templ.body = desugarize.Statements(unit, templ.body, false);
enterSyms(templ.body);
- popContext();
+ context = prevContext;
templ.setType(Type.compoundType(parents, members, clazz));
}
@@ -1317,8 +1303,8 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
/** Define self type of class or module `sym'
* associated with `tree' using given `unit' and `context'.
*/
- def defineSelfType(sym: Symbol, clazz: Symbol, tree: Tree, unit: Unit, curcontext: Context): unit = {
- val savedUnit: Unit = this.unit;
+ def defineSelfType(sym: Symbol, clazz: Symbol, tree: Tree, unit: CompilationUnit, curcontext: Context): unit = {
+ val savedUnit: CompilationUnit = this.unit;
this.unit = unit;
val savedContext: Context = this.context;
this.context = curcontext;
@@ -1406,7 +1392,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
var i: Context = context;
while (i != Context.NONE &&
!(i.owner.kind == CLASS && i.owner.name == name))
- i = i.outer;
+ i = i.outer.enclClass;
if (i != Context.NONE)
i.owner
else {
@@ -1630,63 +1616,26 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
var sym: Symbol = Symbol.NONE;
var pre: Type = null;
var qual: Tree = Tree.Empty;
- var stopPos: int = Integer.MIN_VALUE;
var nextcontext: Context = context;
while (sym.kind == NONE && nextcontext != Context.NONE) {
sym = nextcontext.scope.lookup(name);
- if (sym.kind != NONE) {
- stopPos = sym.pos;
- } else {
+ if (sym.kind == NONE) {
nextcontext = nextcontext.enclClass;
if (nextcontext != Context.NONE) {
sym = nextcontext.owner.thisSym().info().lookup(name);
- if (sym.kind != NONE) {
- stopPos = nextcontext.owner.pos;
- } else {
- nextcontext = nextcontext.outer;
- }
+ if (sym.kind == NONE) nextcontext = nextcontext.outer;
}
}
}
- // find applicable import and assign to `sym1'
- var nextimports: ImportList = context.imports;
- var lastimports: ImportList = null;
+ var impcontext: Context = context.prevImport;
+ var lastimpcontext: Context = null;
var sym1: Symbol = Symbol.NONE;
-
-// System.out.println("name = " + name + ", pos = " + tree.pos + ", importlist = ");//DEBUG
-// for (val imp: ImportList = nextimports; imp != null; imp = imp.prev) {
-// new TextTreePrinter().print(" ").print(imp.tree).println().end();//DEBUG
-// }
-
- while (nextimports != null && nextimports.tree.pos >= tree.pos) {
- nextimports = nextimports.prev;
- }
-
- if (stopPos > tree.pos) {
- // set stopPos to beginning of block enclosed in the scope which defines the
- // referenced symbol.
- var lastc = Context.NONE;
- var c = nextcontext;
- while (c.outer.scope != null && c.outer.scope.lookup(name) == sym) {
- c.tree match {
- case Tree$Block(_, _) | Tree$CaseDef(_, _, _) | Tree$ClassDef(_, _, _, _, _, _) | Tree$ModuleDef(_, _, _, _) =>
- lastc = c;
- case _ =>
- }
- c = c.outer
- }
- if (lastc != Context.NONE) {
- //System.out.println("revising stop to [" + lastc.tree + "]; symbol = " + sym + ", context = " + nextcontext);//DEBUG
- stopPos = lastc.tree.pos;
- }
- }
-
- while (sym1.kind == NONE &&
- nextimports != null && nextimports.tree.pos > stopPos) {
- sym1 = nextimports.importedSymbol(name);
- lastimports = nextimports;
- nextimports = nextimports.prev;
+ while (sym1.kind == NONE && impcontext.depth > nextcontext.depth) {
+ //System.out.println("imp " + name + " from " + impcontext.tree);
+ sym1 = impcontext.importedSymbol(name);
+ lastimpcontext = impcontext;
+ impcontext = impcontext.outer.prevImport;
}
// evaluate what was found
@@ -1711,24 +1660,24 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
error(tree.pos,
"reference to " + name + " is ambiguous;\n" +
"it is both defined in " + sym.owner() +
- " and imported subsequently by \n" + lastimports.tree);
+ " and imported subsequently by \n" + lastimpcontext.tree);
return errorTree(tree);
} else {
// check that there are no other applicable imports in same scope.
- while (nextimports != null && nextimports.enclScope == lastimports.enclScope) {
- if (!nextimports.sameImport(lastimports) && nextimports.importedSymbol(name).kind != NONE) {
+ while (impcontext != Context.NONE && impcontext.scope == lastimpcontext.scope) {
+ if (!impcontext.sameImport(lastimpcontext) && impcontext.importedSymbol(name).kind != NONE) {
error(tree.pos,
"reference to " + name + " is ambiguous;\n" +
"it is imported twice in the same scope by\n " +
- lastimports.tree + "\nand " + nextimports.tree);
+ lastimpcontext.tree + "\nand " + impcontext.tree);
return errorTree(tree);
}
- nextimports = nextimports.prev;
+ impcontext = impcontext.outer.prevImport;
}
sym = sym1;
- qual = lastimports.importPrefix().duplicate();
+ qual = lastimpcontext.importPrefix().duplicate();
pre = qual.getType();
- //new TextTreePrinter().print(name + " => ").print(lastimports.tree).print("." + name).println().end();//DEBUG
+ //new TextTreePrinter().print(name + " => ").print(lastimpcontext.tree).print("." + name).println().end();//DEBUG
tree = make.Select(tree.pos, qual, name);
}
@@ -1789,12 +1738,20 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
symtype = infer.checkAccessible(tree.pos, sym, symtype, qual, qualtype);
//System.out.println(sym.name + ":" + symtype);//DEBUG
if (uninst.length != 0) {
- symtype match {
- case Type$PolyType(tparams, restype) =>
- symtype = new Type$PolyType(tparams, new Type$PolyType(uninst, restype));
- case _ =>
- symtype = new Type$PolyType(uninst, symtype);
+ def polymorphize(tp: Type): Type = tp match {
+ case Type$PolyType(tparams, restype) =>
+ new Type$PolyType(tparams, polymorphize(restype))
+ case Type$OverloadedType(alts, alttypes) =>
+ val alttypes1 = new Array[Type](alttypes.length);
+ var i = 0; while (i < alttypes.length) {
+ alttypes1(i) = polymorphize(alttypes(i));
+ i = i + 1
+ }
+ new Type$OverloadedType(alts, alttypes1)
+ case _ =>
+ new Type$PolyType(uninst, tp);
}
+ symtype = polymorphize(symtype);
}
//System.out.println(qual.getType() + ".member: " + sym + ":" + symtype);//DEBUG
val tree1: Tree = tree match {
@@ -1831,14 +1788,14 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
def transformCase(tree: Tree$CaseDef, pattpe: Type, pt: Type): Tree$CaseDef =
tree match {
case Tree$CaseDef(pat, guard, body) =>
- pushContext(tree, context.owner, new Scope(context.scope));
+ val prevContext = pushContext(tree, context.owner, new Scope(context.scope));
this.inAlternative = false; // no vars allowed below Alternative
val pat1: Tree = transform(pat, PATTERNmode, pattpe);
val guard1: Tree =
if (guard == Tree.Empty) Tree.Empty
else transform(guard, EXPRmode, definitions.boolean_TYPE());
val body1: Tree = transform(body, EXPRmode, pt);
- popContext();
+ context = prevContext;
return copy.CaseDef(tree, pat1, guard1, body1)
.setType(body1.getType()).asInstanceOf[Tree$CaseDef];
}
@@ -1853,9 +1810,9 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
val mode: int = if (TreeInfo.isDefinition(stat)) NOmode else EXPRmode;
var stat1: Tree = null;
if (exprOwner.kind != NONE && !TreeInfo.isDefinition(stat)) {
- pushContext(stat, exprOwner, context.scope);
+ val prevContext = pushContext(stat, exprOwner, context.scope);
stat1 = transform(stat, mode);
- popContext();
+ context = prevContext;
} else {
stat1 = transform(stat, mode);
}
@@ -1916,7 +1873,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
validateParentClasses(
parents, owner.info().parents(), owner.typeOfThis());
}
- pushContext(templ, owner, owner.members());
+ val prevContext = pushContext(templ, owner, owner.members());
/*
val params: Scope = new Scope();
def computeParams(t: Type): unit = t match {
@@ -1934,14 +1891,14 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
case _ =>
}
computeParams(owner.primaryConstructor().getType());
- pushContext(templ, owner.primaryConstructor(), params);
+ val prevContext = pushContext(templ, owner.primaryConstructor(), params);
*/
templ.setSymbol(owner.newLocalDummy());
val body1 = transformStatSeq(templ.body, templ.symbol());
/*
- popContext();
+ context = prevContext;
*/
- popContext();
+ context = prevContext;
val templ1: Tree$Template = copy.Template(templ, parents, body1);
templ1.setType(owner.getType());
// initialize all members; necessary to initialize overloaded symbols
@@ -2176,9 +2133,9 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
case Tree$PackageDef(pkg, templ @ Tree$Template(parents, body)) =>
val pkgSym: Symbol = pkg.symbol();
if (pkgSym != null && pkgSym.isPackage()) {
- pushContext(templ, pkgSym.moduleClass(), pkgSym.members());
+ val prevContext = pushContext(templ, pkgSym.moduleClass(), pkgSym.members());
val body1: Array[Tree] = transform(body);
- popContext();
+ context = prevContext;
val templ1: Tree$Template = copy.Template(templ, parents, body1);
templ1.setType(Type.NoType).setSymbol(Symbol.NONE);
copy.PackageDef(tree, pkg, templ1)
@@ -2191,7 +2148,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
setError(tree)
case Tree$ClassDef(_, _, tparams, vparams, tpe, templ) =>
- pushContext(
+ val prevContext = pushContext(
tree, sym.primaryConstructor(), new Scope(context.scope));
reenterParams(tparams, vparams, sym.primaryConstructor().getType());
val tparams1 = transform(tparams);
@@ -2205,17 +2162,17 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
val templ1: Tree$Template = transformTemplate(templ, sym);
if (sym.isTrait()) checkTraitDef(tree.pos, sym, templ1);
checkNoEscape(tree.pos, sym.info());
- popContext();
+ context = prevContext;
copy.ClassDef(tree, sym, tparams1, vparams1, tpe1, templ1)
.setType(Type.NoType);
case Tree$ModuleDef(_, _, tpe, templ) =>
val clazz = sym.moduleClass();
clazz.initialize();
- pushContext(
+ val prevContext = pushContext(
tree, clazz.primaryConstructor(), context.scope);
val tpe1: Tree = transform(tpe, TYPEmode);
- popContext();
+ context = prevContext;
val templ1: Tree$Template = transformTemplate(templ, sym.moduleClass());
if (tpe1 != Tree.Empty && !templ1.getType().isSubType(tpe1.getType()))
error(tree.pos, "" + sym + " does not implement " + tpe1.getType());
@@ -2235,7 +2192,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
.setType(Type.NoType);
case Tree$DefDef(_, name, tparams, vparams, tpe, rhs) =>
- pushContext(tree, sym, new Scope(context.scope));
+ val prevContext = pushContext(tree, sym, new Scope(context.scope));
reenterParams(tparams, vparams, sym.getType());
if (name == Names.CONSTRUCTOR) {
val enclClass = context.enclClass.owner;
@@ -2256,7 +2213,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
rhs,
if (name == Names.CONSTRUCTOR) CONSTRmode else EXPRmode,
if (name == Names.CONSTRUCTOR) definitions.void_TYPE() else tpe1.getType());
- popContext();
+ context = prevContext;
if (name == Names.CONSTRUCTOR) {
val enclClass = context.enclClass.owner;
enclClass.flags =
@@ -2277,9 +2234,9 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
else transform(tpe, TYPEmode);
var rhs1: Tree = rhs;
if (rhs != Tree.Empty) {
- pushContext(tree, sym, context.scope);
+ val prevContext = pushContext(tree, sym, context.scope);
rhs1 = transform(rhs, EXPRmode, tpe1.getType());
- popContext();
+ context = prevContext;
} else if ((sym.flags & (MUTABLE | DEFERRED)) == MUTABLE) {
rhs1 = gen.mkDefaultValue(tree.pos, sym.getType());
}
@@ -2297,17 +2254,17 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
.setType(Type.NoType);
case Tree$AliasTypeDef(_, _, tparams, rhs) =>
- pushContext(tree, sym.primaryConstructor(), new Scope(context.scope));
+ val prevContext = pushContext(tree, sym.primaryConstructor(), new Scope(context.scope));
reenterParams(tparams, sym.typeParams());
val tparams1 = transform(tparams);
val rhs1: Tree = transform(rhs, TYPEmode);
- popContext();
+ context = prevContext;
checkNonCyclic(tree.pos, sym.getType());
copy.AliasTypeDef(tree, sym, tparams1, rhs1)
.setType(Type.NoType);
case Tree$Import(expr, selectors) =>
- context.imports = new ImportList(tree, context.scope, context.imports);
+ pushContext(tree, context.owner, context.scope);
Tree.Empty
/*
@@ -2322,10 +2279,11 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
tree match {
*/
case Tree$Block(stats, value) =>
- pushContext(tree, context.owner, new Scope(context.scope));
+ val prevContext = pushContext(tree, context.owner, new Scope(context.scope));
+ val newContext = context;
val stats1 = desugarize.Statements(unit, stats, true);
enterSyms(stats1);
- context.imports = context.outer.imports;
+ context = newContext;
val curmode: int = mode;
var start: Int = 0;
var valuemode: Int = curmode;
@@ -2342,7 +2300,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
val value1: Tree = transform(value, valuemode & ~FUNmode, pt);
val owntype: Type =
checkNoEscape(tree.pos, value1.getType().deconst());
- popContext();
+ context = prevContext;
copy.Block(tree, stats1, value1)
.setType(owntype);
@@ -2532,7 +2490,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
}
case Tree$Function(vparams, body) =>
- pushContext(tree, context.owner, new Scope(context.scope));
+ val prevContext = pushContext(tree, context.owner, new Scope(context.scope));
var restype: Type = desugarize.preFunction(vparams, pt);
enterParams(vparams);
val vparams1 = transform(vparams);
@@ -2540,7 +2498,7 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
if (!infer.isFullyDefined(restype))
restype = body1.getType().deconst();
restype = checkNoEscape(tree.pos, restype);
- popContext();
+ context = prevContext;
gen.mkFunction(tree.pos, vparams1, body1, restype, context.owner);
case Tree$TypeApply(fn, args) =>
@@ -2792,10 +2750,17 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
//ex.printStackTrace();//DEBUG
reportTypeError(tree.pos, ex);
}
- fn1.getType() match {
- case Type$MethodType(params, restp1) =>
- val formals = infer.formalTypes(params, args.length);
- var i = 0; while (i < args.length) {
+ case _ =>
+ }
+
+ fn1.getType() match {
+ case Type$MethodType(params, restp) =>
+ if ((mode & PATTERNmode) != 0) {
+ return copy.Apply(tree, fn1, args).setType(restp);
+ } else {
+ val formals = infer.formalTypes(params, args.length);
+ if (formals.length == args.length) {
+ var i = 0; while (i < args.length) {
args(i) = adapt(args(i), argMode, formals(i));
args(i) match {
case Tree$Typed( arg, Tree$Ident( TypeNames.WILDCARD_STAR ) ) =>
@@ -2807,28 +2772,21 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
case _ => /* nop */
}
i = i + 1
- }
- return constfold.tryToFold(
- copy.Apply(tree, fn1, args)
- .setType(restp1));
- case _ =>
- }
-
- case Type$MethodType(params, restp) =>
- // if method is monomorphic,
- // check that it can be applied to arguments.
- if (infer.isApplicable(fn1.getType(), argtypes, Type.AnyType)) {
- return constfold.tryToFold(
+ }
+ }
+ return constfold.tryToFold(
copy.Apply(tree, fn1, args)
.setType(restp));
- }
+ }
case _ =>
}
- if (!fn1.getType().isError()) error(
- tree.pos,
- infer.applyErrorMsg(
- "", fn1, " cannot be applied to ", argtypes, pt));
+
+ if (!fn1.getType().isError())
+ error(
+ tree.pos,
+ infer.applyErrorMsg(
+ "", fn1, " cannot be applied to ", argtypes, pt));
errorTermTree(tree)
}
@@ -2914,13 +2872,13 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
case Tree$LabelDef(name, params, body) =>
assert(params.length == 0);
- pushContext(tree, context.owner, new Scope(context.scope));
+ val prevContext = pushContext(tree, context.owner, new Scope(context.scope));
val lsym: Symbol = context.owner.newLabel(tree.pos, name);
lsym.setInfo(
new Type$MethodType(Symbol.EMPTY_ARRAY, definitions.void_TYPE()));
context.scope.enter(lsym);
val body1: Tree = transform(body, mode, pt);
- popContext();
+ context = prevContext;
copy.LabelDef(tree, lsym, params, body1)
.setSymbol(lsym).setType(definitions.void_TYPE());
@@ -2954,14 +2912,14 @@ class Analyzer(global: scalac_Global, descr: AnalyzerPhase) extends Transformer(
else context.enclClass.owner;
val self: Type = Type.compoundTypeWithOwner(cowner, ptypes, members);
val clazz: Symbol = self.symbol();
- pushContext(tree, clazz, members);
+ val prevContext = pushContext(tree, clazz, members);
{ var i = 0; while (i < refinements.length) {
val m = enterSym(refinements(i));
m.flags = m.flags | OVERRIDE;
i = i + 1
}}
val refinements1 = transformStatSeq(refinements, Symbol.NONE);
- popContext();
+ context = prevContext;
copy.CompoundType(tree, parents1, refinements1)
.setType(self)
diff --git a/sources/scala/tools/scalac/typechecker/AnalyzerPhase.scala b/sources/scala/tools/scalac/typechecker/AnalyzerPhase.scala
index d0aaf2e09d..1630e27ba5 100644
--- a/sources/scala/tools/scalac/typechecker/AnalyzerPhase.scala
+++ b/sources/scala/tools/scalac/typechecker/AnalyzerPhase.scala
@@ -7,10 +7,9 @@
// $Id$
import scala.tools.util.Position;
-import scalac._;
+import scalac.{symtab => scalac_symtab, _}
import scalac.util._;
import scalac.ast._;
-import scalac.symtab._;
import scalac.checkers._;
import java.util.HashMap;
import java.util.ArrayList;
@@ -20,9 +19,11 @@ import scalac.{Global => scalac_Global}
package scala.tools.scalac.typechecker {
+import scalac_symtab._;
+
class AnalyzerPhase(global: scalac_Global, descriptor: PhaseDescriptor) extends scalac_AnalyzerPhase(global, descriptor) {
- val startContext = new Context(
+ var startContext = new Context(
Tree.Empty,
global.definitions.ROOT_CLASS,
global.definitions.ROOT_CLASS.members(),
@@ -30,37 +31,41 @@ class AnalyzerPhase(global: scalac_Global, descriptor: PhaseDescriptor) extends
startContext.enclClass = startContext;
if (!global.noimports) {
- addImport(startContext, global.definitions.JAVALANG);
- addImport(startContext, global.definitions.SCALA);
+ startContext = addImport(startContext, global.definitions.JAVALANG);
+ startContext = addImport(startContext, global.definitions.SCALA);
}
if (!global.noimports && !global.nopredefs) {
- addImport(startContext, global.definitions.PREDEF);
+ startContext = addImport(startContext, global.definitions.PREDEF);
}
- val consoleContext = new Context(
+ startContext = new Context(Tree.Empty, startContext.owner, new Scope(), startContext);
+
+ var consoleContext = new Context(
Tree.Empty,
global.definitions.ROOT_CLASS,
global.definitions.ROOT_CLASS.members(),
startContext);
- val contexts = new HashMap/*<Unit,Context>*/();
- val newSources = new ArrayList/*<Unit>*/();
+ val contexts = new HashMap/*<CompilationUnit,Context>*/();
+ val newSources = new ArrayList/*<CompilationUnit>*/();
override def addConsoleImport(module: Symbol): unit =
- addImport(consoleContext, module);
+ consoleContext = addImport(consoleContext, module);
- private def addImport(context: Context, module: Symbol): unit = {
+ private def addImport(context: Context, module: Symbol): Context = {
global.prevPhase();
val tree = gen.mkImportAll(Position.NOPOS, module);
global.nextPhase();
- context.imports = new ImportList(tree, new Scope(), context.imports);
+ val c = new Context(tree, context.owner, new Scope(), context);
+ c.depth = context.depth;
+ c
}
- override def apply(units: Array[Unit]): unit =
+ override def apply(units: Array[CompilationUnit]): unit =
new Analyzer(global, this).apply(units);
- override def lateEnter(unit: Unit): unit = {
+ override def lateEnter(unit: CompilationUnit): unit = {
new Analyzer(global, this).lateEnter(unit);
}
diff --git a/sources/scala/tools/scalac/typechecker/ConstantFolder.scala b/sources/scala/tools/scalac/typechecker/ConstantFolder.scala
index 10c3c40072..a3e3470bdc 100644
--- a/sources/scala/tools/scalac/typechecker/ConstantFolder.scala
+++ b/sources/scala/tools/scalac/typechecker/ConstantFolder.scala
@@ -12,6 +12,7 @@
import java.lang.Object;
+import scalac.{symtab => scalac_symtab}
import scalac.{Global => scalac_Global}
import scalac.util.Name;
import scalac.util.Names;
@@ -20,10 +21,11 @@ import scalac.ast.TreeGen;
import scalac.atree._;
import scalac.atree.ATypeKind;
import scalac.atree.ATypeKind._;
-import scalac.symtab._;
package scala.tools.scalac.typechecker {
+import scalac_symtab._;
+
class ConstantFolder(global: scalac_Global) {
//########################################################################
diff --git a/sources/scala/tools/scalac/typechecker/Context.scala b/sources/scala/tools/scalac/typechecker/Context.scala
index 7c5569532f..822b4bf148 100644
--- a/sources/scala/tools/scalac/typechecker/Context.scala
+++ b/sources/scala/tools/scalac/typechecker/Context.scala
@@ -5,12 +5,15 @@
**
** $Id$
\* */
-import scalac.symtab._;
+import scalac.{symtab => scalac_symtab}
import scalac.ast._;
import scalac.util.Names;
+import scalac.util.Name;
package scala.tools.scalac.typechecker {
+import scalac_symtab._;
+
object Context {
val NONE = new Context();
NONE.viewCache = List();
@@ -23,28 +26,32 @@ class Context {
var tree: Tree = _; // Tree associated with this context
var owner: Symbol = _; // The current owner
var scope: Scope = _; // The current scope
- var imports: ImportList = null; // The current import list
var outer: Context = _; // The next outer context
var enclClass: Context = this; // The next outer context whose tree
// is a class template
+ var prevImport: Context = this; // the next outer import context
var variance: int = _; // Variance relative to enclosing class.
var constructorClass: Symbol = _; // Class for auxiliary constructor
var viewCache: List[View] = null; // View symbols visible in scope
var infer: Infer = null; // Type inferencer
+ var depth: int = 0;
def this(tree: Tree, owner: Symbol, scope: Scope, outer: Context) = {
this();
this.tree = tree;
this.owner = owner;
this.scope = scope;
- this.imports = outer.imports;
this.enclClass = if ((tree.isInstanceOf[Tree$Template] ||
tree.isInstanceOf[Tree$CompoundType]) &&
tree != outer.tree) this
else outer.enclClass;
+ this.prevImport = if (tree.isInstanceOf[Tree$Import] &&
+ tree != outer.tree) this
+ else outer.prevImport;
this.variance = outer.variance;
this.constructorClass = outer.constructorClass;
this.infer = outer.infer;
+ this.depth = outer.depth + 1;
this.outer = outer;
}
@@ -53,7 +60,7 @@ class Context {
def outerContext(clazz: Symbol): Context = {
var c = this;
- while (c != Context.NONE && c.owner != clazz) c = c.outer;
+ while (c != Context.NONE && c.owner != clazz) c = c.outer.enclClass;
c
}
@@ -68,6 +75,26 @@ class Context {
outer.isTopLevel()
}
+ def importString(): String =
+ if (prevImport == Context.NONE) ""
+ else
+ prevImport.outer.importString() +
+ prevImport.tree.symbol().toString() + ";";
+
+ def importPrefix(): Tree = tree match {
+ case Tree$Import(expr, _) => expr
+ }
+
+ def importType(): Type =
+ tree.symbol().getType();
+
+ def sameImport(that: Context): boolean =
+ this.importType().isSameAs(that.importType());
+
+ def importedSymbol(name: Name): Symbol = {
+ return TreeInfo.importedSymbol(tree, name);
+ }
+
def viewMeths: List[View] = {
def addView(sym: Symbol, symtype: Type, qual: Tree): unit = symtype match {
@@ -91,16 +118,15 @@ class Context {
if (viewCache == null) {
viewCache = outer.viewMeths;
- val e = scope.lookupEntry(Names.view);
- if (e.owner == scope && e.sym.kind == VAL)
- addView(e.sym, e.sym.getType(), Tree.Empty);
-
- var imp = imports;
- while (imp != outer.imports) {
- val sym = imp.importedSymbol(Names.view);
+ if (scope != outer.scope) {
+ val e = scope.lookupEntry(Names.view);
+ if (e.owner == scope && e.sym.kind == VAL)
+ addView(e.sym, e.sym.getType(), Tree.Empty);
+ }
+ if (prevImport == this) {
+ val sym = importedSymbol(Names.view);
if (sym.kind == VAL)
- addView(sym, imp.importType().memberType(sym), imp.importPrefix());
- imp = imp.prev;
+ addView(sym, importType().memberType(sym), importPrefix());
}
}
viewCache
diff --git a/sources/scala/tools/scalac/typechecker/DeSugarize.scala b/sources/scala/tools/scalac/typechecker/DeSugarize.scala
index fa9063fefd..64880003ae 100644
--- a/sources/scala/tools/scalac/typechecker/DeSugarize.scala
+++ b/sources/scala/tools/scalac/typechecker/DeSugarize.scala
@@ -11,16 +11,18 @@ import java.lang.Object;
import scalac._;
import scalac.util._;
-import scalac.symtab._;
+import scalac.{symtab => scalac_symtab}
import scalac.ast._;
import scalac.typechecker.Infer;
-import scalac.{Global => scalac_Global, Unit => scalac_Unit}
+import scalac.{Global => scalac_Global, CompilationUnit => scalac_CompilationUnit}
import scala.tools.scalac.ast.printer.TextTreePrinter;
import scala.tools.scalac.util.NewArray;
package scala.tools.scalac.typechecker {
+import scalac_symtab._;
+
/** A transformer for removing syntactic sugar. This transformer does
* not need any type or symbol-table information.
*
@@ -39,7 +41,7 @@ class DeSugarize(make: TreeFactory, copy: TreeCopier, gen: TreeGen, infer: scala
/** introduce fresh variable of the form "ds$56"
*/
- def getvar(unit: scalac_Unit): Name = unit.fresh.newName("ds", '$');
+ def getvar(unit: scalac_CompilationUnit): Name = unit.fresh.newName("ds", '$');
def setterName(name: Name): Name = Name.fromString(name.toString() + Names._EQ);
@@ -199,7 +201,7 @@ class DeSugarize(make: TreeFactory, copy: TreeCopier, gen: TreeGen, infer: scala
* only called when match has to be added
* no type for parameter x
*/
- def Visitor(unit: scalac_Unit, tree: Tree): Tree = tree match {
+ def Visitor(unit: scalac_CompilationUnit, tree: Tree): Tree = tree match {
case Tree$Visitor(cases) =>
val x: Name = getvar(unit);
val param: Tree$ValDef = make.ValDef(
@@ -258,7 +260,7 @@ class DeSugarize(make: TreeFactory, copy: TreeCopier, gen: TreeGen, infer: scala
/** expand pattern definitions and variable definitions in templates.
*/
- def Statements(unit: scalac_Unit, stats: Array[Tree], isLocal: boolean): Array[Tree] = {
+ def Statements(unit: scalac_CompilationUnit, stats: Array[Tree], isLocal: boolean): Array[Tree] = {
var change: boolean = false;
var i = 0;
while (i < stats.length && !change) {
@@ -360,7 +362,7 @@ class DeSugarize(make: TreeFactory, copy: TreeCopier, gen: TreeGen, infer: scala
* val x_N = t$._N
*
*/
- def PatDef(unit: scalac_Unit, tree: Tree): Array[Tree] = tree match {
+ def PatDef(unit: scalac_CompilationUnit, tree: Tree): Array[Tree] = tree match {
case Tree$PatDef(mods, Tree$Ident(name), rhs) =>
// val x = e ==> val x = e
NewArray.Tree(make.ValDef(tree.pos, mods, name, Tree.Empty, rhs))
diff --git a/sources/scala/tools/scalac/typechecker/Infer.scala b/sources/scala/tools/scalac/typechecker/Infer.scala
index 5c33e3b845..fa2dac2c1f 100644
--- a/sources/scala/tools/scalac/typechecker/Infer.scala
+++ b/sources/scala/tools/scalac/typechecker/Infer.scala
@@ -9,11 +9,11 @@
import java.lang.Object;
import scalac.{Global => scalac_Global}
+import scalac.{symtab => scalac_symtab}
import scalac.typechecker.{Infer => scalac_Infer}
import scalac.ApplicationError;
import scalac.util._;
import scalac.ast._;
-import scalac.symtab._;
import scala.collection.mutable.HashMap;
import scala.tools.util.Position;
@@ -21,6 +21,8 @@ import scala.tools.scalac.util.NewArray;
package scala.tools.scalac.typechecker {
+import scalac_symtab._;
+
class Infer(global: scalac_Global, gen: TreeGen, make: TreeFactory) extends scalac_Infer {
import Modifiers._, Kinds._;
@@ -536,7 +538,7 @@ class Infer(global: scalac_Global, gen: TreeGen, make: TreeFactory) extends scal
* (nargs - params.length + 1) copies of its type is returned.
*/
def formalTypes(params: Array[Symbol], nargs: int): Array[Type] = {
- if (params.length > 0 && (params(params.length-1).flags & REPEATED) != 0) {
+ if (nargs >= params.length - 1 && params.length > 0 && (params(params.length-1).flags & REPEATED) != 0) {
val args: Array[Type] = params(params.length-1).getType().typeArgs();
if (args.length == 1) {
val ft: Type = args(0); // last param has type Seq[T], we need T here
diff --git a/sources/scala/tools/scalac/typechecker/Substituter.scala b/sources/scala/tools/scalac/typechecker/Substituter.scala
index 4efe5496fc..e30fed4444 100644
--- a/sources/scala/tools/scalac/typechecker/Substituter.scala
+++ b/sources/scala/tools/scalac/typechecker/Substituter.scala
@@ -7,13 +7,15 @@
// $Id$
import scalac.{Global => scalac_Global};
+import scalac.{symtab => scalac_symtab}
import scalac.ApplicationError;
import scalac.util._;
import scalac.ast._;
-import scalac.symtab._;
package scala.tools.scalac.typechecker {
+import scalac_symtab._;
+
// Tree Substitution -------------------------------------------------------------
class Substituter(global: scalac_Global, gen: TreeGen) extends Transformer(global) {
diff --git a/sources/scala/tools/scalac/typechecker/View.scala b/sources/scala/tools/scalac/typechecker/View.scala
index a3b64636d5..814e29cc7c 100755
--- a/sources/scala/tools/scalac/typechecker/View.scala
+++ b/sources/scala/tools/scalac/typechecker/View.scala
@@ -5,11 +5,13 @@
**
** $Id$
\* */
-import scalac.symtab._;
+import scalac.{symtab => scalac_symtab}
import scalac.ast._;
package scala.tools.scalac.typechecker {
+import scalac_symtab._;
+
case class View(sym: Symbol, symtype: Type, qual: Tree, context: Context) {
var locked = false;
}
diff --git a/sources/scala/tools/scalac/util/NewArray.scala b/sources/scala/tools/scalac/util/NewArray.scala
index 4e0f7505dc..d8e159fd75 100644
--- a/sources/scala/tools/scalac/util/NewArray.scala
+++ b/sources/scala/tools/scalac/util/NewArray.scala
@@ -8,12 +8,14 @@
import scalac.ast._;
import scalac.checkers.Checker;
-import scalac.symtab.Symbol;
-import scalac.symtab.Type;
+import scalac.{symtab => scalac_symtab}
import scalac.util.Name;
package scala.tools.scalac.util {
+import scalac_symtab.Symbol;
+import scalac_symtab.Type;
+
object NewArray {
def Tree(xs: Tree*): Array[Tree] = {
diff --git a/sources/scala/tools/scalac/wholeprog/ApplicationBuilder.scala b/sources/scala/tools/scalac/wholeprog/ApplicationBuilder.scala
index 3060d82b03..c82248bcd6 100644
--- a/sources/scala/tools/scalac/wholeprog/ApplicationBuilder.scala
+++ b/sources/scala/tools/scalac/wholeprog/ApplicationBuilder.scala
@@ -1,8 +1,8 @@
import scalac.{Global => scalac_Global}
-import scalac.{Unit => scalac_Unit}
+import scalac.{CompilationUnit => scalac_CompilationUnit}
import scalac.atree._;
-import scalac.symtab._;
+import scalac.{symtab => scalac_symtab}
import scalac.util.Name;
import scalac.util._;
import scala.collection.mutable._;
@@ -10,6 +10,8 @@ import scalac.ast._;
package scala.tools.scalac.wholeprog {
+import scalac_symtab._;
+
/**
* This class builds the set of classes included in the Application (whole
* program), starting with a root class, given from the outside (usually
@@ -26,7 +28,7 @@ class ApplicationBuilder(globall: scalac_Global) {
var worklist: Set[Symbol] = new HashSet[Symbol];
var app: Set[Symbol] = new HashSet[Symbol];
- def finalClasses(app: Set[Symbol], units: Array[scalac_Unit]): Unit = {
+ def finalClasses(app: Set[Symbol], units: Array[scalac_CompilationUnit]): Unit = {
val m = new MonomorphicCallSites(global, app);
m.buildClassHierarchy;
@@ -48,7 +50,7 @@ class ApplicationBuilder(globall: scalac_Global) {
/** find the whole application that is referenced by the root class */
- def buildApplication(root: String, units: Array[scalac_Unit]): unit = {
+ def buildApplication(root: String, units: Array[scalac_CompilationUnit]): unit = {
rootClassName = Name.fromString(root);
var rootClass: Symbol = null;
@@ -79,7 +81,7 @@ class ApplicationBuilder(globall: scalac_Global) {
finalClasses(app, units);
}
// where
- def buildCodeMap(units: Array[scalac_Unit]): Unit = {
+ def buildCodeMap(units: Array[scalac_CompilationUnit]): Unit = {
//val map = new SymbolMap();
def mapTree(t: Tree): unit = {
@@ -102,7 +104,7 @@ class ApplicationBuilder(globall: scalac_Global) {
};
}
- units.foreach( (u: scalac_Unit) =>
+ units.foreach( (u: scalac_CompilationUnit) =>
u.body.foreach( (b) => mapTree(b) ));
}
diff --git a/sources/scala/tools/scalac/wholeprog/Inline.scala b/sources/scala/tools/scalac/wholeprog/Inline.scala
index 05b8bf69ff..101b20b960 100644
--- a/sources/scala/tools/scalac/wholeprog/Inline.scala
+++ b/sources/scala/tools/scalac/wholeprog/Inline.scala
@@ -10,8 +10,8 @@
** [iuli] 12.05.2004 */
import scalac.{Global => scalac_Global}
-import scalac.{Unit => scalac_Unit}
-import scalac.symtab._;
+import scalac.{CompilationUnit => scalac_CompilationUnit}
+import scalac.{symtab => scalac_symtab}
import scalac.util._;
import scala.collection.mutable._;
import scalac.ast._;
@@ -21,6 +21,8 @@ import scala.tools.util._;
package scala.tools.scalac.wholeprog {
+import scalac_symtab._;
+
/** Perform inlining of the sites passed as parameter */
class InlineMethods(sites: List[Tuple3[GNode[Symbol, MethodNode], GNode[Symbol, MethodNode], CallSite]],
global: scalac_Global)
diff --git a/sources/scala/tools/scalac/wholeprog/MonomorphicCS.scala b/sources/scala/tools/scalac/wholeprog/MonomorphicCS.scala
index f803d85642..83b1b7cabd 100644
--- a/sources/scala/tools/scalac/wholeprog/MonomorphicCS.scala
+++ b/sources/scala/tools/scalac/wholeprog/MonomorphicCS.scala
@@ -13,8 +13,8 @@
** [iuli] 2.05.2004 */
import scalac.{Global => scalac_Global}
-import scalac.{Unit => scalac_Unit}
-import scalac.symtab._;
+import scalac.{CompilationUnit => scalac_CompilationUnit}
+import scalac.{symtab => scalac_symtab}
import scalac.util._;
import scala.collection.mutable._;
import scalac.ast._;
@@ -23,6 +23,8 @@ import scala.tools.scalac.wholeprog.graph._;
package scala.tools.scalac.wholeprog {
+import scalac_symtab._;
+
class MonomorphicCallSites(globall: scalac_Global, application: Set[Symbol]) {
type CallGraph = Graph[Symbol, MethodNode, CallEdge];
type CallGraphNode = GNode[Symbol, MethodNode];
@@ -129,9 +131,9 @@ class MonomorphicCallSites(globall: scalac_Global, application: Set[Symbol]) {
dumpCallGraph;
Console.println("[start Monomorphic call site identification]");
- cg.nodes.foreach( (id, n) => {
- n.info.callSites.foreach( (site) => {
- val mcs = cg.getOutEdges(id).filter( e => e.info.site == site );
+ cg.nodes.foreach( (id: Symbol, n: CallGraphNode) => {
+ n.info.callSites.foreach( (site: CallSite) => {
+ val mcs = cg.getOutEdges(id).filter( e: CallGraphEdge => e.info.site == site );
if (mcs.length == 1) {
inlineCallSite(mcs.head);
@@ -190,13 +192,13 @@ class MonomorphicCallSites(globall: scalac_Global, application: Set[Symbol]) {
// });
Console.println("[Visiting call graph]");
- callGraph.nodes.foreach( (id, n) => {
- n.info.callSites.foreach( (site) => {
- val targets = callGraph.getOutEdges(id).filter( e => e.info.site == site );
+ callGraph.nodes.foreach( (id: Symbol, n: CallGraphNode) => {
+ n.info.callSites.foreach( (site: CallSite) => {
+ val targets = callGraph.getOutEdges(id).filter( e: CallGraphEdge => e.info.site == site );
if (targets.length > 1) {
// test for instantiation
- targets.foreach( (t) => if ( !isInstatiated(callGraph.getNode(t.to).info.classz) ) {
+ targets.foreach( (t: CallGraphEdge) => if ( !isInstatiated(callGraph.getNode(t.to).info.classz) ) {
callGraph.removeEdge(t);
Logger.log("[RTA] Removed edge " +
SymbolPrinter.fullName(t.from) + " -> " +
@@ -229,7 +231,7 @@ class MonomorphicCallSites(globall: scalac_Global, application: Set[Symbol]) {
var edges = 0;
var callsites = 0;
- callGraph.nodes.foreach( (id, n) => {
+ callGraph.nodes.foreach( (id: Symbol, n: CallGraphNode) => {
nodes = nodes + 1;
callsites = callsites + n.info.callSites.length;
edges = edges + callGraph.getOutEdges(id).length;
diff --git a/sources/scala/tools/scalac/wholeprog/PrintDotFile.scala b/sources/scala/tools/scalac/wholeprog/PrintDotFile.scala
index 706274d52f..9f9f3c5143 100644
--- a/sources/scala/tools/scalac/wholeprog/PrintDotFile.scala
+++ b/sources/scala/tools/scalac/wholeprog/PrintDotFile.scala
@@ -1,4 +1,4 @@
-import scalac.{Unit => scalac_Unit}
+import scalac.{CompilationUnit => scalac_CompilationUnit}
import scalac.ast._;
import scalac.util.Name;
@@ -9,7 +9,7 @@ package scala.tools.scalac.wholeprog {
* the graphviz "dot" tool to build a graph image. Useful for
* understanding the Abstract Syntax Tree.
*/
-class PrintDotFile(_units: Array[scalac_Unit]) {
+class PrintDotFile(_units: Array[scalac_CompilationUnit]) {
private val units = _units;
private var writer: java.io.Writer = null;
@@ -19,7 +19,7 @@ class PrintDotFile(_units: Array[scalac_Unit]) {
writer.write("digraph tree {\nnode [style=filled, color=cadetblue2];\n");
- units.foreach( (u:scalac_Unit) =>
+ units.foreach( (u:scalac_CompilationUnit) =>
u.body.foreach ( (t: Tree) => walk(t, null) ) );
writer.write("}\n");
diff --git a/sources/scala/tools/scaladoc/Comment.java b/sources/scala/tools/scaladoc/Comment.java
index f0895b207c..d5d71af13e 100644
--- a/sources/scala/tools/scaladoc/Comment.java
+++ b/sources/scala/tools/scaladoc/Comment.java
@@ -12,7 +12,7 @@ import java.util.*;
import java.util.regex.*;
import ch.epfl.lamp.util.Pair;
import scalac.symtab.Symbol;
-import scalac.Unit;
+import scalac.CompilationUnit;
import java.io.StringReader;
import org.xml.sax.*;
@@ -34,9 +34,9 @@ public class Comment extends DefaultHandler {
public final Symbol holder;
/**
- * Unit of the symbol associated with this comment.
+ * CompilationUnit of the symbol associated with this comment.
*/
- Unit unit;
+ CompilationUnit unit;
/**
* Raw text of the comment.
@@ -59,7 +59,7 @@ public class Comment extends DefaultHandler {
* @param holder
* @param rawText
*/
- public Comment(String rawText, Symbol holder, Unit unit, HTMLValidator html) {
+ public Comment(String rawText, Symbol holder, CompilationUnit unit, HTMLValidator html) {
this.holder = holder;
this.rawText = cleanComment(rawText);
this.unit = unit;
diff --git a/sources/scala/tools/scaladoc/HTMLGenerator.java b/sources/scala/tools/scaladoc/HTMLGenerator.java
index 6978ba92a0..72d6d5a0ca 100644
--- a/sources/scala/tools/scaladoc/HTMLGenerator.java
+++ b/sources/scala/tools/scaladoc/HTMLGenerator.java
@@ -40,7 +40,7 @@ import ch.epfl.lamp.util.XHTMLPrinter;
import scala.tools.util.Position;
import scalac.Global;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.symtab.Kinds;
import scalac.symtab.Modifiers;
import scalac.symtab.Scope;
@@ -510,7 +510,7 @@ public abstract class HTMLGenerator {
Pair p = (Pair) global.mapSymbolComment.get(sym);
if (p != null) {
String s = (String) p.fst;
- Unit unit = (Unit) p.snd;
+ CompilationUnit unit = (CompilationUnit) p.snd;
comment = new Comment(s, sym, unit, xhtml);
}
else { // comment inheritance
diff --git a/sources/scala/tools/scaladoc/HTMLGeneratorPhase.scala b/sources/scala/tools/scaladoc/HTMLGeneratorPhase.scala
index 1870d1c12b..93a82721c5 100755
--- a/sources/scala/tools/scaladoc/HTMLGeneratorPhase.scala
+++ b/sources/scala/tools/scaladoc/HTMLGeneratorPhase.scala
@@ -9,13 +9,13 @@
import scalac.Global;
import scalac.Phase;
import scalac.PhaseDescriptor;
-import scalac.Unit;
+import scalac.CompilationUnit;
package scala.tools.scaladoc {
class HTMLGeneratorPhase(global: Global, descriptor: PhaseDescriptor) extends Phase(global, descriptor) {
- def apply(units: Array[Unit]): unit = new HTMLGeneratorScala(global).apply();
+ def apply(units: Array[CompilationUnit]): unit = new HTMLGeneratorScala(global).apply();
}
}
diff --git a/sources/scala/tools/scaladoc/MLType.scala b/sources/scala/tools/scaladoc/MLType.scala
index 3f59dc502e..b70d591cfb 100755
--- a/sources/scala/tools/scaladoc/MLType.scala
+++ b/sources/scala/tools/scaladoc/MLType.scala
@@ -6,14 +6,13 @@
// $Id$
-import scalac.symtab.Symbol;
-import scalac.symtab._;
-import scalac.symtab.Definitions;
+import scalac.{symtab => scalac_symtab}
import scalac.Global;
import scalac.util.Names;
package scala.tools.scaladoc {
+ import scalac_symtab._;
import scala.collection.immutable._;
/**
diff --git a/sources/scala/tools/scaladoc/ScalaSearch.java b/sources/scala/tools/scaladoc/ScalaSearch.java
index 69e07f6f40..bb4165dfbc 100644
--- a/sources/scala/tools/scaladoc/ScalaSearch.java
+++ b/sources/scala/tools/scaladoc/ScalaSearch.java
@@ -35,7 +35,7 @@ import scalac.util.NameTransformer;
import java.io.*;
import scalac.ast.printer.*;
import scala.tools.scalac.ast.parser.Parser$class;
-import scalac.Unit;
+import scalac.CompilationUnit;
/**
* This class contains functions to retrieve information from a Scala
@@ -552,11 +552,11 @@ public class ScalaSearch {
// complains.
queryCounter = queryCounter + 1;
SourceFile sourceFile = global.getSourceFile("tmp.scala", unitString);
- Unit tmpUnit = new Unit(global, sourceFile, false);
+ CompilationUnit tmpUnit = new CompilationUnit(global, sourceFile, false);
tmpUnit.body = new Parser$class(tmpUnit).parse();
//TreePrinter treePrinter = new TextTreePrinter(System.out);
//treePrinter.print(tmpUnit);
- global.PHASE.ANALYZER.phase().apply(new Unit[]{ tmpUnit });
+ global.PHASE.ANALYZER.phase().apply(new CompilationUnit[]{ tmpUnit });
if (global.reporter.errors() == errorNumber) {
Scope tmpScope = tmpUnit.body[0].symbol().members();
Type res = tmpScope.lookup(Name.fromString("f")).type();
diff --git a/sources/scala/tools/scaladoc/StandardDocModule.java b/sources/scala/tools/scaladoc/StandardDocModule.java
index 33b2ccd023..7b77f3f000 100644
--- a/sources/scala/tools/scaladoc/StandardDocModule.java
+++ b/sources/scala/tools/scaladoc/StandardDocModule.java
@@ -14,7 +14,7 @@ import java.util.Map;
import java.util.Map.Entry;
import scalac.Global;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.symtab.Symbol;
import scalac.util.Debug;
diff --git a/sources/scala/tools/scalai/Compiler.java b/sources/scala/tools/scalai/Compiler.java
index f545461f25..bf3fd326a9 100644
--- a/sources/scala/tools/scalai/Compiler.java
+++ b/sources/scala/tools/scalai/Compiler.java
@@ -22,7 +22,7 @@ import java.util.Iterator;
import scala.tools.util.Position;
import scala.tools.util.SourceFile;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.Global;
import scalac.ast.Tree;
import scalac.ast.Tree.ValDef;
@@ -265,7 +265,7 @@ public class Compiler {
//########################################################################
//
- public void compile(Unit[] units) {
+ public void compile(CompilationUnit[] units) {
for (int i = 0; i < units.length; i++) declare(units[i].source, units[i].body);
}
diff --git a/sources/scala/xml/nobinding/NoBindingFactoryAdapter.scala b/sources/scala/xml/nobinding/NoBindingFactoryAdapter.scala
index 187642db3c..852822b919 100644
--- a/sources/scala/xml/nobinding/NoBindingFactoryAdapter.scala
+++ b/sources/scala/xml/nobinding/NoBindingFactoryAdapter.scala
@@ -9,7 +9,7 @@
package scala.xml.nobinding;
import scala.collection.{ immutable, mutable };
-import scala.xml.{ Elem, Node, Text, FactoryAdapter, Utility };
+//import scala.xml.{ Elem, Node, Text, FactoryAdapter, Utility };
import org.xml.sax.InputSource;
/** nobinding adaptor providing callbacks to parser to create elements.
diff --git a/sources/scala/xml/nobinding/XML.scala b/sources/scala/xml/nobinding/XML.scala
index 1ccb31dc5e..d762ccea39 100644
--- a/sources/scala/xml/nobinding/XML.scala
+++ b/sources/scala/xml/nobinding/XML.scala
@@ -12,7 +12,7 @@ import org.xml.sax.InputSource;
import scala.collection.Map ;
import scala.collection.mutable.HashMap ;
-import scala.xml.Utility ;
+// import scala.xml.Utility ;
/** functions to load and save XML elements. use this when data binding is not
** desired, i.e. when XML is handled using Symbol nodes
diff --git a/sources/scala/xml/path/Expression.scala b/sources/scala/xml/path/Expression.scala
index 0289582ffe..bb195354a1 100644
--- a/sources/scala/xml/path/Expression.scala
+++ b/sources/scala/xml/path/Expression.scala
@@ -1,6 +1,6 @@
package scala.xml.path;
-import scala.xml.Node ;
+// import scala.xml.Node ;
object Expression {
def evaluate(expr:Expression):List[Node] = {
diff --git a/sources/scalac/Global.java b/sources/scalac/Global.java
index 9252c96c67..9b50265f06 100644
--- a/sources/scalac/Global.java
+++ b/sources/scalac/Global.java
@@ -92,7 +92,7 @@ public abstract class Global {
/** all compilation units
*/
- public Unit[] units;
+ public CompilationUnit[] units;
/** the class path
*/
@@ -342,13 +342,13 @@ public abstract class Global {
for (int i = 0; i < files.length; i++) {
try {
SourceFile source = getSourceFile(files[i]);
- units.add(new Unit(this, source, console));
+ units.add(new CompilationUnit(this, source, console));
compiledUnits.add(source);
} catch (IOException exception) {
error(exception.getMessage());
}
}
- this.units = (Unit[])units.toArray(new Unit[units.size()]);
+ this.units = (CompilationUnit[])units.toArray(new CompilationUnit[units.size()]);
compile();
}
@@ -363,7 +363,7 @@ public abstract class Global {
reporter.resetCounters();
SourceFile source = getSourceFile(filename, input);
compiledUnits.add(source);
- units = new Unit[]{new Unit(this, source, console)};
+ units = new CompilationUnit[]{new CompilationUnit(this, source, console)};
compile();
}
@@ -406,11 +406,11 @@ public abstract class Global {
public void compileLate(SourceFile source, boolean mixinOnly) {
if (!compiledUnits.contains(source)) {
compiledUnits.add(source);
- Unit unit = new Unit(this, source, false, mixinOnly);
+ CompilationUnit unit = new CompilationUnit(this, source, false, mixinOnly);
Phase backup = currentPhase;
// !!! add code to print/skip/graph as in compile
currentPhase = PHASE.PARSER.phase();
- PHASE.PARSER.phase().apply(new Unit[] {unit});
+ PHASE.PARSER.phase().apply(new CompilationUnit[] {unit});
currentPhase = PHASE.ANALYZER.phase();
((AnalyzerPhase)PHASE.ANALYZER.phase()).lateEnter(unit);
// !!! add code for later phases?
@@ -499,7 +499,7 @@ public abstract class Global {
prevPhase();
}
- private void fix1(Unit unit) {
+ private void fix1(CompilationUnit unit) {
unit.body = new Tree[] {
make.ModuleDef(Position.FIRSTPOS,
0, Name.fromString(CONSOLE_S+module), Tree.Empty,
@@ -519,7 +519,7 @@ public abstract class Global {
}
}
- private void fix2(Unit unit) {
+ private void fix2(CompilationUnit unit) {
imports.clear();
for (int i = 0; i < unit.body.length; i++) {
switch (unit.body[i]) {
diff --git a/sources/scalac/Phase.java b/sources/scalac/Phase.java
index bd748a876e..778ea7ca26 100644
--- a/sources/scalac/Phase.java
+++ b/sources/scalac/Phase.java
@@ -64,7 +64,7 @@ public abstract class Phase {
}
/** Applies this phase to the given compilation units. */
- public abstract void apply(Unit[] units);
+ public abstract void apply(CompilationUnit[] units);
/** Graphs all compilation units. */
public void graph(Global global) {
@@ -72,7 +72,7 @@ public abstract class Phase {
}
/** Graphs the result of this phase for the given compilation unit. */
- public void graph(Unit unit) {
+ public void graph(CompilationUnit unit) {
// !!! new scala.compiler.gdl.TreePrinter().printInFile(
// !!! unit, unit.source + "-" + name() + ".gdl");
}
@@ -83,7 +83,7 @@ public abstract class Phase {
}
/** Check the result of this phase for the given compilation unit. */
- public void check(Unit unit) {
+ public void check(CompilationUnit unit) {
Checker[] checkers = postCheckers(unit.global);
for (int i = 0; i < checkers.length; i++) checkers[i].traverse(unit);
}
diff --git a/sources/scalac/Unit.java b/sources/scalac/Unit.java
index fd3c77a086..44e131bed7 100644
--- a/sources/scalac/Unit.java
+++ b/sources/scalac/Unit.java
@@ -22,7 +22,7 @@ import java.util.HashMap;
* @author Matthias Zenger
* @version 1.0
*/
-public class Unit {
+public class CompilationUnit {
/** the global compilation environment
*/
@@ -49,7 +49,7 @@ public class Unit {
public Tree[] body;
public ARepository repository;
- public Unit(Global global, SourceFile source,
+ public CompilationUnit(Global global, SourceFile source,
boolean console, boolean mixinOnly) {
this.global = global;
this.source = source;
@@ -58,7 +58,7 @@ public class Unit {
this.fresh = new FreshNameCreator();
}
- public Unit(Global global, SourceFile source, boolean console) {
+ public CompilationUnit(Global global, SourceFile source, boolean console) {
this(global, source, console, false);
}
diff --git a/sources/scalac/ast/Transformer.java.tmpl b/sources/scalac/ast/Transformer.java.tmpl
index c13ad02a1d..189a8a8d6d 100644
--- a/sources/scalac/ast/Transformer.java.tmpl
+++ b/sources/scalac/ast/Transformer.java.tmpl
@@ -9,7 +9,7 @@
package scalac.ast;
import scalac.Global;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.symtab.Type;
{#Imports#}
@@ -55,11 +55,11 @@ public class Transformer {
//########################################################################
// Public Methods
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
for (int i = 0; i < units.length; i++) apply(units[i]);
}
- public void apply(Unit unit) {
+ public void apply(CompilationUnit unit) {
unit.global.log("transforming " + unit);
unit.body = transform(unit.body);
}
@@ -111,12 +111,12 @@ public class GenTransformer {
// Public Methods
/** Transforms the given units. */
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
for (int i = 0; i < units.length; i++) apply(units[i]);
}
/** Transforms the given unit. */
- public void apply(Unit unit) {
+ public void apply(CompilationUnit unit) {
unit.global.log("transforming " + unit);
unit.body = transform(unit.body);
}
diff --git a/sources/scalac/ast/Traverser.java.tmpl b/sources/scalac/ast/Traverser.java.tmpl
index 1266e39f5c..a17768e2b4 100644
--- a/sources/scalac/ast/Traverser.java.tmpl
+++ b/sources/scalac/ast/Traverser.java.tmpl
@@ -8,7 +8,7 @@
package scalac.ast;
-import scalac.Unit;
+import scalac.CompilationUnit;
{#Imports#}
/** Class to traverse a tree without modifying it. */
@@ -17,11 +17,11 @@ public class Traverser {
//########################################################################
// Public Methods
- public void traverse(Unit[] units) {
+ public void traverse(CompilationUnit[] units) {
for (int i = 0; i < units.length; i++) traverse(units[i]);
}
- public void traverse(Unit unit) {
+ public void traverse(CompilationUnit unit) {
traverse(unit.body);
}
diff --git a/sources/scalac/ast/printer/TreePrinter.java b/sources/scalac/ast/printer/TreePrinter.java
index 53ce4bd3cb..ce6ae2bd18 100644
--- a/sources/scalac/ast/printer/TreePrinter.java
+++ b/sources/scalac/ast/printer/TreePrinter.java
@@ -9,7 +9,7 @@
package scalac.ast.printer;
import scalac.Global;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.ast.Tree;
/**
@@ -24,7 +24,7 @@ public interface TreePrinter {
public void flush();
public void print(Global global);
- public void print(Unit unit);
+ public void print(CompilationUnit unit);
public TreePrinter print(Tree tree);
public TreePrinter print(String str);
diff --git a/sources/scalac/atree/ATreeFromSTree.java b/sources/scalac/atree/ATreeFromSTree.java
index 5cd902c7dc..ba5cb03155 100644
--- a/sources/scalac/atree/ATreeFromSTree.java
+++ b/sources/scalac/atree/ATreeFromSTree.java
@@ -13,7 +13,7 @@ import java.util.ArrayList;
import java.util.Map;
import java.util.HashMap;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.ast.Tree;
import scalac.ast.Tree.Ident;
import scalac.ast.Tree.Template;
@@ -74,7 +74,7 @@ public class ATreeFromSTree {
// Public Methods - Translating units
/** Translates the unit's body and stores the result in it. */
- public void translate(Unit unit) {
+ public void translate(CompilationUnit unit) {
template(unit.repository = new ARepository(), unit.body);
}
diff --git a/sources/scalac/atree/ATreePrinter.java b/sources/scalac/atree/ATreePrinter.java
index f68df2e09f..44098d3332 100644
--- a/sources/scalac/atree/ATreePrinter.java
+++ b/sources/scalac/atree/ATreePrinter.java
@@ -12,7 +12,7 @@ import ch.epfl.lamp.util.CodePrinter;
import scalac.Global;
import scalac.Phase;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.symtab.Type;
import scalac.symtab.Symbol;
import scalac.symtab.SymbolTablePrinter;
@@ -247,13 +247,13 @@ public class ATreePrinter {
}
/** Prints the units. */
- public ATreePrinter printUnits(Unit[] units) {
+ public ATreePrinter printUnits(CompilationUnit[] units) {
for (int i = 0; i < units.length; i++) printUnit(units[i]);
return this;
}
/** Prints the unit. */
- public ATreePrinter printUnit(Unit unit) {
+ public ATreePrinter printUnit(CompilationUnit unit) {
println("// Scala source: " + unit.source);
return printRepository(unit.repository);
}
diff --git a/sources/scalac/backend/jvm/GenJVM.java b/sources/scalac/backend/jvm/GenJVM.java
index d71dd912bd..d9dc030646 100644
--- a/sources/scalac/backend/jvm/GenJVM.java
+++ b/sources/scalac/backend/jvm/GenJVM.java
@@ -115,7 +115,7 @@ class GenJVM {
/**
* Generate code for the given unit.
*/
- public void translate(Unit unit) {
+ public void translate(CompilationUnit unit) {
try {
for (int i = 0; i < unit.body.length; ++i)
gen(Context.EMPTY.withSourceFileName(unit.source.getFile().getName()),
diff --git a/sources/scalac/backend/jvm/GenJVMPhase.java b/sources/scalac/backend/jvm/GenJVMPhase.java
index 9fb1c72e89..eb02e0645c 100644
--- a/sources/scalac/backend/jvm/GenJVMPhase.java
+++ b/sources/scalac/backend/jvm/GenJVMPhase.java
@@ -11,7 +11,7 @@ package scalac.backend.jvm;
import scalac.Global;
import scalac.Phase;
import scalac.PhaseDescriptor;
-import scalac.Unit;
+import scalac.CompilationUnit;
/**
* Phase to generate Java bytecodes using the FJBG library.
@@ -41,7 +41,7 @@ public class GenJVMPhase extends Phase {
// Public Methods
/** Applies this phase to the given compilation units. */
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
for (int i = 0; i < units.length; i++) translator.translate(units[i]);
}
diff --git a/sources/scalac/backend/msil/GenMSIL.java b/sources/scalac/backend/msil/GenMSIL.java
index 867f175209..c1c890442a 100644
--- a/sources/scalac/backend/msil/GenMSIL.java
+++ b/sources/scalac/backend/msil/GenMSIL.java
@@ -9,7 +9,7 @@
package scalac.backend.msil;
import scalac.Global;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.util.Debug;
@@ -92,13 +92,13 @@ public final class GenMSIL {
}
// keeps track of the current compilation unit for better error reporting
- private Unit currUnit;
+ private CompilationUnit currUnit;
/**
* The main entry point into the code generator. Called from GenMSILPhase
* for every compilation unit.
*/
- public void apply(Unit unit) {
+ public void apply(CompilationUnit unit) {
currUnit = unit;
// try {
for (int i = 0; i < unit.body.length; i++) {
diff --git a/sources/scalac/backend/msil/GenMSILPhase.java b/sources/scalac/backend/msil/GenMSILPhase.java
index 86d0b63307..a12a0c2d52 100644
--- a/sources/scalac/backend/msil/GenMSILPhase.java
+++ b/sources/scalac/backend/msil/GenMSILPhase.java
@@ -11,7 +11,7 @@ package scalac.backend.msil;
import scalac.Global;
import scalac.Phase;
import scalac.PhaseDescriptor;
-import scalac.Unit;
+import scalac.CompilationUnit;
import java.util.HashMap;
@@ -45,7 +45,7 @@ public class GenMSILPhase extends Phase {
// Public Methods
/** Applies this phase to the given compilation units. */
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
tc.init();
tc.collectSymbols(units);
tc.initAssembly();
diff --git a/sources/scalac/backend/msil/TypeCreator.java b/sources/scalac/backend/msil/TypeCreator.java
index 1e8cd25384..35c01d4615 100644
--- a/sources/scalac/backend/msil/TypeCreator.java
+++ b/sources/scalac/backend/msil/TypeCreator.java
@@ -9,7 +9,7 @@
package scalac.backend.msil;
import scalac.Global;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.ApplicationError;
import scalac.ast.Tree;
import scalac.ast.Traverser;
@@ -442,7 +442,7 @@ final class TypeCreator {
return moreThanOneEntryPoint;
}
- private Unit entryPointUnit;
+ private CompilationUnit entryPointUnit;
private int entryPointPos;
@@ -450,7 +450,7 @@ final class TypeCreator {
* - collects all entry points
* - gives the name of the new assembly
*/
- public void collectSymbols(Unit[] units) {
+ public void collectSymbols(CompilationUnit[] units) {
types2create.clear();
entryPoint = null;
new CollectSymbols().traverse(units);
@@ -491,8 +491,8 @@ final class TypeCreator {
* in the program and all entry points.
*/
private final class CollectSymbols extends Traverser {
- private Unit currUnit;
- public void traverse(Unit unit) {
+ private CompilationUnit currUnit;
+ public void traverse(CompilationUnit unit) {
currUnit = unit;
if (entryPointUnit == null)
entryPointUnit = unit;
diff --git a/sources/scalac/checkers/TreeChecker.java b/sources/scalac/checkers/TreeChecker.java
index 3b140293a5..bc38e3eafb 100644
--- a/sources/scalac/checkers/TreeChecker.java
+++ b/sources/scalac/checkers/TreeChecker.java
@@ -15,7 +15,7 @@ import java.util.Stack;
import scala.tools.util.Position;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.ast.Tree;
import scalac.ast.Tree.AbsTypeDef;
import scalac.ast.Tree.Ident;
@@ -41,7 +41,7 @@ public class TreeChecker {
private final Definitions definitions;
/** The stack of current units */
- private final Stack/*<Unit>*/ units = new Stack();
+ private final Stack/*<CompilationUnit>*/ units = new Stack();
/** The stack of current classes */
private final Stack/*<Symbol>*/ classes = new Stack();
@@ -76,7 +76,7 @@ public class TreeChecker {
// Public Methods - Checking units
/** Checks the unit. Returns true. */
- public boolean check(Unit unit) {
+ public boolean check(CompilationUnit unit) {
pushUnit(unit);
template(unit.body);
popUnit();
@@ -507,8 +507,8 @@ public class TreeChecker {
// Private Methods - Managing current context
/** Returns the current unit. */
- private Unit currentUnit() {
- return units.size() > 0 ? (Unit)units.peek() : null;
+ private CompilationUnit currentUnit() {
+ return units.size() > 0 ? (CompilationUnit)units.peek() : null;
}
/** Returns the current class. */
@@ -527,7 +527,7 @@ public class TreeChecker {
}
/** Sets the current unit to the given one. */
- private void pushUnit(Unit unit) {
+ private void pushUnit(CompilationUnit unit) {
assert units.size() == 0: showPush(unit);
assert classes.size() == 0: showPush(unit);
assert members.size() == 0: showPush(unit);
diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java
index 899aee8749..6c5ef821d0 100644
--- a/sources/scalac/symtab/Symbol.java
+++ b/sources/scalac/symtab/Symbol.java
@@ -1227,6 +1227,7 @@ public abstract class Symbol implements Modifiers, Kinds {
private Type transformInfo(Phase phase, Type info) {
Global global = phase.global;
Phase current = global.currentPhase;
+ boolean keepInheritedOverloaded = current.id <= global.PHASE.REFCHECK.id();
switch (info) {
case ErrorType:
case NoType:
@@ -1237,7 +1238,8 @@ public abstract class Symbol implements Modifiers, Kinds {
boolean altChanged = false;
for (int i = 0; i < alts.length; i++) {
Type type = alts[i].info();
- if (alts[i].owner() == owner()) n++;
+ if (keepInheritedOverloaded ||
+ alts[i].owner() == owner()) n++;
if (alts[i].info() != alttypes[i]) altChanged = true;
}
Type result;
@@ -1246,7 +1248,8 @@ public abstract class Symbol implements Modifiers, Kinds {
Type[] types = new Type[n];
int j = 0;
for (int i = 0; i < alts.length; i++) {
- if (alts[i].owner() == owner()) {
+ if (keepInheritedOverloaded ||
+ alts[i].owner() == owner()) {
symbols[j] = alts[i];
types[j] = alts[i].info();
j++;
@@ -1663,24 +1666,21 @@ public abstract class Symbol implements Modifiers, Kinds {
}
public void addInheritedOverloaded(Type owntype) {
- if (owner().kind == CLASS && !isConstructor() && owner().lookup(name) == this) {
- // it's a class member which is not an overloaded alternative
- Symbol sym = Type.lookupNonPrivate(owner().parents(), name);
- if (sym.kind == VAL) {
- Type symtype = owner.thisType().memberType(sym);
- switch (symtype) {
- case OverloadedType(Symbol[] alts, Type[] alttypes):
- for (int i = 0; i < alts.length; i++)
- addInheritedOverloaded(owntype, alts[i], alttypes[i]);
- break;
- default:
- addInheritedOverloaded(owntype, sym, symtype);
- }
- }
- }
+ Symbol sym = Type.lookupNonPrivate(owner.parents(), name);
+ if (sym.kind == VAL) {
+ Type symtype = owner.thisType().memberType(sym);
+ switch (symtype) {
+ case OverloadedType(Symbol[] alts, Type[] alttypes):
+ for (int i = 0; i < alts.length; i++)
+ addInheritedOverloaded(owntype, alts[i], alttypes[i]);
+ break;
+ default:
+ addInheritedOverloaded(owntype, sym, symtype);
+ }
+ }
}
- private void addInheritedOverloaded(Type owntype, Symbol sym, Type symtype) {
+ public void addInheritedOverloaded(Type owntype, Symbol sym, Type symtype) {
if (!owntype.overrides(symtype)) {
if (Global.instance.debug) Global.instance.log(owner() + " inherits overloaded: " + sym + ":" + symtype + sym.locationString());//debug
owner().members().lookupEntry(name).setSymbol(overloadWith(sym));
diff --git a/sources/scalac/symtab/classfile/ClassfileParser.java b/sources/scalac/symtab/classfile/ClassfileParser.java
index 5220e7d69a..a3470f4964 100644
--- a/sources/scalac/symtab/classfile/ClassfileParser.java
+++ b/sources/scalac/symtab/classfile/ClassfileParser.java
@@ -144,7 +144,23 @@ public class ClassfileParser implements ClassfileConstants {
//System.out.println("module: " + m);
//System.out.println("modules class: " + m.type().symbol());
+ int savedFlags = c.flags;
+ c.flags |= Modifiers.INITIALIZED;
+ // hack to make memberType in addInheritedOverloaded work
+ addInheritedOverloaded();
+
+ //if (global.debug) {
+ // Symbol[] elems = c.members().elements();
+ // global.log(c + " defines: ");
+ // for (int i = 0; i < elems.length; i++) {
+ // global.log(elems[i] + ":" + elems[i].type());
+ // }
+ //}
+
+ c.flags = savedFlags;
+
// Add static members of superclass
+ // todo: remove
Symbol superclass = supertpe.symbol();
if (m.isJava() && superclass.isJava()) {
Symbol mclass = m.moduleClass();
@@ -172,6 +188,18 @@ public class ClassfileParser implements ClassfileConstants {
}
}
+ private void addInheritedOverloaded() {
+ Symbol[] elems = c.members().elements();
+ for (int i = 0; i < elems.length; i++)
+ addInheritedOverloaded(elems[i]);
+ }
+
+ private void addInheritedOverloaded(Symbol sym) {
+ if (sym.isMethod() && !sym.isConstructor()) {
+ sym.addInheritedOverloaded(sym.type());
+ }
+ }
+
/** convert Java modifiers into Scala flags
*/
public int transFlags(int flags) {
@@ -253,7 +281,6 @@ public class ClassfileParser implements ClassfileConstants {
symbol = owner.newTerm(Position.NOPOS, sflags, name);
}
setParamOwners(type, symbol);
- symbol.addInheritedOverloaded(type);
symbol.setInfo(type);
attrib.readAttributes(symbol, type, METH_ATTR);
if (name != CONSTR_N) {
diff --git a/sources/scalac/symtab/classfile/UnPickle.java b/sources/scalac/symtab/classfile/UnPickle.java
index 1c41932a6d..fe11fced85 100644
--- a/sources/scalac/symtab/classfile/UnPickle.java
+++ b/sources/scalac/symtab/classfile/UnPickle.java
@@ -307,7 +307,6 @@ public class UnPickle implements Kinds, Modifiers, EntryTags, TypeTags {
assert clasz == sym.moduleClass(): Debug.show(sym);
}
Type owntype = getType(inforef, sym);
- sym.addInheritedOverloaded(owntype);
sym.setInfo(owntype);
break;
diff --git a/sources/scalac/transformer/AddAccessorsPhase.java b/sources/scalac/transformer/AddAccessorsPhase.java
index c33c405c25..e1a4e4e278 100644
--- a/sources/scalac/transformer/AddAccessorsPhase.java
+++ b/sources/scalac/transformer/AddAccessorsPhase.java
@@ -15,7 +15,7 @@ import java.util.HashMap;
import scalac.Global;
import scalac.Phase;
import scalac.PhaseDescriptor;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.ast.Transformer;
import scalac.ast.Tree;
import scalac.ast.Tree.Template;
@@ -46,7 +46,7 @@ public class AddAccessorsPhase extends Phase {
// Public Methods
/** Applies this phase to the given compilation units. */
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
treeTransformer.apply(units);
}
diff --git a/sources/scalac/transformer/AddConstructorsPhase.java b/sources/scalac/transformer/AddConstructorsPhase.java
index 0e72320509..a60842da9f 100644
--- a/sources/scalac/transformer/AddConstructorsPhase.java
+++ b/sources/scalac/transformer/AddConstructorsPhase.java
@@ -14,7 +14,7 @@ import java.util.HashMap;
import scalac.Global;
import scalac.Phase;
import scalac.PhaseDescriptor;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.symtab.Symbol;
import scalac.symtab.Type;
import scalac.util.Debug;
@@ -55,7 +55,7 @@ public class AddConstructorsPhase extends Phase {
}
/** Applies this phase to the given compilation units. */
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
for (int i = 0; i < units.length; i++)
new AddConstructors(global, constructors).apply(units[i]);
}
diff --git a/sources/scalac/transformer/AddInterfacesPhase.java b/sources/scalac/transformer/AddInterfacesPhase.java
index 396d3cf238..9b7ebf6675 100644
--- a/sources/scalac/transformer/AddInterfacesPhase.java
+++ b/sources/scalac/transformer/AddInterfacesPhase.java
@@ -25,7 +25,7 @@ public class AddInterfacesPhase extends Phase {
}
/** Applies this phase to the given compilation units. */
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
for (int i = 0; i < units.length; i++)
new AddInterfaces(global, this).apply(units[i]);
}
diff --git a/sources/scalac/transformer/Erasure.java b/sources/scalac/transformer/Erasure.java
index e78de5d343..4189834d1b 100644
--- a/sources/scalac/transformer/Erasure.java
+++ b/sources/scalac/transformer/Erasure.java
@@ -17,7 +17,7 @@ import java.util.HashSet;
import scalac.Global;
import scalac.Phase;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.ast.Tree;
import scalac.ast.Tree.Ident;
import scalac.ast.Tree.Template;
@@ -82,7 +82,7 @@ public class Erasure extends GenTransformer implements Modifiers {
private final Primitives primitives;
/** The current unit */
- private Unit unit;
+ private CompilationUnit unit;
private final boolean forMSIL;
@@ -101,7 +101,7 @@ public class Erasure extends GenTransformer implements Modifiers {
// Public Methods
/** Transforms the given unit. */
- public void apply(Unit unit) {
+ public void apply(CompilationUnit unit) {
this.unit = unit;
super.apply(unit);
}
diff --git a/sources/scalac/transformer/ErasurePhase.java b/sources/scalac/transformer/ErasurePhase.java
index 5fccaf4659..0f114aa771 100644
--- a/sources/scalac/transformer/ErasurePhase.java
+++ b/sources/scalac/transformer/ErasurePhase.java
@@ -12,7 +12,7 @@ package scalac.transformer;
import scalac.Global;
import scalac.Phase;
import scalac.PhaseDescriptor;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.backend.Primitive;
import scalac.backend.Primitives;
import scalac.checkers.Checker;
@@ -48,7 +48,7 @@ public class ErasurePhase extends Phase {
//########################################################################
// Public Methods
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
erasure.apply(units);
}
diff --git a/sources/scalac/transformer/ExpandMixinsPhase.java b/sources/scalac/transformer/ExpandMixinsPhase.java
index 410a19f56a..e43ed7b975 100644
--- a/sources/scalac/transformer/ExpandMixinsPhase.java
+++ b/sources/scalac/transformer/ExpandMixinsPhase.java
@@ -20,7 +20,7 @@ import java.util.LinkedList;
import scalac.Global;
import scalac.Phase;
import scalac.PhaseDescriptor;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.ast.Tree;
import scalac.ast.Tree.Template;
import scalac.ast.TreeGen;
@@ -93,7 +93,7 @@ public class ExpandMixinsPhase extends Phase {
// Public Methods
/** Applies this phase to the given compilation units. */
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
collector.traverse(units);
expander.apply(units);
}
@@ -146,7 +146,7 @@ public class ExpandMixinsPhase extends Phase {
public TreeExpander(Global global) {
super(global);
}
- public void apply(Unit unit) {
+ public void apply(CompilationUnit unit) {
if (unit.mixinOnly) {
assert Debug.log("removing unit " + unit);
unit.body = Tree.EMPTY_ARRAY;
diff --git a/sources/scalac/transformer/ExplicitOuterClassesPhase.java b/sources/scalac/transformer/ExplicitOuterClassesPhase.java
index 4f0ed688f5..c79ff1ae29 100644
--- a/sources/scalac/transformer/ExplicitOuterClassesPhase.java
+++ b/sources/scalac/transformer/ExplicitOuterClassesPhase.java
@@ -15,7 +15,7 @@ import java.util.Iterator;
import scalac.Global;
import scalac.Phase;
import scalac.PhaseDescriptor;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.ast.GenTransformer;
import scalac.ast.Tree;
import scalac.ast.Tree.Ident;
@@ -69,7 +69,7 @@ public class ExplicitOuterClassesPhase extends Phase {
// Public Methods
/** Applies this phase to the given compilation units. */
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
treeTransformer.apply(units);
}
diff --git a/sources/scalac/transformer/ICodePhase.java b/sources/scalac/transformer/ICodePhase.java
index d47e518374..cc1e065389 100644
--- a/sources/scalac/transformer/ICodePhase.java
+++ b/sources/scalac/transformer/ICodePhase.java
@@ -11,7 +11,7 @@ package scalac.transformer;
import scalac.Global;
import scalac.Phase;
import scalac.PhaseDescriptor;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.checkers.TreeChecker;
import scalac.symtab.Definitions;
@@ -46,7 +46,7 @@ public class ICodePhase extends Phase {
// Public Methods
/** Applies this phase to the given compilation units. */
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
// This java version doesn't make anything
}
diff --git a/sources/scalac/transformer/LambdaLift.java b/sources/scalac/transformer/LambdaLift.java
index ea4080a0ef..f1f0949146 100644
--- a/sources/scalac/transformer/LambdaLift.java
+++ b/sources/scalac/transformer/LambdaLift.java
@@ -38,7 +38,7 @@ public class LambdaLift extends OwnerTransformer
final Definitions definitions;
final FreeVars free;
final LambdaLiftPhase descr;
- private Unit unit;
+ private CompilationUnit unit;
public LambdaLift(Global global, LambdaLiftPhase descr) {
super(global);
@@ -48,7 +48,7 @@ public class LambdaLift extends OwnerTransformer
this.descr = descr;
}
- public void apply(Unit unit) {
+ public void apply(CompilationUnit unit) {
this.unit = unit;
global.log(unit.source.toString());
free.initialize(unit);
@@ -108,7 +108,7 @@ public class LambdaLift extends OwnerTransformer
*/
static class FreeVars extends OwnerTransformer {
- private Unit unit;
+ private CompilationUnit unit;
public FreeVars(Global global) {
super(global);
@@ -305,7 +305,7 @@ public class LambdaLift extends OwnerTransformer
/** Compute a mapping from symbols to their free variables
* in hashtable `fvs'. Also rename all variables that need it.
*/
- public void initialize(Unit unit) {
+ public void initialize(CompilationUnit unit) {
this.unit = unit;
fvs = new HashMap();
ftvs = new HashMap();
diff --git a/sources/scalac/transformer/LambdaLiftPhase.java b/sources/scalac/transformer/LambdaLiftPhase.java
index a60285dd99..01ee98bbda 100644
--- a/sources/scalac/transformer/LambdaLiftPhase.java
+++ b/sources/scalac/transformer/LambdaLiftPhase.java
@@ -23,7 +23,7 @@ public class LambdaLiftPhase extends Phase implements Kinds, Modifiers {
}
/** Applies this phase to the given compilation units. */
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
for (int i = 0; i < units.length; i++)
new LambdaLift(global, this).apply(units[i]);
}
diff --git a/sources/scalac/transformer/MakeBoxingExplicitPhase.java b/sources/scalac/transformer/MakeBoxingExplicitPhase.java
index 4639dd65ea..e4d6f956b1 100644
--- a/sources/scalac/transformer/MakeBoxingExplicitPhase.java
+++ b/sources/scalac/transformer/MakeBoxingExplicitPhase.java
@@ -11,7 +11,7 @@ package scalac.transformer;
import scalac.Global;
import scalac.Phase;
import scalac.PhaseDescriptor;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.checkers.TreeChecker;
import scalac.symtab.Definitions;
@@ -41,7 +41,7 @@ public class MakeBoxingExplicitPhase extends Phase {
// Public Methods
/** Applies this phase to the given compilation units. */
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
for (int i = 0; i < units.length; i++) {
assert checker.check(units[i]);
new scalac.atree.ATreeFromSTree(global.definitions)
diff --git a/sources/scalac/transformer/OwnerTransformer.java b/sources/scalac/transformer/OwnerTransformer.java
index 7a6663f613..e8f0355ffb 100644
--- a/sources/scalac/transformer/OwnerTransformer.java
+++ b/sources/scalac/transformer/OwnerTransformer.java
@@ -30,7 +30,7 @@ public class OwnerTransformer extends Transformer {
super(global);
}
- public void apply(Unit unit) {
+ public void apply(CompilationUnit unit) {
currentOwner = global.definitions.ROOT_CLASS;
unit.body = transform(unit.body);
}
diff --git a/sources/scalac/transformer/TailCallPhase.java b/sources/scalac/transformer/TailCallPhase.java
index 57857bc3c4..667e906112 100644
--- a/sources/scalac/transformer/TailCallPhase.java
+++ b/sources/scalac/transformer/TailCallPhase.java
@@ -11,7 +11,7 @@ package scalac.transformer;
import scalac.Global;
import scalac.Phase;
import scalac.PhaseDescriptor;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.ast.Tree;
import scalac.ast.GenTransformer;
import scalac.symtab.Symbol;
@@ -61,7 +61,7 @@ public class TailCallPhase extends Phase {
// Public Methods
/** Applies this phase to the given compilation units. */
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
treeTransformer.apply(units);
}
diff --git a/sources/scalac/transformer/TypesAsValuesPhase.java b/sources/scalac/transformer/TypesAsValuesPhase.java
index 5f672841f2..d3147ad981 100644
--- a/sources/scalac/transformer/TypesAsValuesPhase.java
+++ b/sources/scalac/transformer/TypesAsValuesPhase.java
@@ -15,7 +15,7 @@ import java.util.Iterator;
import scalac.Global;
import scalac.Phase;
import scalac.PhaseDescriptor;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.symtab.Definitions;
import scalac.symtab.Scope;
import scalac.symtab.Symbol;
@@ -194,7 +194,7 @@ public class TypesAsValuesPhase extends Phase {
throw new Error(); // TODO
}
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
transformer.apply(units);
}
diff --git a/sources/scalac/transformer/UnCurry.java b/sources/scalac/transformer/UnCurry.java
index 9eadc4d85f..cf2cc46afc 100644
--- a/sources/scalac/transformer/UnCurry.java
+++ b/sources/scalac/transformer/UnCurry.java
@@ -35,14 +35,14 @@ public class UnCurry extends OwnerTransformer
implements Modifiers {
UnCurryPhase descr;
- Unit unit;
+ CompilationUnit unit;
public UnCurry(Global global, UnCurryPhase descr) {
super(global);
this.descr = descr;
}
- public void apply(Unit unit) {
+ public void apply(CompilationUnit unit) {
this.unit = unit;
super.apply(unit);
}
diff --git a/sources/scalac/transformer/UnCurryPhase.java b/sources/scalac/transformer/UnCurryPhase.java
index 79b96f0094..44988064de 100644
--- a/sources/scalac/transformer/UnCurryPhase.java
+++ b/sources/scalac/transformer/UnCurryPhase.java
@@ -21,7 +21,7 @@ public class UnCurryPhase extends Phase implements Modifiers {
}
/** Applies this phase to the given compilation units. */
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
for (int i = 0; i < units.length; i++)
new UnCurry(global, this).apply(units[i]);
}
diff --git a/sources/scalac/transformer/matching/AlgebraicMatcher.java b/sources/scalac/transformer/matching/AlgebraicMatcher.java
index 044767558c..957d2d3933 100644
--- a/sources/scalac/transformer/matching/AlgebraicMatcher.java
+++ b/sources/scalac/transformer/matching/AlgebraicMatcher.java
@@ -33,7 +33,7 @@ public class AlgebraicMatcher extends PatternMatcher {
/** constructor
*/
- public AlgebraicMatcher( Unit unit ) {
+ public AlgebraicMatcher( CompilationUnit unit ) {
super( unit );
this.delegateSequenceMatching = true;
this.optimize = false;
diff --git a/sources/scalac/transformer/matching/BerrySethi.java b/sources/scalac/transformer/matching/BerrySethi.java
index 9e9186e1f8..e56fc548c3 100644
--- a/sources/scalac/transformer/matching/BerrySethi.java
+++ b/sources/scalac/transformer/matching/BerrySethi.java
@@ -2,7 +2,7 @@
package scalac.transformer.matching ;
-import scalac.Unit ;
+import scalac.CompilationUnit ;
import scalac.ApplicationError ;
import scalac.ast.Tree ;
import scalac.ast.TreeInfo ;
@@ -20,9 +20,9 @@ import java.util.* ;
class BerrySethi {
- Unit unit;
+ CompilationUnit unit;
- public BerrySethi(Unit unit) {
+ public BerrySethi(CompilationUnit unit) {
this.unit = unit;
}
diff --git a/sources/scalac/transformer/matching/BindingBerrySethi.java b/sources/scalac/transformer/matching/BindingBerrySethi.java
index e68bef1eaf..69383fcbfa 100644
--- a/sources/scalac/transformer/matching/BindingBerrySethi.java
+++ b/sources/scalac/transformer/matching/BindingBerrySethi.java
@@ -1,6 +1,6 @@
package scalac.transformer.matching ;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.Global ;
import scalac.ApplicationError ;
import scalac.ast.Tree ;
@@ -20,7 +20,7 @@ import java.util.* ;
public class BindingBerrySethi extends BerrySethi {
- public BindingBerrySethi(Unit unit) {
+ public BindingBerrySethi(CompilationUnit unit) {
super(unit);
}
diff --git a/sources/scalac/transformer/matching/CaseEnv.java b/sources/scalac/transformer/matching/CaseEnv.java
index cfeb1f9b74..cc59ec052b 100644
--- a/sources/scalac/transformer/matching/CaseEnv.java
+++ b/sources/scalac/transformer/matching/CaseEnv.java
@@ -33,7 +33,7 @@ class CaseEnv {
/** constructor
*/
- CaseEnv( Symbol owner, Unit unit ) {
+ CaseEnv( Symbol owner, CompilationUnit unit ) {
this.owner = owner;
this.defs = unit.global.definitions;
this.gen = unit.global.treeGen;
diff --git a/sources/scalac/transformer/matching/CodeFactory.java b/sources/scalac/transformer/matching/CodeFactory.java
index 0f17b5d2b4..a74d2e50d7 100644
--- a/sources/scalac/transformer/matching/CodeFactory.java
+++ b/sources/scalac/transformer/matching/CodeFactory.java
@@ -21,7 +21,7 @@ class CodeFactory extends PatternTool {
public int pos = Position.FIRSTPOS ;
- public CodeFactory( Unit unit, int pos ) {
+ public CodeFactory( CompilationUnit unit, int pos ) {
super( unit );
this.pos = pos;
}
diff --git a/sources/scalac/transformer/matching/PatternMatcher.java b/sources/scalac/transformer/matching/PatternMatcher.java
index f5a0eda18f..4dd59ea4ea 100644
--- a/sources/scalac/transformer/matching/PatternMatcher.java
+++ b/sources/scalac/transformer/matching/PatternMatcher.java
@@ -50,7 +50,7 @@ public class PatternMatcher extends PatternTool {
/** constructor
*/
- public PatternMatcher(Unit unit, Tree selector,
+ public PatternMatcher(CompilationUnit unit, Tree selector,
Symbol owner, Type resultType) {
super(unit);
initialize(selector, owner, resultType, true);
@@ -58,7 +58,7 @@ public class PatternMatcher extends PatternTool {
/** constructor, used in subclass AlgebraicMatcher
*/
- protected PatternMatcher(Unit unit) {
+ protected PatternMatcher(CompilationUnit unit) {
super(unit);
}
diff --git a/sources/scalac/transformer/matching/PatternNodeCreator.java b/sources/scalac/transformer/matching/PatternNodeCreator.java
index 7d69c8f3e6..a1e6b27da0 100644
--- a/sources/scalac/transformer/matching/PatternNodeCreator.java
+++ b/sources/scalac/transformer/matching/PatternNodeCreator.java
@@ -21,7 +21,7 @@ public class PatternNodeCreator extends PatternTool {
/** the owner of the variable symbols that might be created */
Symbol owner;
- public PatternNodeCreator(Unit unit, Symbol owner) {
+ public PatternNodeCreator(CompilationUnit unit, Symbol owner) {
super(unit);
assert owner != null;
this.owner = owner;
diff --git a/sources/scalac/transformer/matching/PatternTool.java b/sources/scalac/transformer/matching/PatternTool.java
index 91772a0332..8673e040dc 100644
--- a/sources/scalac/transformer/matching/PatternTool.java
+++ b/sources/scalac/transformer/matching/PatternTool.java
@@ -9,7 +9,7 @@
package scalac.transformer.matching;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.ast.TreeGen;
import scalac.util.*;
import scalac.symtab.*;
@@ -23,7 +23,7 @@ abstract class PatternTool {
/** the current compilation unit
*/
- final Unit unit;
+ final CompilationUnit unit;
/** the global fresh name creator
*/
@@ -38,7 +38,7 @@ abstract class PatternTool {
final TreeGen gen;
// constructor
- public PatternTool( Unit unit ) {
+ public PatternTool( CompilationUnit unit ) {
this.unit = unit;
this.fresh = unit.fresh;
this.gen = unit.global.treeGen;
diff --git a/sources/scalac/transformer/matching/RightTracerInScala.java b/sources/scalac/transformer/matching/RightTracerInScala.java
index b7ac716183..0a8ea356ca 100644
--- a/sources/scalac/transformer/matching/RightTracerInScala.java
+++ b/sources/scalac/transformer/matching/RightTracerInScala.java
@@ -425,7 +425,7 @@ System.out.println("RightTracerInScala - the seqVars"+seqVars);
/* returns statements that do the work of the right-transducer
*/
- Tree getStms( Tree trace, Unit unit, Tree body ) {
+ Tree getStms( Tree trace, CompilationUnit unit, Tree body ) {
TreeList stms = new TreeList();
Tree loopbody = code_body_NEW();
diff --git a/sources/scalac/transformer/matching/SequenceMatcher.java b/sources/scalac/transformer/matching/SequenceMatcher.java
index fb8dfd8027..682320dce3 100644
--- a/sources/scalac/transformer/matching/SequenceMatcher.java
+++ b/sources/scalac/transformer/matching/SequenceMatcher.java
@@ -154,7 +154,7 @@ public class SequenceMatcher extends PatternTool {
/** constructor, invoked by AlgebraicMatcher
*/
- SequenceMatcher( Unit unit ) {
+ SequenceMatcher( CompilationUnit unit ) {
super( unit );
}
} // class SequenceMatcher
diff --git a/sources/scalac/typechecker/AnalyzerPhase.java b/sources/scalac/typechecker/AnalyzerPhase.java
index 1c972e6cab..7104adfd03 100644
--- a/sources/scalac/typechecker/AnalyzerPhase.java
+++ b/sources/scalac/typechecker/AnalyzerPhase.java
@@ -11,7 +11,7 @@ package scalac.typechecker;
import scalac.Global;
import scalac.Phase;
import scalac.PhaseDescriptor;
-import scalac.Unit;
+import scalac.CompilationUnit;
import scalac.ast.TreeGen;
import scalac.symtab.Definitions;
import scalac.symtab.Symbol;
@@ -29,6 +29,6 @@ public abstract class AnalyzerPhase extends Phase {
public abstract void addConsoleImport(Symbol module);
- public abstract void lateEnter(Unit unit);
+ public abstract void lateEnter(CompilationUnit unit);
}
diff --git a/sources/scalac/typechecker/RefCheck.java b/sources/scalac/typechecker/RefCheck.java
index 4a8f1d78e4..797d38fc08 100644
--- a/sources/scalac/typechecker/RefCheck.java
+++ b/sources/scalac/typechecker/RefCheck.java
@@ -43,12 +43,12 @@ public class RefCheck extends Transformer implements Modifiers, Kinds {
super(global);
}
- private Unit unit;
+ private CompilationUnit unit;
private Definitions defs = global.definitions;
private Infer infer = global.newInfer();
private Symbol enclClass;
- public void apply(Unit unit) {
+ public void apply(CompilationUnit unit) {
this.unit = unit;
level = 0;
scopes[0] = new Scope();
@@ -120,8 +120,8 @@ public class RefCheck extends Transformer implements Modifiers, Kinds {
switch (member1.info()) {
case OverloadedType(Symbol[] alts, _):
for (int i = 0; i < alts.length; i++) {
- if (normalizedInfo(self, alts[i]).isSubType(template) &&
- alts[i].owner() == member1.owner()) {
+ if (normalizedInfo(self, alts[i]).isSubType(template) /*&&
+ alts[i].owner() == member1.owner()*/) {
if (member == other)
member = alts[i];
else
@@ -159,7 +159,7 @@ public class RefCheck extends Transformer implements Modifiers, Kinds {
}
abstractClassError(
clazz,
- member.toString() + member.type() + member.locationString() + " is not defined" +
+ member.toString() + member.locationString() + " is not defined" +
(((member.flags & MUTABLE) == 0) ? ""
: "\n(Note that variables need to be initialized to be defined)"));
} else if (member.isAbstractOverride()) {
diff --git a/sources/scalac/typechecker/RefCheckPhase.java b/sources/scalac/typechecker/RefCheckPhase.java
index ca73d37d6d..3f783650f4 100644
--- a/sources/scalac/typechecker/RefCheckPhase.java
+++ b/sources/scalac/typechecker/RefCheckPhase.java
@@ -21,7 +21,7 @@ public class RefCheckPhase extends Phase {
}
/** Applies this phase to the given compilation units. */
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
for (int i = 0; i < units.length; i++)
new RefCheck(global).apply(units[i]);
}
diff --git a/sources/scalac/util/EmptyPhase.java b/sources/scalac/util/EmptyPhase.java
index 84ffe81adf..003983f4e0 100644
--- a/sources/scalac/util/EmptyPhase.java
+++ b/sources/scalac/util/EmptyPhase.java
@@ -11,7 +11,7 @@ package scalac.util;
import scalac.Global;
import scalac.Phase;
import scalac.PhaseDescriptor;
-import scalac.Unit;
+import scalac.CompilationUnit;
/** This class implements a phase that does nothing. */
public class EmptyPhase extends Phase {
@@ -28,7 +28,7 @@ public class EmptyPhase extends Phase {
// Public Methods
/** Applies this phase to the given compilation units. */
- public void apply(Unit[] units) {
+ public void apply(CompilationUnit[] units) {
// do nothing
}
diff --git a/test/files/run/imports.scala b/test/files/run/imports.scala
index 2d13463336..94b10f5b51 100644
--- a/test/files/run/imports.scala
+++ b/test/files/run/imports.scala
@@ -22,10 +22,11 @@ import checker.check;
//############################################################################
-import o_ico.v_ico;
+//import o_ico.v_ico;
class C_ico() {
o_ico.v_ico = this;
+ import o_ico.v_ico;
override def toString(): String = "C_ico";
def method: C_ico = v_ico;
val field: C_ico = v_ico;
@@ -43,13 +44,14 @@ object o_ico {
//############################################################################
-import o_ioc.v_ioc;
-
object o_ioc {
var v_ioc: C_ioc = null;
new C_ioc();
}
+import o_ioc.v_ioc;
+
+
class C_ioc() {
o_ioc.v_ioc = this;
override def toString(): String = "C_ioc";