summaryrefslogtreecommitdiff
path: root/sources/scalac/transformer/ExplicitOuterClassesPhase.java
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2004-02-01 23:41:17 +0000
committerpaltherr <paltherr@epfl.ch>2004-02-01 23:41:17 +0000
commitec2cf46df2a18f9bcc56e8ac63f27d7fed5c12a6 (patch)
treeed4b7117054b82dcd0e94d873c207ffab6217410 /sources/scalac/transformer/ExplicitOuterClassesPhase.java
parent53f396c70e0f402a0a3eba3f2041b47aa6050b50 (diff)
downloadscala-ec2cf46df2a18f9bcc56e8ac63f27d7fed5c12a6.tar.gz
scala-ec2cf46df2a18f9bcc56e8ac63f27d7fed5c12a6.tar.bz2
scala-ec2cf46df2a18f9bcc56e8ac63f27d7fed5c12a6.zip
- Introduced local and global refs
- Fixed related bugs in ExplicitOuter - Replaced TreeGen.mkPrimaryConstr by TreeGen.mkPrimaryConstructorRef methods
Diffstat (limited to 'sources/scalac/transformer/ExplicitOuterClassesPhase.java')
-rw-r--r--sources/scalac/transformer/ExplicitOuterClassesPhase.java12
1 files changed, 4 insertions, 8 deletions
diff --git a/sources/scalac/transformer/ExplicitOuterClassesPhase.java b/sources/scalac/transformer/ExplicitOuterClassesPhase.java
index 0224d36f91..57c5067862 100644
--- a/sources/scalac/transformer/ExplicitOuterClassesPhase.java
+++ b/sources/scalac/transformer/ExplicitOuterClassesPhase.java
@@ -260,8 +260,7 @@ public class ExplicitOuterClassesPhase extends Phase {
public Type getTypeLink(int level) {
if (tlinks.length <= level) return Type.localThisType;
if (tlinks[level] != null) return tlinks[level].type();
- // !!! if (clasz.isPackage()) return Type.localThisType;
- return Type.singleType(getTypeLink(level + 1), clasz.module());
+ return Type.singleType(getTypeLink(level + 1), outers[level].clasz.module());
}
public String toString() {
@@ -318,14 +317,9 @@ public class ExplicitOuterClassesPhase extends Phase {
case ThisType(Symbol clasz):
if (clasz == Symbol.NONE) return type;
if (clasz == context.clasz) return type;
- if (clasz.isPackage()) return Type.localThisType;
for (int i = 0; i < context.outers.length; i++)
if (clasz == context.outers[i].clasz)
return context.getTypeLink(i);
- if (clasz.isModuleClass()) {
- Type prefix = clasz.owner().thisType();
- return Type.singleType(apply(prefix), clasz.module());
- }
throw Debug.abort("illegal ThisType", type);
case CompoundType(Type[] parents, Scope members):
// !!! this case should not be needed
@@ -397,6 +391,8 @@ public class ExplicitOuterClassesPhase extends Phase {
case This(_):
return genOuterRef(tree.pos, tree.symbol());
+// Symbol clasz = tree.symbol();
+// return clasz.isRoot() ? tree : genOuterRef(tree.pos, clasz);
case Select(Tree qualifier, _):
Symbol symbol = tree.symbol();
@@ -510,7 +506,7 @@ public class ExplicitOuterClassesPhase extends Phase {
Symbol forward = (Symbol)entry.getValue();
int pos = forward.pos;
Tree[] targs = gen.mkTypeRefs(pos, forward.nextTypeParams());
- Tree[] vargs = gen.mkRefs(pos, forward.nextValueParams());
+ Tree[] vargs = gen.mkLocalRefs(pos, forward.nextValueParams());
Tree fun = gen.Select(gen.Super(pos, context.clasz), method);
trees[i] = gen.DefDef(forward, gen.mkApplyTV(fun,targs,vargs));
}