diff options
author | Martin Odersky <odersky@gmail.com> | 2003-03-04 18:15:23 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2003-03-04 18:15:23 +0000 |
commit | 1956c530070b9ad3c75991ac90c2969081483c41 (patch) | |
tree | c86e7ee393b06566f1ca432b36d10a79fbe57c43 /sources/scalac/ast/TreeGen.java | |
parent | f5c16175c80964444c2da72a6f089a0ad287ac8a (diff) | |
download | scala-1956c530070b9ad3c75991ac90c2969081483c41.tar.gz scala-1956c530070b9ad3c75991ac90c2969081483c41.tar.bz2 scala-1956c530070b9ad3c75991ac90c2969081483c41.zip |
*** empty log message ***
Diffstat (limited to 'sources/scalac/ast/TreeGen.java')
-rw-r--r-- | sources/scalac/ast/TreeGen.java | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/sources/scalac/ast/TreeGen.java b/sources/scalac/ast/TreeGen.java index 29bb0d6d8a..6853b924a5 100644 --- a/sources/scalac/ast/TreeGen.java +++ b/sources/scalac/ast/TreeGen.java @@ -63,6 +63,21 @@ public class TreeGen implements Kinds, Modifiers { .setInfo(Type.NoType); } + public Tree mkStable(Tree tree) { + Symbol sym = tree.symbol(); + if (sym.isStable()) { + switch (tree) { + case Ident(_): + tree.setType(Type.singleType(sym.owner().thisType(), sym)); + break; + case Select(Tree qual, _): + if (qual.type.isStable()) + tree.setType(Type.singleType(qual.type, sym)); + } + } + return tree; + } + public Tree mkRef(int pos, Type pre, Symbol sym) { if (pre.isSameAs(Type.localThisType) || pre.symbol().isRoot()) return Ident(pos, sym); @@ -81,7 +96,7 @@ public class TreeGen implements Kinds, Modifiers { case ThisType(Symbol sym): return make.This(pos, Ident(pos, sym)).setType(pre); case SingleType(Type pre1, Symbol sym): - return mkRef(pos, pre1, sym); + return mkStable(mkRef(pos, pre1, sym)); default: throw new ApplicationError(); } @@ -361,8 +376,6 @@ public class TreeGen implements Kinds, Modifiers { Global.instance.nextPhase(); Type symtype = qual.type.memberType(sym); Global.instance.prevPhase(); - if (sym.kind == VAL && qual.type.isStable() && symtype.isObjectType()) - symtype = Type.singleType(qual.type, sym); return make.Select(pos, qual, sym.name) .setSymbol(sym).setType(symtype); } @@ -383,8 +396,6 @@ public class TreeGen implements Kinds, Modifiers { Global.instance.nextPhase(); Type symtype = sym.type(); Global.instance.prevPhase(); - if (sym.kind == VAL && symtype.isObjectType()) - symtype = Type.singleType(sym.owner().thisType(), sym); return make.Ident(pos, sym.name) .setSymbol(sym).setType(symtype); } |