diff options
author | paltherr <paltherr@epfl.ch> | 2003-10-29 14:01:48 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2003-10-29 14:01:48 +0000 |
commit | b0cd565a51d819847de0691fe5f9098fd17dce71 (patch) | |
tree | ab84c02ae6d0bb3c14d65ff2c1202fe585e27547 /sources/scalac/symtab | |
parent | 6191a1cea724f848a4751e0595ebe4b1bc71f609 (diff) | |
download | scala-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/scalac/symtab')
-rw-r--r-- | sources/scalac/symtab/Definitions.java | 163 | ||||
-rw-r--r-- | sources/scalac/symtab/Symbol.java | 4 | ||||
-rw-r--r-- | sources/scalac/symtab/Type.java | 22 | ||||
-rw-r--r-- | sources/scalac/symtab/classfile/AttributeParser.java | 10 | ||||
-rw-r--r-- | sources/scalac/symtab/classfile/ClassfileParser.java | 8 | ||||
-rw-r--r-- | sources/scalac/symtab/classfile/JavaTypeCreator.java | 60 | ||||
-rw-r--r-- | sources/scalac/symtab/classfile/JavaTypeFactory.java | 1 |
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(); |