summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-10-29 14:01:48 +0000
committerpaltherr <paltherr@epfl.ch>2003-10-29 14:01:48 +0000
commitb0cd565a51d819847de0691fe5f9098fd17dce71 (patch)
treeab84c02ae6d0bb3c14d65ff2c1202fe585e27547 /sources
parent6191a1cea724f848a4751e0595ebe4b1bc71f609 (diff)
downloadscala-b0cd565a51d819847de0691fe5f9098fd17dce71.tar.gz
scala-b0cd565a51d819847de0691fe5f9098fd17dce71.tar.bz2
scala-b0cd565a51d819847de0691fe5f9098fd17dce71.zip
- Replaced most of the Definition <...>_TYPE fi...
- Replaced most of the Definition <...>_TYPE fields by methods
Diffstat (limited to 'sources')
-rw-r--r--sources/scala/tools/scalai/Interpreter.java5
-rw-r--r--sources/scalac/Global.java7
-rw-r--r--sources/scalac/ast/TreeGen.java10
-rw-r--r--sources/scalac/backend/Primitives.java4
-rw-r--r--sources/scalac/symtab/Definitions.java163
-rw-r--r--sources/scalac/symtab/Symbol.java4
-rw-r--r--sources/scalac/symtab/Type.java22
-rw-r--r--sources/scalac/symtab/classfile/AttributeParser.java10
-rw-r--r--sources/scalac/symtab/classfile/ClassfileParser.java8
-rw-r--r--sources/scalac/symtab/classfile/JavaTypeCreator.java60
-rw-r--r--sources/scalac/symtab/classfile/JavaTypeFactory.java1
-rw-r--r--sources/scalac/transformer/AddInterfacesPhase.java2
-rw-r--r--sources/scalac/transformer/matching/PatternMatcher.java2
-rw-r--r--sources/scalac/typechecker/Analyzer.java6
-rw-r--r--sources/scalac/typechecker/RefCheck.java8
15 files changed, 163 insertions, 149 deletions
diff --git a/sources/scala/tools/scalai/Interpreter.java b/sources/scala/tools/scalai/Interpreter.java
index 4caecd7dbc..9c43c5fa1f 100644
--- a/sources/scala/tools/scalai/Interpreter.java
+++ b/sources/scala/tools/scalai/Interpreter.java
@@ -142,13 +142,16 @@ public class Interpreter {
// Private Methods - Finding main method
private Type getMainMethodType(boolean erased) {
+ scalac.Phase current = global.currentPhase; // !!!
+ if (!erased) global.currentPhase = global.getFirstPhase();
Definitions definitions = global.definitions;
- Type argument = definitions.arrayType(definitions.JAVA_STRING_TYPE);
+ Type argument = definitions.arrayType(definitions.JAVA_STRING_TYPE());
Type result = definitions.UNIT_TYPE;
if (erased) argument = argument.erasure();
if (erased) result = result.fullErasure();
Symbol formal = new TermSymbol(0, ARGS_N, null, Modifiers.PARAM);
formal.setInfo(argument);
+ if (!erased) global.currentPhase = current;
return Type.MethodType(new Symbol[] {formal}, result);
}
diff --git a/sources/scalac/Global.java b/sources/scalac/Global.java
index d13798fd8d..d0a89b9191 100644
--- a/sources/scalac/Global.java
+++ b/sources/scalac/Global.java
@@ -287,6 +287,7 @@ public class Global {
while (currentPhase.next != null && reporter.errors() == 0) {
currentPhase = currentPhase.next;
start();
+ // !!! new scalac.checkers.SymbolChecker(this).check();
currentPhase.apply(units);
stop(currentPhase.descriptor.taskDescription());
if (currentPhase.descriptor.hasPrintFlag()) {
@@ -436,7 +437,7 @@ public class Global {
last,
make.Literal(last.pos,
show(last.type())).setType(
- definitions.JAVA_STRING_TYPE)});
+ definitions.JAVA_STRING_TYPE())});
}
TreeList body = new TreeList();
for (int j = 0; j < impl.body.length; j++)
@@ -467,7 +468,7 @@ public class Global {
SHOW_DEFINITION()),
new Tree[] {
make.Literal(tree.pos, show(tree.symbol())).setType(
- definitions.JAVA_STRING_TYPE)}));
+ definitions.JAVA_STRING_TYPE())}));
return;
case ValDef(_, _, _, _):
if (!mustShow(tree.symbol())) return;
@@ -478,7 +479,7 @@ public class Global {
SHOW_VALUE_DEFINITION()),
new Tree[] {
make.Literal(tree.pos, show(tree.symbol())).setType(
- definitions.JAVA_STRING_TYPE),
+ definitions.JAVA_STRING_TYPE()),
treeGen.Ident(tree.pos, tree.symbol())}));
return;
default:
diff --git a/sources/scalac/ast/TreeGen.java b/sources/scalac/ast/TreeGen.java
index eacd4b1452..3f9e33b3cc 100644
--- a/sources/scalac/ast/TreeGen.java
+++ b/sources/scalac/ast/TreeGen.java
@@ -62,7 +62,7 @@ public class TreeGen implements Kinds, Modifiers, TypeTags {
mkToType(definitions.DOUBLE_TYPE),
mkToType(definitions.BOOLEAN_TYPE),
mkToType(definitions.UNIT_TYPE),
- mkToType(definitions.JAVA_STRING_TYPE),
+ mkToType(definitions.JAVA_STRING_TYPE()),
};
}
@@ -241,7 +241,7 @@ public class TreeGen implements Kinds, Modifiers, TypeTags {
/** Builds a default zero value according to given type. */
public Tree mkDefaultValue(int pos, Type type) {
- if (type.isSubType(definitions.ANYREF_TYPE)) return mkNullLit(pos);
+ if (type.isSubType(definitions.ANYREF_TYPE())) return mkNullLit(pos);
switch (type.unbox()) {
case UnboxedType(int tag): return mkDefaultValue(pos, tag);
}
@@ -701,7 +701,7 @@ public class TreeGen implements Kinds, Modifiers, TypeTags {
/** Builds a Return node of given method with given value. */
public Return Return(int pos, Symbol method, Tree value) {
Return tree = make.Return(pos, method, value);
- tree.setType(definitions.ALL_TYPE);
+ tree.setType(definitions.ALL_TYPE());
return tree;
}
public Return Return(Symbol method, Tree value) {
@@ -993,7 +993,7 @@ public class TreeGen implements Kinds, Modifiers, TypeTags {
argtypes[i] = params[i].type();
}
Type[] parentTypes = {
- definitions.OBJECT_TYPE,
+ definitions.OBJECT_TYPE(),
definitions.functionType(argtypes, restype) };
ClassSymbol clazz = new ClassSymbol(
pos, Names.ANON_CLASS_NAME.toTypeName(), owner, 0);
@@ -1024,7 +1024,7 @@ public class TreeGen implements Kinds, Modifiers, TypeTags {
ClassSymbol clazz = new ClassSymbol(
pos, Names.ANON_CLASS_NAME.toTypeName(), owner, 0);
Type[] parentTypes = {
- definitions.OBJECT_TYPE,
+ definitions.OBJECT_TYPE(),
definitions.partialFunctionType(pattype, restype)};
clazz.setInfo(Type.compoundType(parentTypes, new Scope(), clazz));
clazz.allConstructors().setInfo(
diff --git a/sources/scalac/backend/Primitives.java b/sources/scalac/backend/Primitives.java
index 028e73dd1b..4b2b4f4066 100644
--- a/sources/scalac/backend/Primitives.java
+++ b/sources/scalac/backend/Primitives.java
@@ -267,7 +267,7 @@ public class Primitives {
this.BOX_LARRAY = getBoxArray(boxes, definitions.LONG_TYPE);
this.BOX_FARRAY = getBoxArray(boxes, definitions.FLOAT_TYPE);
this.BOX_DARRAY = getBoxArray(boxes, definitions.DOUBLE_TYPE);
- this.BOX_OARRAY = getBoxArray(boxes, definitions.JAVA_OBJECT_TYPE);
+ this.BOX_OARRAY = getBoxArray(boxes, definitions.JAVA_OBJECT_TYPE());
this.AS_UVALUE = getUniqueTerm(definitions.UNIT_CLASS, AS_UVALUE_N);
this.AS_ZVALUE = getUniqueTerm(definitions.BOOLEAN_CLASS, AS_ZVALUE_N);
this.AS_BVALUE = getUniqueTerm(definitions.DOUBLE_CLASS, AS_BVALUE_N);
@@ -572,7 +572,7 @@ public class Primitives {
// !!! System.out.println("!!! Ignoring pico bridge method " + Debug.show(clasz) + "." + name);
break;
}
- if (vparams[0].type().equals(definitions.JAVA_STRING_TYPE)) {
+ if (vparams[0].type().equals(definitions.JAVA_STRING_TYPE())) {
addPrimitive(alts[i], Primitive.CONCAT);
assert !concat;
concat = true;
diff --git a/sources/scalac/symtab/Definitions.java b/sources/scalac/symtab/Definitions.java
index 1d0a4ee1a1..6d834d3256 100644
--- a/sources/scalac/symtab/Definitions.java
+++ b/sources/scalac/symtab/Definitions.java
@@ -57,10 +57,8 @@ public class Definitions {
/** the scala.Any class
*/
public final Symbol ANY_CLASS;
- public final Type ANY_TYPE;
+ public final Type ANY_TYPE() {return ANY_CLASS.type();}
- /** some methods of the scala.Any class
- */
public final Symbol MATCH;
public final Symbol IS;
public final Symbol AS;
@@ -71,29 +69,47 @@ public class Definitions {
public final Symbol TOSTRING;
public final Symbol HASHCODE;
- /** a method of class java.lang.Throwable
- */
- public final Symbol THROW;
-
/** the scala.AnyVal class
*/
public final Symbol ANYVAL_CLASS;
- public final Type ANYVAL_TYPE;
+ public final Type ANYVAL_TYPE() {return ANYVAL_CLASS.type();}
/** the scala.AnyRef class
*/
public final Symbol ANYREF_CLASS;
- public final Type ANYREF_TYPE;
+ public final Type ANYREF_TYPE() {return ANYREF_CLASS.type();}
+
+ /** the scala.AllRef class
+ */
+ public final Symbol ALLREF_CLASS;
+ public final Type ALLREF_TYPE() {return ALLREF_CLASS.type();}
+
+ /** the scala.All class
+ */
+ public final Symbol ALL_CLASS;
+ public final Type ALL_TYPE() {return ALL_CLASS.type();}
/** the java.lang.Object class
*/
public final Symbol JAVA_OBJECT_CLASS;
- public final Type JAVA_OBJECT_TYPE;
+ public final Type JAVA_OBJECT_TYPE() {return JAVA_OBJECT_CLASS.type();}
+
+ /** the java.lang.String class
+ */
+ public final Symbol JAVA_STRING_CLASS;
+ public final Type JAVA_STRING_TYPE() {return JAVA_STRING_CLASS.type();}
+
+ /** the java.lang.Throwable class
+ */
+ public final Symbol JAVA_THROWABLE_CLASS;
+ public final Type JAVA_THROWABLE_TYPE() {return JAVA_THROWABLE_CLASS.type();}
+
+ public final Symbol THROW;
/** the scala.Object class
*/
public final Symbol OBJECT_CLASS;
- public final Type OBJECT_TYPE;
+ public final Type OBJECT_TYPE() {return OBJECT_CLASS.type();}
private Symbol OBJECT_TAG;
public Symbol OBJECT_TAG() {
@@ -102,16 +118,6 @@ public class Definitions {
return OBJECT_TAG;
}
- /** the scala.All class
- */
- public final Symbol ALL_CLASS;
- public final Type ALL_TYPE;
-
- /** the scala.AllRef class
- */
- public final Symbol ALLREF_CLASS;
- public final Type ALLREF_TYPE;
-
/** the primitive types
*/
public final Symbol BYTE_CLASS;
@@ -153,17 +159,10 @@ public class Definitions {
return BOOLEAN_NOT;
}
- /** types from java.lang
- */
- public final Symbol JAVA_STRING_CLASS;
- public final Type JAVA_STRING_TYPE;
- public final Symbol JAVA_THROWABLE_CLASS;
- public final Type JAVA_THROWABLE_TYPE;
-
- /** types from scala
+ /** the scala.String class
*/
public final Symbol STRING_CLASS;
- public final Type STRING_TYPE;
+ public final Type STRING_TYPE() {return STRING_CLASS.type();}
/** the scala.TupleX classes
*/
@@ -397,89 +396,79 @@ public class Definitions {
ANY_CLASS = new ClassSymbol(
Position.NOPOS, Names.Any.toTypeName(), SCALA_CLASS, Modifiers.JAVA);
SCALA_CLASS.members().enter(ANY_CLASS);
- ANY_TYPE = ANY_CLASS.typeConstructor();
ANY_CLASS.setInfo(Type.compoundType(Type.EMPTY_ARRAY, new Scope(), ANY_CLASS));
ANY_CLASS.primaryConstructor().setInfo(
- Type.MethodType(Symbol.EMPTY_ARRAY, ANY_TYPE));
+ Type.MethodType(Symbol.EMPTY_ARRAY, ANY_CLASS.typeConstructor()));
// the java.lang.OBJECT class
JAVA_OBJECT_CLASS = getClass(Names.java_lang_Object);
- JAVA_OBJECT_TYPE = JAVA_OBJECT_CLASS.typeConstructor();
- JAVA_OBJECT_CLASS.setInfo(pparser.classCompletion);
+ JAVA_OBJECT_CLASS.setInfo(pparser.classCompletion); // !!!
+
+ // the primitive types
+ DOUBLE_CLASS = getClass(Names.scala_Double);
+ DOUBLE_TYPE = DOUBLE_CLASS.typeConstructor();
+ FLOAT_CLASS = getClass(Names.scala_Float);
+ FLOAT_TYPE = FLOAT_CLASS.typeConstructor();
+ LONG_CLASS = getClass(Names.scala_Long);
+ LONG_TYPE = LONG_CLASS.typeConstructor();
+ INT_CLASS = getClass(Names.scala_Int);
+ INT_TYPE = INT_CLASS.typeConstructor();
+ CHAR_CLASS = getClass(Names.scala_Char);
+ CHAR_TYPE = CHAR_CLASS.typeConstructor();
+ SHORT_CLASS = getClass(Names.scala_Short);
+ SHORT_TYPE = SHORT_CLASS.typeConstructor();
+ BYTE_CLASS = getClass(Names.scala_Byte);
+ BYTE_TYPE = BYTE_CLASS.typeConstructor();
+ BOOLEAN_CLASS = getClass(Names.scala_Boolean);
+ BOOLEAN_TYPE = BOOLEAN_CLASS.typeConstructor();
+ UNIT_CLASS = getClass(Names.scala_Unit);
+ UNIT_TYPE = UNIT_CLASS.typeConstructor();
// the scala.ANYREF class
ANYREF_CLASS = new AliasTypeSymbol(
Position.NOPOS, Names.AnyRef.toTypeName(),
SCALA_CLASS, Modifiers.JAVA)
- .setInfo(JAVA_OBJECT_TYPE);
+ .setInfo(JAVA_OBJECT_TYPE());
SCALA_CLASS.members().enter(ANYREF_CLASS);
- ANYREF_TYPE = JAVA_OBJECT_TYPE;
- ANYREF_CLASS.primaryConstructor().setInfo(Type.MethodType(Symbol.EMPTY_ARRAY, ANYREF_TYPE));
+ ANYREF_CLASS.primaryConstructor().setInfo(Type.MethodType(Symbol.EMPTY_ARRAY, JAVA_OBJECT_TYPE()));
// the scala.OBJECT class
OBJECT_CLASS = getClass(Names.scala_Object);
- OBJECT_TYPE = OBJECT_CLASS.typeConstructor();
// the scala.ANYVAL class
ANYVAL_CLASS = getClass(Names.scala_AnyVal);
- ANYVAL_TYPE = ANYVAL_CLASS.typeConstructor();
// the scala.ALL class
ALL_CLASS = new ClassSymbol(
Position.NOPOS, Names.All.toTypeName(), SCALA_CLASS, 0);
SCALA_CLASS.members().enter(ALL_CLASS);
- ALL_TYPE = ALL_CLASS.typeConstructor();
- ALL_CLASS.setInfo(Type.compoundType(new Type[]{ANY_TYPE}, new Scope(), ALL_CLASS));
- ALL_CLASS.primaryConstructor().setInfo(Type.MethodType(Symbol.EMPTY_ARRAY, ALL_TYPE));
+ ALL_CLASS.setInfo(Type.compoundType(new Type[]{ANY_TYPE()}, new Scope(), ALL_CLASS));
+ ALL_CLASS.primaryConstructor().setInfo(Type.MethodType(Symbol.EMPTY_ARRAY, ALL_CLASS.typeConstructor()));
// the scala.ALLREF class
ALLREF_CLASS = new ClassSymbol(
Position.NOPOS, Names.AllRef.toTypeName(), SCALA_CLASS, 0);
SCALA_CLASS.members().enter(ALLREF_CLASS);
- ALLREF_TYPE = ALLREF_CLASS.typeConstructor();
- ALLREF_CLASS.setInfo(Type.compoundType(new Type[]{ANYREF_TYPE}, new Scope(), ALLREF_CLASS));
- ALLREF_CLASS.primaryConstructor().setInfo(Type.MethodType(Symbol.EMPTY_ARRAY, ALLREF_TYPE));
-
- // the primitive types
- DOUBLE_CLASS = getClass(Names.scala_Double);
- DOUBLE_TYPE = DOUBLE_CLASS.typeConstructor();
- FLOAT_CLASS = getClass(Names.scala_Float);
- FLOAT_TYPE = FLOAT_CLASS.typeConstructor();
- LONG_CLASS = getClass(Names.scala_Long);
- LONG_TYPE = LONG_CLASS.typeConstructor();
- INT_CLASS = getClass(Names.scala_Int);
- INT_TYPE = INT_CLASS.typeConstructor();
- CHAR_CLASS = getClass(Names.scala_Char);
- CHAR_TYPE = CHAR_CLASS.typeConstructor();
- SHORT_CLASS = getClass(Names.scala_Short);
- SHORT_TYPE = SHORT_CLASS.typeConstructor();
- BYTE_CLASS = getClass(Names.scala_Byte);
- BYTE_TYPE = BYTE_CLASS.typeConstructor();
- BOOLEAN_CLASS = getClass(Names.scala_Boolean);
- BOOLEAN_TYPE = BOOLEAN_CLASS.typeConstructor();
- UNIT_CLASS = getClass(Names.scala_Unit);
- UNIT_TYPE = UNIT_CLASS.typeConstructor();
+ ALLREF_CLASS.setInfo(Type.compoundType(new Type[]{ANYREF_TYPE()}, new Scope(), ALLREF_CLASS));
+ ALLREF_CLASS.primaryConstructor().setInfo(Type.MethodType(Symbol.EMPTY_ARRAY, ALLREF_CLASS.typeConstructor()));
// the array class
ARRAY_CLASS = getClass(Names.scala_Array);
// add members to java.lang.Throwable
JAVA_THROWABLE_CLASS = getClass(Names.java_lang_Throwable);
- JAVA_THROWABLE_TYPE = JAVA_THROWABLE_CLASS.typeConstructor();
THROW = new TermSymbol(
Position.NOPOS, Names.throw_, JAVA_THROWABLE_CLASS, Modifiers.FINAL);
- THROW.setInfo(Type.PolyType(Symbol.EMPTY_ARRAY, ALL_TYPE));
+ THROW.setInfo(Type.PolyType(Symbol.EMPTY_ARRAY, ALL_TYPE()));
JAVA_THROWABLE_CLASS.members().enter(THROW);
// add the java.lang.String class to the scala package
JAVA_STRING_CLASS = getClass(Names.java_lang_String);
- JAVA_STRING_TYPE = JAVA_STRING_CLASS.typeConstructor();
STRING_CLASS = new AliasTypeSymbol(
Position.NOPOS, Names.String.toTypeName(), SCALA_CLASS, 0)
- .setInfo(JAVA_STRING_TYPE);
+ .setInfo(JAVA_STRING_TYPE());
SCALA_CLASS.members().enter(STRING_CLASS);
- STRING_TYPE = STRING_CLASS.typeConstructor();
- STRING_CLASS.primaryConstructor().setInfo(Type.MethodType(Symbol.EMPTY_ARRAY, STRING_TYPE));
+ STRING_CLASS.primaryConstructor().setInfo(Type.MethodType(Symbol.EMPTY_ARRAY, STRING_CLASS.typeConstructor()));
for (int i = 1; i < TUPLE_count; i++) {
TUPLE_CLASS[i] = getClass(Names.scala_Tuple(i));
@@ -510,15 +499,15 @@ public class Definitions {
Position.NOPOS, Names.PLUS, JAVA_STRING_CLASS, Modifiers.FINAL);
STRING_PLUS_ANY.setInfo(
Type.MethodType(
- new Symbol[]{newParameter(STRING_PLUS_ANY, ANY_TYPE)},
- STRING_TYPE));
+ new Symbol[]{newParameter(STRING_PLUS_ANY, ANY_TYPE())},
+ STRING_TYPE()));
JAVA_STRING_CLASS.members().enter(STRING_PLUS_ANY);
// add members to class scala.Any
MATCH = new TermSymbol(
Position.NOPOS, Names.match, ANY_CLASS, Modifiers.FINAL);
- Symbol matchTyParam1 = newTypeParameter(MATCH, ANY_TYPE);
- Symbol matchTyParam2 = newTypeParameter(MATCH, ANY_TYPE);
+ Symbol matchTyParam1 = newTypeParameter(MATCH, ANY_TYPE());
+ Symbol matchTyParam2 = newTypeParameter(MATCH, ANY_TYPE());
MATCH.setInfo(
Type.PolyType(
new Symbol[]{matchTyParam1, matchTyParam2},
@@ -534,43 +523,43 @@ public class Definitions {
AS = new TermSymbol(
Position.NOPOS, Names.asInstanceOf, ANY_CLASS, Modifiers.FINAL);
- Symbol tvar = newTypeParameter(AS, ANY_TYPE);
+ Symbol tvar = newTypeParameter(AS, ANY_TYPE());
AS.setInfo(Type.PolyType(new Symbol[]{tvar}, tvar.type()));
ANY_CLASS.members().enter(AS);
IS = new TermSymbol(
Position.NOPOS, Names.isInstanceOf, ANY_CLASS, Modifiers.FINAL);
- IS.setInfo(Type.PolyType(new Symbol[]{newTypeParameter(IS, ANY_TYPE)},
+ IS.setInfo(Type.PolyType(new Symbol[]{newTypeParameter(IS, ANY_TYPE())},
BOOLEAN_TYPE));
ANY_CLASS.members().enter(IS);
EQEQ = new TermSymbol(
Position.NOPOS, Names.EQEQ, ANY_CLASS, Modifiers.FINAL);
- EQEQ.setInfo(Type.MethodType(new Symbol[]{newParameter(EQEQ, ANY_TYPE)},
+ EQEQ.setInfo(Type.MethodType(new Symbol[]{newParameter(EQEQ, ANY_TYPE())},
BOOLEAN_TYPE));
ANY_CLASS.members().enter(EQEQ);
BANGEQ = new TermSymbol(
Position.NOPOS, Names.BANGEQ, ANY_CLASS, Modifiers.FINAL);
- BANGEQ.setInfo(Type.MethodType(new Symbol[]{newParameter(BANGEQ, ANY_TYPE)},
+ BANGEQ.setInfo(Type.MethodType(new Symbol[]{newParameter(BANGEQ, ANY_TYPE())},
BOOLEAN_TYPE));
ANY_CLASS.members().enter(BANGEQ);
EQUALS = new TermSymbol(
Position.NOPOS, Names.equals, ANY_CLASS, 0);
- EQUALS.setInfo(Type.MethodType(new Symbol[]{newParameter(EQUALS, ANY_TYPE)},
+ EQUALS.setInfo(Type.MethodType(new Symbol[]{newParameter(EQUALS, ANY_TYPE())},
BOOLEAN_TYPE));
ANY_CLASS.members().enter(EQUALS);
EQ = new TermSymbol(
Position.NOPOS, Names.eq, ANY_CLASS, 0);
- EQ.setInfo(Type.MethodType(new Symbol[]{newParameter(EQ, ANY_TYPE)},
+ EQ.setInfo(Type.MethodType(new Symbol[]{newParameter(EQ, ANY_TYPE())},
BOOLEAN_TYPE));
ANY_CLASS.members().enter(EQ);
TOSTRING = new TermSymbol(
Position.NOPOS, Names.toString, ANY_CLASS, 0);
- TOSTRING.setInfo(Type.MethodType(Symbol.EMPTY_ARRAY, STRING_TYPE));
+ TOSTRING.setInfo(Type.MethodType(Symbol.EMPTY_ARRAY, STRING_TYPE()));
ANY_CLASS.members().enter(TOSTRING);
HASHCODE = new TermSymbol(
@@ -581,18 +570,18 @@ public class Definitions {
// add a null value to the root scope
NULL = new TermSymbol(
Position.NOPOS, Names.null_, ROOT_CLASS, 0);
- NULL.setInfo(ALLREF_TYPE);
+ NULL.setInfo(ALLREF_TYPE());
ROOT.members().enter(NULL);
// add a null value to the root scope
ZERO = new TermSymbol(
Position.NOPOS, Names.ZERO, ROOT_CLASS, 0);
- ZERO.setInfo(ALL_TYPE);
+ ZERO.setInfo(ALL_TYPE());
ROOT.members().enter(ZERO);
PATTERN_WILDCARD = new TermSymbol(
Position.NOPOS, Names.PATTERN_WILDCARD, Symbol.NONE, 0);
- PATTERN_WILDCARD.setType(ALL_TYPE);
+ PATTERN_WILDCARD.setType(ALL_TYPE());
}
private Symbol newParameter(Symbol owner, Type tp) {
@@ -645,10 +634,6 @@ public class Definitions {
return getClass(fullname).type();
}
- public Type getJavaType(Name fullname) {
- return getClass(fullname).typeConstructor();
- }
-
private Symbol loadTerm(Symbol clasz, Name name) {
Symbol sym = clasz.lookup(name);
assert sym.isTerm() && !sym.isOverloaded(): clasz+"."+name+" -> "+sym;
diff --git a/sources/scalac/symtab/Symbol.java b/sources/scalac/symtab/Symbol.java
index 03d5cbd6fa..9fd995b3b4 100644
--- a/sources/scalac/symtab/Symbol.java
+++ b/sources/scalac/symtab/Symbol.java
@@ -937,7 +937,7 @@ public abstract class Symbol implements Modifiers, Kinds {
/** The low bound of this type variable
*/
public Type loBound() {
- return Global.instance.definitions.ALL_TYPE;
+ return Global.instance.definitions.ALL_TYPE();
}
/** Get this.type corresponding to this symbol
@@ -1654,7 +1654,7 @@ public class AbsTypeSymbol extends TypeSymbol {
public Type loBound() {
initialize();
- return lobound == null ? Global.instance.definitions.ALL_TYPE : lobound;
+ return lobound == null ? Global.instance.definitions.ALL_TYPE() : lobound;
}
public Symbol setLoBound(Type lobound) {
diff --git a/sources/scalac/symtab/Type.java b/sources/scalac/symtab/Type.java
index 9802005bd8..e574a35776 100644
--- a/sources/scalac/symtab/Type.java
+++ b/sources/scalac/symtab/Type.java
@@ -363,14 +363,14 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags {
public Type loBound() {
switch (unalias()) {
case TypeRef(Type pre, Symbol sym, Type[] args):
- Type lb = Global.instance.definitions.ALL_TYPE;
+ Type lb = Global.instance.definitions.ALL_TYPE();
if (sym.kind == TYPE) {
lb = pre.memberLoBound(sym);
}
if (lb.symbol() == Global.instance.definitions.ALL_CLASS &&
this.symbol() != Global.instance.definitions.ALL_CLASS &&
- this.isSubType(Global.instance.definitions.ANYREF_TYPE)) {
- lb = Global.instance.definitions.ALLREF_TYPE;
+ this.isSubType(Global.instance.definitions.ANYREF_TYPE())) {
+ lb = Global.instance.definitions.ALLREF_TYPE();
}
return lb;
default:
@@ -618,7 +618,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags {
}
/** Is this type a reference to an object type?
- * todo: replace by this.isSubType(global.definitions.ANY_TYPE)?
+ * todo: replace by this.isSubType(global.definitions.ANY_TYPE())?
*/
public boolean isObjectType() {
switch (unalias()) {
@@ -1812,12 +1812,12 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags {
if (sym.kind == ALIAS && sym.typeParams().length == args.length)
return this.unalias().isSubType(that);
else if (sym == Global.instance.definitions.ALL_CLASS)
- return that.isSubType(Global.instance.definitions.ANY_TYPE);
+ return that.isSubType(Global.instance.definitions.ANY_TYPE());
else if (sym == Global.instance.definitions.ALLREF_CLASS)
return
that.symbol() == Global.instance.definitions.ANY_CLASS ||
(that.symbol() != Global.instance.definitions.ALL_CLASS &&
- that.isSubType(Global.instance.definitions.ANYREF_TYPE));
+ that.isSubType(Global.instance.definitions.ANYREF_TYPE()));
break;
case OverloadedType(Symbol[] alts, Type[] alttypes):
@@ -1835,7 +1835,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags {
break;
case UnboxedArrayType(_):
- if (Global.instance.definitions.JAVA_OBJECT_TYPE.isSubType(that))
+ if (Global.instance.definitions.JAVA_OBJECT_TYPE().isSubType(that))
return true;
// !!! we should probably also test for Clonable, Serializable, ...
}
@@ -2373,7 +2373,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags {
public static Type lub(Type[] tps) {
//System.out.println("lub" + ArrayApply.toString(tps));//DEBUG
- if (tps.length == 0) return Global.instance.definitions.ALL_TYPE;
+ if (tps.length == 0) return Global.instance.definitions.ALL_TYPE();
//If all types are method types with same parameters,
//compute lub of their result types.
@@ -2538,7 +2538,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags {
}
public static Type glb(Type[] tps) {
- if (tps.length == 0) return Global.instance.definitions.ANY_TYPE;
+ if (tps.length == 0) return Global.instance.definitions.ANY_TYPE();
// step one: eliminate redunandant types; return if one one is left
tps = elimRedundant(tps, false);
@@ -2560,7 +2560,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags {
break;
case ThisType(_):
case SingleType(_, _):
- return Global.instance.definitions.ALL_TYPE;
+ return Global.instance.definitions.ALL_TYPE();
}
}
@@ -2579,7 +2579,7 @@ public class Type implements Modifiers, Kinds, TypeTags, EntryTags {
// by AllRef
glbType.members = Scope.EMPTY;
treftl = new Type.List(
- Global.instance.definitions.ALLREF_TYPE, treftl);
+ Global.instance.definitions.ALLREF_TYPE(), treftl);
}
}
diff --git a/sources/scalac/symtab/classfile/AttributeParser.java b/sources/scalac/symtab/classfile/AttributeParser.java
index d7bda1c82d..7de745ee1f 100644
--- a/sources/scalac/symtab/classfile/AttributeParser.java
+++ b/sources/scalac/symtab/classfile/AttributeParser.java
@@ -191,7 +191,7 @@ public class AttributeParser implements ClassfileConstants {
Name.fromString(token).toTypeName(),
owner,
Modifiers.PARAM);
- s.setFirstInfo(parser.defs.ANY_TYPE);
+ s.setFirstInfo(parser.make.anyType());
tvars.enter(s);
return s;
} else
@@ -295,7 +295,7 @@ public class AttributeParser implements ClassfileConstants {
nextToken();
if (s != Symbol.NONE)
return s.type();
- Symbol clazz = parser.defs.getClass(Name.fromString(name));
+ Type clazztype = parser.make.classType(Name.fromString(name)).unalias();
if (token.equals("[")) {
Vector types = new Vector();
do {
@@ -306,9 +306,9 @@ public class AttributeParser implements ClassfileConstants {
nextToken();
Type[] args = new Type[types.size()];
types.toArray(args);
- return Type.TypeRef(clazz.owner().thisType(), clazz, args).unalias();
+ return Type.appliedType(clazztype, args);
} else {
- return clazz.typeConstructor().unalias();
+ return clazztype;
}
}
@@ -330,7 +330,7 @@ public class AttributeParser implements ClassfileConstants {
Name.fromString(token).toTypeName(),
owner,
Modifiers.PARAM);
- s.setFirstInfo(parser.defs.ANY_TYPE);
+ s.setFirstInfo(parser.make.anyType());
locals.enter(s);
nextToken();
if (token.equals("<")) {
diff --git a/sources/scalac/symtab/classfile/ClassfileParser.java b/sources/scalac/symtab/classfile/ClassfileParser.java
index 9debd17b0f..8c2ed2f67c 100644
--- a/sources/scalac/symtab/classfile/ClassfileParser.java
+++ b/sources/scalac/symtab/classfile/ClassfileParser.java
@@ -46,7 +46,6 @@ public class ClassfileParser implements ClassfileConstants {
protected Signatures sigs;
protected ConstantPool pool;
protected AttributeParser attrib;
- protected Definitions defs;
public ClassfileParser(Global global, AbstractFileReader in, Symbol c) {
@@ -54,11 +53,10 @@ public class ClassfileParser implements ClassfileConstants {
this.in = in;
this.c = c;
this.ctype = c.typeConstructor();
- this.make = new JavaTypeCreator(global);
+ this.make = new JavaTypeCreator(global.definitions);
this.sigs = new Signatures(global, make);
this.pool = new ConstantPool(in, sigs);
this.attrib = new AttributeParser(in, pool, this);
- this.defs = global.definitions;
}
@@ -159,8 +157,8 @@ public class ClassfileParser implements ClassfileConstants {
*/
protected Type readClassType(int i) {
if (i == 0)
- return defs.ANY_TYPE;
- Type res = defs.getJavaType((Name)pool.readPool(i));
+ return make.anyType();
+ Type res = make.classType((Name)pool.readPool(i));
if (res == Type.ErrorType)
global.error("unknown class reference " + pool.readPool(i));
return res;
diff --git a/sources/scalac/symtab/classfile/JavaTypeCreator.java b/sources/scalac/symtab/classfile/JavaTypeCreator.java
index 395778adec..7126d182cd 100644
--- a/sources/scalac/symtab/classfile/JavaTypeCreator.java
+++ b/sources/scalac/symtab/classfile/JavaTypeCreator.java
@@ -9,7 +9,6 @@
package scalac.symtab.classfile;
import ch.epfl.lamp.util.Position;
-import scalac.Global;
import scalac.util.*;
import scalac.symtab.*;
import Type.*;
@@ -17,54 +16,81 @@ import Type.*;
public class JavaTypeCreator implements JavaTypeFactory {
- protected Global global;
+ protected final Definitions definitions;
+
+ protected final Type ANY_TYPE;
+ protected final Type DOUBLE_TYPE;
+ protected final Type FLOAT_TYPE;
+ protected final Type LONG_TYPE;
+ protected final Type INT_TYPE;
+ protected final Type CHAR_TYPE;
+ protected final Type SHORT_TYPE;
+ protected final Type BYTE_TYPE;
+ protected final Type BOOLEAN_TYPE;
+ protected final Type UNIT_TYPE;
+ protected final Type JAVA_OBJECT_TYPE;
+
+ public JavaTypeCreator(Definitions definitions) {
+ this.definitions = definitions;
+ this.ANY_TYPE = definitions.ANY_CLASS.typeConstructor();
+ this.DOUBLE_TYPE = definitions.DOUBLE_CLASS.typeConstructor();
+ this.FLOAT_TYPE = definitions.FLOAT_CLASS.typeConstructor();
+ this.LONG_TYPE = definitions.LONG_CLASS.typeConstructor();
+ this.INT_TYPE = definitions.INT_CLASS.typeConstructor();
+ this.CHAR_TYPE = definitions.CHAR_CLASS.typeConstructor();
+ this.SHORT_TYPE = definitions.SHORT_CLASS.typeConstructor();
+ this.BYTE_TYPE = definitions.BYTE_CLASS.typeConstructor();
+ this.BOOLEAN_TYPE = definitions.BOOLEAN_CLASS.typeConstructor();
+ this.UNIT_TYPE = definitions.UNIT_CLASS.typeConstructor();
+ this.JAVA_OBJECT_TYPE =definitions.JAVA_OBJECT_CLASS.typeConstructor();
+ }
- public JavaTypeCreator(Global global) {
- this.global = global;
+ public Type anyType() {
+ return ANY_TYPE;
}
public Type byteType() {
- return global.definitions.BYTE_TYPE;
+ return BYTE_TYPE;
}
public Type shortType() {
- return global.definitions.SHORT_TYPE;
+ return SHORT_TYPE;
}
public Type charType() {
- return global.definitions.CHAR_TYPE;
+ return CHAR_TYPE;
}
public Type intType() {
- return global.definitions.INT_TYPE;
+ return INT_TYPE;
}
public Type longType() {
- return global.definitions.LONG_TYPE;
+ return LONG_TYPE;
}
public Type floatType() {
- return global.definitions.FLOAT_TYPE;
+ return FLOAT_TYPE;
}
public Type doubleType() {
- return global.definitions.DOUBLE_TYPE;
+ return DOUBLE_TYPE;
}
public Type booleanType() {
- return global.definitions.BOOLEAN_TYPE;
+ return BOOLEAN_TYPE;
}
public Type voidType() {
- return global.definitions.UNIT_TYPE;
+ return UNIT_TYPE;
}
public Type classType(Name classname) {
- return global.definitions.getJavaType(classname);
+ return definitions.getClass(classname).typeConstructor();
}
public Type arrayType(Type elemtpe) {
- return global.definitions.arrayType(elemtpe);
+ return definitions.arrayType(elemtpe);
}
public Type methodType(Type[] argtpes, Type restpe, Type[] thrown) {
@@ -77,8 +103,8 @@ public class JavaTypeCreator implements JavaTypeFactory {
return new MethodType(args, restpe);
}
private Type objToAny(Type tp) {
- if (tp.isSameAs(global.definitions.JAVA_OBJECT_TYPE))
- return global.definitions.ANY_TYPE;
+ if (tp.isSameAs(JAVA_OBJECT_TYPE))
+ return ANY_TYPE;
else
return tp;
}
diff --git a/sources/scalac/symtab/classfile/JavaTypeFactory.java b/sources/scalac/symtab/classfile/JavaTypeFactory.java
index 8205055bc9..ff1bea1727 100644
--- a/sources/scalac/symtab/classfile/JavaTypeFactory.java
+++ b/sources/scalac/symtab/classfile/JavaTypeFactory.java
@@ -12,6 +12,7 @@ import scalac.symtab.Type;
import scalac.util.Name;
public interface JavaTypeFactory {
+ Type anyType();
Type byteType();
Type shortType();
Type charType();
diff --git a/sources/scalac/transformer/AddInterfacesPhase.java b/sources/scalac/transformer/AddInterfacesPhase.java
index b3f65fd553..fb19268c26 100644
--- a/sources/scalac/transformer/AddInterfacesPhase.java
+++ b/sources/scalac/transformer/AddInterfacesPhase.java
@@ -87,7 +87,7 @@ public class AddInterfacesPhase extends Phase {
&& oldSym != definitions.ANY_CLASS
&& oldSym != definitions.ANYREF_CLASS) {
newParents = new Type[oldParents.length];
- newParents[0] = definitions.ANYREF_TYPE;
+ newParents[0] = definitions.ANYREF_TYPE();
for (int i = 1; i < oldParents.length; ++i)
newParents[i] = oldParents[i];
} else
diff --git a/sources/scalac/transformer/matching/PatternMatcher.java b/sources/scalac/transformer/matching/PatternMatcher.java
index 5f074c05f7..3ece11b531 100644
--- a/sources/scalac/transformer/matching/PatternMatcher.java
+++ b/sources/scalac/transformer/matching/PatternMatcher.java
@@ -834,7 +834,7 @@ public class PatternMatcher extends PatternTool {
}
protected boolean optimize(Type selType, PatternNode alternatives) {
- if (!optimize || !selType.isSubType(defs.OBJECT_TYPE))
+ if (!optimize || !selType.isSubType(defs.OBJECT_TYPE()))
return false;
int cases = 0;
while (alternatives != null) {
diff --git a/sources/scalac/typechecker/Analyzer.java b/sources/scalac/typechecker/Analyzer.java
index 4595a33249..2954a56e3d 100644
--- a/sources/scalac/typechecker/Analyzer.java
+++ b/sources/scalac/typechecker/Analyzer.java
@@ -601,7 +601,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds {
else if (value instanceof Long) return definitions.LONG_TYPE;
else if (value instanceof Float) return definitions.FLOAT_TYPE;
else if (value instanceof Double) return definitions.DOUBLE_TYPE;
- else if (value instanceof String) return definitions.JAVA_STRING_TYPE;
+ else if (value instanceof String) return definitions.JAVA_STRING_TYPE();
else if (value instanceof Boolean) return definitions.BOOLEAN_TYPE;
else throw new ApplicationError();
}
@@ -2084,7 +2084,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds {
case Throw(Tree expr):
Tree expr1 = transform(
- expr, EXPRmode, definitions.JAVA_THROWABLE_TYPE);
+ expr, EXPRmode, definitions.JAVA_THROWABLE_TYPE());
return gen.Select(tree.pos, expr1, definitions.THROW);
case Return(Tree expr):
@@ -2096,7 +2096,7 @@ public class Analyzer extends Transformer implements Modifiers, Kinds {
Tree expr1 = transform(
expr, EXPRmode, enclFun.type().resultType());
return copy.Return(tree, expr1)
- .setSymbol(enclFun).setType(definitions.ALL_TYPE);
+ .setSymbol(enclFun).setType(definitions.ALL_TYPE());
} else {
return error(tree.pos, "return outside method definition");
}
diff --git a/sources/scalac/typechecker/RefCheck.java b/sources/scalac/typechecker/RefCheck.java
index 1f4b75ed09..b27def2224 100644
--- a/sources/scalac/typechecker/RefCheck.java
+++ b/sources/scalac/typechecker/RefCheck.java
@@ -164,7 +164,7 @@ public class RefCheck extends Transformer implements Modifiers, Kinds {
case MethodType(Symbol[] tparams, Type restp):
return Type.MethodType(tparams, Type.AnyType);
default:
- return defs.ANY_TYPE;
+ return defs.ANY_TYPE();
}
}
private void abstractClassError(Symbol clazz, String msg) {
@@ -518,7 +518,7 @@ public class RefCheck extends Transformer implements Modifiers, Kinds {
// { if (null == m$) m$ = new m$class; m$ }
Symbol eqMethod = getUnaryMemberMethod(
- sym.type(), Names.EQEQ, defs.ANY_TYPE);
+ sym.type(), Names.EQEQ, defs.ANY_TYPE());
Tree body = gen.Block(new Tree[]{
gen.If(
gen.Apply(
@@ -640,7 +640,7 @@ public class RefCheck extends Transformer implements Modifiers, Kinds {
Symbol equalsSym = new TermSymbol(clazz.pos, Names.equals, clazz, OVERRIDE);
Symbol equalsParam =
new TermSymbol(clazz.pos, Names.that, equalsSym, PARAM)
- .setInfo(defs.ANY_TYPE);
+ .setInfo(defs.ANY_TYPE());
equalsSym.setInfo(
Type.MethodType(new Symbol[]{equalsParam}, defs.BOOLEAN_TYPE));
clazz.info().members().enter(equalsSym);
@@ -651,7 +651,7 @@ public class RefCheck extends Transformer implements Modifiers, Kinds {
if (tparams.length != 0) {
Type[] targs = new Type[tparams.length];
for (int i = 0; i < targs.length; i++)
- targs[i] = defs.ANY_TYPE;
+ targs[i] = defs.ANY_TYPE();
testtp = testtp.subst(tparams, targs);
}
}