diff options
-rw-r--r-- | sources/scalac/transformer/ExplicitOuterClasses.java | 20 |
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) { |