summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sources/scalac/transformer/ExplicitOuterClasses.java20
1 files changed, 12 insertions, 8 deletions
diff --git a/sources/scalac/transformer/ExplicitOuterClasses.java b/sources/scalac/transformer/ExplicitOuterClasses.java
index 0df2103e1e..5eff0c87bb 100644
--- a/sources/scalac/transformer/ExplicitOuterClasses.java
+++ b/sources/scalac/transformer/ExplicitOuterClasses.java
@@ -126,16 +126,20 @@ public class ExplicitOuterClasses extends Transformer {
protected Tree outerRef(int level) {
assert level >= 0 : level;
- Symbol thisSym = (Symbol)classStack.getFirst();
- Tree root = gen.This(thisSym.pos, thisSym);
+ if (level == 0) {
+ Symbol thisSym = (Symbol)classStack.getFirst();
+ return gen.This(thisSym.pos, thisSym);
+ } else {
+ Iterator outerIt = outerLinks.iterator();
+ Tree root = gen.Ident((Symbol)outerIt.next());
+
+ for (int l = 1; l < level; ++l) {
+ Symbol outerSym = (Symbol)outerIt.next();
+ root = gen.mkStable(gen.Select(root, outerSym));
+ }
- Iterator outerIt = outerLinks.iterator();
- for (int l = 1; l <= level; ++l) {
- Symbol outerSym = (Symbol)outerIt.next();
- root = gen.mkStable(gen.Select(root, outerSym));
+ return root;
}
-
- return root;
}
public Tree transform(Tree tree) {