summaryrefslogtreecommitdiff
path: root/sources/scalac
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2003-11-12 18:01:30 +0000
committerMartin Odersky <odersky@gmail.com>2003-11-12 18:01:30 +0000
commitf5437e9a8bb543cf57b295739dd3abdebb7be651 (patch)
tree82d04d9b9de6e798631dfbc12fa62f0f8be3dc02 /sources/scalac
parentf8ed082d80fb662f96d9a95dad3d7481b7e88818 (diff)
downloadscala-f5437e9a8bb543cf57b295739dd3abdebb7be651.tar.gz
scala-f5437e9a8bb543cf57b295739dd3abdebb7be651.tar.bz2
scala-f5437e9a8bb543cf57b295739dd3abdebb7be651.zip
*** empty log message ***
Diffstat (limited to 'sources/scalac')
-rw-r--r--sources/scalac/CompilerPhases.java50
-rw-r--r--sources/scalac/Global.java13
-rw-r--r--sources/scalac/symtab/Symbol.java7
-rw-r--r--sources/scalac/symtab/classfile/Pickle.java6
-rw-r--r--sources/scalac/symtab/classfile/UnPickle.java11
-rw-r--r--sources/scalac/typechecker/Analyzer.java4
-rw-r--r--sources/scalac/typechecker/ConstantFolder.java6
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;
}
}