summaryrefslogtreecommitdiff
path: root/sources/scalac/ast/TreeGen.java
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2003-03-04 18:15:23 +0000
committerMartin Odersky <odersky@gmail.com>2003-03-04 18:15:23 +0000
commit1956c530070b9ad3c75991ac90c2969081483c41 (patch)
treec86e7ee393b06566f1ca432b36d10a79fbe57c43 /sources/scalac/ast/TreeGen.java
parentf5c16175c80964444c2da72a6f089a0ad287ac8a (diff)
downloadscala-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.java21
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);
}