diff options
Diffstat (limited to 'sources/scalac/symtab/Definitions.java')
-rw-r--r-- | sources/scalac/symtab/Definitions.java | 163 |
1 files changed, 74 insertions, 89 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; |