summaryrefslogtreecommitdiff
path: root/sources/scalac
diff options
context:
space:
mode:
authorschinz <schinz@epfl.ch>2005-04-05 19:52:37 +0000
committerschinz <schinz@epfl.ch>2005-04-05 19:52:37 +0000
commitb8c5798b5c2d56fa51075b6cc8fedf37f1d5fa4e (patch)
tree57917da95513306dd0d26dfbede45ef78ec43725 /sources/scalac
parent852bece973d1a1c04dd31a2d63546be0cd95c280 (diff)
downloadscala-b8c5798b5c2d56fa51075b6cc8fedf37f1d5fa4e.tar.gz
scala-b8c5798b5c2d56fa51075b6cc8fedf37f1d5fa4e.tar.bz2
scala-b8c5798b5c2d56fa51075b6cc8fedf37f1d5fa4e.zip
- added a cache for JavaClassTypes,
- extended the notion of triviality to array types
Diffstat (limited to 'sources/scalac')
-rw-r--r--sources/scalac/symtab/Definitions.java9
-rw-r--r--sources/scalac/transformer/TypesAsValuesPhase.java10
-rw-r--r--sources/scalac/util/Names.java1
3 files changed, 16 insertions, 4 deletions
diff --git a/sources/scalac/symtab/Definitions.java b/sources/scalac/symtab/Definitions.java
index 8f306ab4ac..00e37cc2a4 100644
--- a/sources/scalac/symtab/Definitions.java
+++ b/sources/scalac/symtab/Definitions.java
@@ -704,6 +704,15 @@ public class Definitions {
return SCALACLASSTYPE_EMPTYARRAY;
}
+ private Symbol JAVACLASSTYPE_JAVACLASSTYPE;
+ public Symbol JAVACLASSTYPE_JAVACLASSTYPE() {
+ if (JAVACLASSTYPE_JAVACLASSTYPE == null)
+ JAVACLASSTYPE_JAVACLASSTYPE =
+ loadTerm(JAVACLASSTYPE_CLASS.linkedModule().moduleClass(),
+ Names.javaClassType);
+ return JAVACLASSTYPE_JAVACLASSTYPE;
+ }
+
//########################################################################
// Public Fields - Global values
diff --git a/sources/scalac/transformer/TypesAsValuesPhase.java b/sources/scalac/transformer/TypesAsValuesPhase.java
index 92e397ae0d..71be22e44b 100644
--- a/sources/scalac/transformer/TypesAsValuesPhase.java
+++ b/sources/scalac/transformer/TypesAsValuesPhase.java
@@ -780,7 +780,10 @@ public class TypesAsValuesPhase extends Phase {
private boolean isTrivial(Type tp) {
switch (tp) {
case TypeRef(_, Symbol sym, Type[] args):
- return sym.isStatic() && args.length == 0;
+ if (sym == defs.ARRAY_CLASS)
+ return isTrivial(args[0]);
+ else
+ return sym.isStatic() && args.length == 0;
case SingleType(_, _):
case ThisType(_):
case CompoundType(_, _):
@@ -881,11 +884,10 @@ public class TypesAsValuesPhase extends Phase {
private Tree javaType(int pos, Symbol sym) {
Tree constr =
- gen.mkPrimaryConstructorGlobalRef(pos,
- defs.JAVACLASSTYPE_CLASS);
+ gen.mkGlobalRef(pos, defs.JAVACLASSTYPE_JAVACLASSTYPE());
Tree nameLit = gen.mkSymbolNameLit(pos, sym);
Tree[] args = new Tree[] { nameLit };
- return gen.New(pos, gen.mkApply_V(constr, args));
+ return gen.mkApply_V(constr, args);
}
private Tree thisType(int pos, Symbol sym) {
diff --git a/sources/scalac/util/Names.java b/sources/scalac/util/Names.java
index 0fda2848fe..f1d15c414d 100644
--- a/sources/scalac/util/Names.java
+++ b/sources/scalac/util/Names.java
@@ -191,6 +191,7 @@ public class Names {
public static final Name isEmpty = Name.fromString("isEmpty");
public static final Name instantiate = Name.fromString("instantiate");
public static final Name java = Name.fromString("java");
+ public static final Name javaClassType = Name.fromString("javaClassType");
public static final Name lang = Name.fromString("lang");
public static final Name length = Name.fromString("length");
public static final Name _match = Name.fromString("match");