summaryrefslogtreecommitdiff
path: root/sources/scalac/symtab
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scalac/symtab')
-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
7 files changed, 139 insertions, 129 deletions
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();