diff options
author | schinz <schinz@epfl.ch> | 2005-02-17 14:13:05 +0000 |
---|---|---|
committer | schinz <schinz@epfl.ch> | 2005-02-17 14:13:05 +0000 |
commit | 7f8e2cec8f26aaf18a4516737a3c48a717989a8c (patch) | |
tree | 0afec1c1bb55037e1e8112523ef162ab55856f20 | |
parent | 491b4c50a87f785537edd11e6953d96b21b0ca25 (diff) | |
download | scala-7f8e2cec8f26aaf18a4516737a3c48a717989a8c.tar.gz scala-7f8e2cec8f26aaf18a4516737a3c48a717989a8c.tar.bz2 scala-7f8e2cec8f26aaf18a4516737a3c48a717989a8c.zip |
- renamed isSameAs to isSameType, to be consistent
- use the new parameter to the constructor of ScalaClassType, to avoid a
further call to setParents in some cases
-rw-r--r-- | sources/scalac/transformer/TypesAsValuesPhase.java | 60 |
1 files changed, 28 insertions, 32 deletions
diff --git a/sources/scalac/transformer/TypesAsValuesPhase.java b/sources/scalac/transformer/TypesAsValuesPhase.java index 6c48e353d5..89240a6bf3 100644 --- a/sources/scalac/transformer/TypesAsValuesPhase.java +++ b/sources/scalac/transformer/TypesAsValuesPhase.java @@ -340,15 +340,6 @@ public class TypesAsValuesPhase extends Phase { } public Tree transform(Tree tree) { - try { - return transform0(tree); - } catch (Error e) { - System.out.println("tree: " + tree); - throw e; - } - } - - public Tree transform0(Tree tree) { switch (tree) { case ClassDef(int mods, //: Name name, @@ -358,9 +349,6 @@ public class TypesAsValuesPhase extends Phase { Tree.Template impl): Symbol sym = tree.symbol(); -// if (impl.symbol().isNone()) -// throw new Error("no symbol for " + tree); - TreeList newBody = new TreeList(); // Add members (accessors and instantiators) NewMember[] toAdd = membersToAdd(sym); @@ -658,13 +646,6 @@ public class TypesAsValuesPhase extends Phase { new Tree[] { gen.mkNullLit(pos) }); Tree thenP = gen.mkLocalRef(pos, instVal); - Tree instFun = - gen.Select(pos, - gen.mkLocalRef(pos, getTConstructorSym(clsSym)), - defs.TYPECONSTRUCTOR_INSTANTIATE()); - Tree[] instArgs = new Tree[] { gen.mkLocalRef(pos, vparams[0]) }; - Tree instCall = gen.mkApply_V(pos, instFun, instArgs); - final HashMap varMap = new HashMap(); Symbol[] tparams = clsSym.typeParams(); for (int i = 0; i < tparams.length; ++i) @@ -689,22 +670,36 @@ public class TypesAsValuesPhase extends Phase { TreeList parentTypes = new TreeList(); for (int i = 0; i < parents.length; ++i) { Type parent = parents[i]; - if (!parent.symbol().isJava()) { - Tree parentType = - typeAsValue(pos, parent, insSym, tEnv); - parentTypes.append(parentType); - } + if (!parent.symbol().isJava()) + parentTypes.append(typeAsValue(pos, parent, insSym, tEnv)); } - Tree parentsArray = gen.mkNewArray(pos, - defs.SCALACLASSTYPE_TYPE(), - parentTypes.toArray(), - insSym); + boolean emptyParents = (parentTypes.length() == 0); + Tree parentsArray = emptyParents + ? gen.mkGlobalRef(pos, defs.SCALACLASSTYPE_EMPTYARRAY()) + : gen.mkNewArray(pos, + defs.SCALACLASSTYPE_TYPE(), + parentTypes.toArray(), + insSym); + Tree instFun = + gen.Select(pos, + gen.mkLocalRef(pos, getTConstructorSym(clsSym)), + defs.TYPECONSTRUCTOR_INSTANTIATE()); + Tree[] instArgs = new Tree[] { + gen.mkLocalRef(pos, vparams[0]), + emptyParents ? parentsArray : gen.mkNullLit(pos) + }; + Tree instCall = gen.mkApply_V(pos, instFun, instArgs); - Tree setParentsFun = - gen.Select(pos, instCall, defs.SCALACLASSTYPE_SETPARENTS()); + Tree elseP; + if (!emptyParents) { + Tree setParentsFun = + gen.Select(pos, instCall, defs.SCALACLASSTYPE_SETPARENTS()); - Tree elseP = - gen.mkApply_V(pos, setParentsFun, new Tree[] { parentsArray }); + elseP = gen.mkApply_V(pos, + setParentsFun, + new Tree[] { parentsArray }); + } else + elseP = instCall; Tree ifExpr = gen.If(pos, cond, thenP, elseP, defs.SCALACLASSTYPE_TYPE()); @@ -756,6 +751,7 @@ public class TypesAsValuesPhase extends Phase { return sym == defs.ARRAY_CLASS; } + /** Return true iff type tp refers to class symbol classSym. */ /** * Transform a type into a tree representing it. */ |