diff options
author | Martin Odersky <odersky@gmail.com> | 2003-11-12 18:01:30 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2003-11-12 18:01:30 +0000 |
commit | f5437e9a8bb543cf57b295739dd3abdebb7be651 (patch) | |
tree | 82d04d9b9de6e798631dfbc12fa62f0f8be3dc02 /sources/scalac | |
parent | f8ed082d80fb662f96d9a95dad3d7481b7e88818 (diff) | |
download | scala-f5437e9a8bb543cf57b295739dd3abdebb7be651.tar.gz scala-f5437e9a8bb543cf57b295739dd3abdebb7be651.tar.bz2 scala-f5437e9a8bb543cf57b295739dd3abdebb7be651.zip |
*** empty log message ***
Diffstat (limited to 'sources/scalac')
-rw-r--r-- | sources/scalac/CompilerPhases.java | 50 | ||||
-rw-r--r-- | sources/scalac/Global.java | 13 | ||||
-rw-r--r-- | sources/scalac/symtab/Symbol.java | 7 | ||||
-rw-r--r-- | sources/scalac/symtab/classfile/Pickle.java | 6 | ||||
-rw-r--r-- | sources/scalac/symtab/classfile/UnPickle.java | 11 | ||||
-rw-r--r-- | sources/scalac/typechecker/Analyzer.java | 4 | ||||
-rw-r--r-- | sources/scalac/typechecker/ConstantFolder.java | 6 |
7 files changed, 66 insertions, 31 deletions
diff --git a/sources/scalac/CompilerPhases.java b/sources/scalac/CompilerPhases.java index 93007eda28..e0329bc7e6 100644 --- a/sources/scalac/CompilerPhases.java +++ b/sources/scalac/CompilerPhases.java @@ -46,6 +46,24 @@ public class CompilerPhases { /** The list containing the active phases */ private final List phases; + /** Phase names, can be overridden to install . + */ + protected Class PARSER_PHASE() { return scalac.ast.parser.ParserPhase.class; } + protected Class ANALYZER_PHASE() { return scalac.typechecker.AnalyzerPhase.class; } + protected Class REFCHECK_PHASE() { return scalac.typechecker.RefCheckPhase.class; } + protected Class UNCURRY_PHASE() { return scalac.transformer.UnCurryPhase.class; } + protected Class TRANSMATCH_PHASE() { return scalac.transformer.TransMatchPhase.class; } + protected Class LAMBDALIFT_PHASE() { return scalac.transformer.LambdaLiftPhase.class; } + protected Class EXPLICITOUTER_PHASE() { return scalac.transformer.ExplicitOuterClassesPhase.class; } + protected Class ADDACCESSORS_PHASE() { return scalac.transformer.AddAccessorsPhase.class; } + protected Class TAILCALL_PHASE() { return scalac.transformer.TailCallPhase.class; } + protected Class ADDINTERFACES_PHASE() { return scalac.transformer.AddInterfacesPhase.class; } + protected Class EXPANDMIXIN_PHASE() { return scalac.transformer.ExpandMixinsPhase.class; } + protected Class ADDCONSTRUCTORS_PHASE() { return scalac.transformer.AddConstructorsPhase.class; } + protected Class ERASURE_PHASE() { return scalac.transformer.ErasurePhase.class; } + protected Class GENMSIL_PHASE() { return scalac.backend.msil.GenMSILPhase.class; } + protected Class GENJVM_PHASE() { return scalac.backend.jvm.GenJVMPhase.class; } + //######################################################################## // Public Constructors @@ -57,27 +75,27 @@ public class CompilerPhases { "initial", "initializing compiler", "initializing compiler", - scalac.util.EmptyPhase.class), + scalac.util.EmptyPhase.class), this.PARSER = new PhaseDescriptor( "parse", "parse source files", "parsed", - scalac.ast.parser.ParserPhase.class), + PARSER_PHASE()), this.ANALYZER = new PhaseDescriptor( "analyze", "name and type analysis", "type checking", - scalac.typechecker.AnalyzerPhase.class), + ANALYZER_PHASE()), this.REFCHECK = new PhaseDescriptor( "refcheck", "reference checking", "reference checking", - scalac.typechecker.RefCheckPhase.class), + REFCHECK_PHASE()), this.UNCURRY = new PhaseDescriptor( "uncurry", "uncurry function types and applications", "uncurried", - scalac.transformer.UnCurryPhase.class), + UNCURRY_PHASE()), // this.OPTIMIZE = new PhaseDescriptor( // "optimize", // "tree-optimizer", @@ -87,57 +105,57 @@ public class CompilerPhases { "transmatch", "translate match expressions", "translated pattern matching", - scalac.transformer.TransMatchPhase.class), + TRANSMATCH_PHASE()), this.LAMBDALIFT = new PhaseDescriptor( "lambdalift", "lambda lifter", "lambda lifting", - scalac.transformer.LambdaLiftPhase.class), + LAMBDALIFT_PHASE()), this.EXPLICITOUTER = new PhaseDescriptor( "explicitouterclasses", "make links from inner classes to enclosing one explicit", "made outer links explicit", - scalac.transformer.ExplicitOuterClassesPhase.class), + EXPLICITOUTER_PHASE()), this.ADDACCESSORS = new PhaseDescriptor( "addaccessors", "add accessors for constructor arguments", "added accessors", - scalac.transformer.AddAccessorsPhase.class), + ADDACCESSORS_PHASE()), this.TAILCALL = new PhaseDescriptor( "tailcall", "add tail-calls", "added tail-calls", - scalac.transformer.TailCallPhase.class), + TAILCALL_PHASE()), this.ADDINTERFACES = new PhaseDescriptor( "addinterfaces", "add one interface per class", "added interfaces", - scalac.transformer.AddInterfacesPhase.class), + ADDINTERFACES_PHASE()), this.EXPANDMIXIN = new PhaseDescriptor( "expandmixins", "expand mixins by code copying", "expanded mixins", - scalac.transformer.ExpandMixinsPhase.class), + EXPANDMIXIN_PHASE()), this.ADDCONSTRUCTORS = new PhaseDescriptor( "addconstructors", "add explicit constructor for each class", "added constructors", - scalac.transformer.AddConstructorsPhase.class), + ADDCONSTRUCTORS_PHASE()), this.ERASURE = new PhaseDescriptor( "erasure", "type eraser", "erased types", - scalac.transformer.ErasurePhase.class), + ERASURE_PHASE()), this.GENMSIL = new PhaseDescriptor( "genmsil", "generate MSIL code", "generated MSIL code", - scalac.backend.msil.GenMSILPhase.class), + GENMSIL_PHASE()), this.GENJVM = new PhaseDescriptor( "genjvm", "generate JVM bytecodes", "generated JVM code", - scalac.backend.jvm.GenJVMPhase.class), + GENJVM_PHASE()), this.TERMINAL = new PhaseDescriptor( "terminal", "compilation terminated", diff --git a/sources/scalac/Global.java b/sources/scalac/Global.java index 9bf7dc9492..eeba341b3f 100644 --- a/sources/scalac/Global.java +++ b/sources/scalac/Global.java @@ -159,6 +159,15 @@ public class Global { this(args, false); } + /** hooks for installing printers + */ + protected TreePrinter newTextTreePrinter(OutputStream printStream) { + return new TextTreePrinter(printStream); + } + protected TreePrinter newHTMLTreePrinter(OutputStream printStream) { + return new HTMLTreePrinter(printStream); + } + /** * Creates an instance variable. * @@ -199,9 +208,9 @@ public class Global { } String printerName = args.printer.value.intern(); if (printerName == PRINTER_TEXT) - this.printer = new TextTreePrinter(printStream); + this.printer = newTextTreePrinter(printStream); else - this.printer = new HTMLTreePrinter(printStream); + this.printer = newHTMLTreePrinter(printStream); this.debugPrinter = new TextTreePrinter(System.err, true); this.freshNameCreator = new FreshNameCreator(); this.make = new DefaultTreeFactory(); diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java index 6d441e5f29..fa2bdbe0ca 100644 --- a/sources/scalac/symtab/Symbol.java +++ b/sources/scalac/symtab/Symbol.java @@ -1278,6 +1278,11 @@ public class TermSymbol extends Symbol { return sym; } + public TermSymbol makeConstructor(ClassSymbol clazz) { + this.clazz = clazz; + return this; + } + public static TermSymbol newJavaConstructor(Symbol clazz) { return newConstructor(clazz, clazz.flags & (ACCESSFLAGS | JAVA)); } @@ -1840,7 +1845,7 @@ public class ClassSymbol extends TypeSymbol { } for (int i = 0; i < index; i++) sym = it.next(); - System.out.println("field accessor = " + sym); + //System.out.println("field accessor = " + sym);//DEBUG } assert sym != null : this; return sym; diff --git a/sources/scalac/symtab/classfile/Pickle.java b/sources/scalac/symtab/classfile/Pickle.java index 871a417509..3a3747822b 100644 --- a/sources/scalac/symtab/classfile/Pickle.java +++ b/sources/scalac/symtab/classfile/Pickle.java @@ -133,7 +133,8 @@ public class Pickle implements Kinds, Modifiers, EntryTags { putSymbol(it.next()); break; case VAL: - if (sym.isPrimaryConstructor()) + if (sym.isConstructor() && + sym == sym.constructorClass().allConstructors()) putSymbol(sym.constructorClass()); else if (sym.isModule()) putSymbol(sym.moduleClass()); @@ -341,7 +342,8 @@ public class Pickle implements Kinds, Modifiers, EntryTags { writeRef(sym.allConstructors()); break; case VAL: - if (sym.isPrimaryConstructor()) + if (sym.isConstructor() && + sym == sym.constructorClass().allConstructors()) writeRef(sym.constructorClass()); else if (sym.isModule()) writeRef(sym.moduleClass()); diff --git a/sources/scalac/symtab/classfile/UnPickle.java b/sources/scalac/symtab/classfile/UnPickle.java index e4413be233..905e5a8b22 100644 --- a/sources/scalac/symtab/classfile/UnPickle.java +++ b/sources/scalac/symtab/classfile/UnPickle.java @@ -246,18 +246,17 @@ public class UnPickle implements Kinds, Modifiers, EntryTags, TypeTags { sym.setFirstInfo(getType(inforef)); sym.setTypeOfThis(readTypeRef()); Symbol constr = readSymbolRef(); - if (constr != sym.primaryConstructor()) { - assert constr.type() instanceof Type.OverloadedType - : sym + " " + constr + ":" + constr.type(); - constr.copyTo(sym.allConstructors()); - } + assert constr == sym.allConstructors(); + Symbol[] alts = constr.alternativeSymbols(); + for (int i = 0; i < alts.length; i++) + ((TermSymbol)alts[i]).makeConstructor((ClassSymbol)sym); break; case VALsym: if (bp < end) { Symbol tsym = readSymbolRef(); if (name == Names.CONSTRUCTOR) { - entries[n] = sym = tsym.primaryConstructor(); + entries[n] = sym = tsym.allConstructors(); sym.flags = flags; } else { assert (flags & MODUL) != 0 : name; diff --git a/sources/scalac/typechecker/Analyzer.java b/sources/scalac/typechecker/Analyzer.java index 64181df003..eff8af583f 100644 --- a/sources/scalac/typechecker/Analyzer.java +++ b/sources/scalac/typechecker/Analyzer.java @@ -2101,7 +2101,9 @@ public class Analyzer extends Transformer implements Modifiers, Kinds { return copy.Assign(tree, lhs1, rhs1) .setType(definitions.UNIT_TYPE()); } else { - return error(tree.pos, "assignment to non-variable"); + if (lhs1.type != Type.ErrorType) + error(tree.pos, "assignment to non-variable "); + return errorTree(tree.pos); } case If(Tree cond, Tree thenp, Tree elsep): diff --git a/sources/scalac/typechecker/ConstantFolder.java b/sources/scalac/typechecker/ConstantFolder.java index 9131609c7d..125253a1b0 100644 --- a/sources/scalac/typechecker/ConstantFolder.java +++ b/sources/scalac/typechecker/ConstantFolder.java @@ -177,7 +177,7 @@ class ConstantFolder implements /*imports*/ TypeTags { } return (value != null) ? Type.constantType(value) : Type.NoType; } catch (ArithmeticException e) { - ana.unit.error(pos, e.toString()); + ana.unit.warning(pos, e.toString()); return Type.NoType; } } @@ -223,7 +223,7 @@ class ConstantFolder implements /*imports*/ TypeTags { } return (value != null) ? Type.constantType(value) : Type.NoType; } catch (ArithmeticException e) { - ana.unit.error(pos, e.toString()); + ana.unit.warning(pos, e.toString()); return Type.NoType; } } @@ -262,7 +262,7 @@ class ConstantFolder implements /*imports*/ TypeTags { return (value != null) ? new ConstantType(argtype, value) : Type.NoType; } catch (ClassCastException e) { - ana.unit.error(pos, e.toString()); + ana.unit.warning(pos, e.toString()); return Type.NoType; } } |