diff options
author | schinz <schinz@epfl.ch> | 2003-03-10 12:15:05 +0000 |
---|---|---|
committer | schinz <schinz@epfl.ch> | 2003-03-10 12:15:05 +0000 |
commit | b5308c3f448c110d53f7e580e46529557e067ea5 (patch) | |
tree | e9ffdb7896e645fc02cdaa7676be06db79117f97 | |
parent | d5da7d9aa5a8d4833775454853e81ead20cc37a7 (diff) | |
download | scala-b5308c3f448c110d53f7e580e46529557e067ea5.tar.gz scala-b5308c3f448c110d53f7e580e46529557e067ea5.tar.bz2 scala-b5308c3f448c110d53f7e580e46529557e067ea5.zip |
- bug fix: do not prefix accesses to outer clas...
- bug fix: do not prefix accesses to outer class with "this" which is
unnecessary, and even wrong in calls to super constructors.
-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) { |