diff options
author | paltherr <paltherr@epfl.ch> | 2005-02-18 18:40:21 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2005-02-18 18:40:21 +0000 |
commit | ded727e045d47103ccd9a576d2e15bb1ca2695a2 (patch) | |
tree | 59ccebf7c1fe94d9c9413d0326ca56d26bacc21c /sources/scalac/transformer | |
parent | ee4c236bcf98fbb10d73933ddb1c005412eaa947 (diff) | |
download | scala-ded727e045d47103ccd9a576d2e15bb1ca2695a2.tar.gz scala-ded727e045d47103ccd9a576d2e15bb1ca2695a2.tar.bz2 scala-ded727e045d47103ccd9a576d2e15bb1ca2695a2.zip |
- Fixed and added bug 399
Diffstat (limited to 'sources/scalac/transformer')
-rw-r--r-- | sources/scalac/transformer/ExpandMixinsPhase.java | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/sources/scalac/transformer/ExpandMixinsPhase.java b/sources/scalac/transformer/ExpandMixinsPhase.java index e56e1840f3..0a6c53fdfa 100644 --- a/sources/scalac/transformer/ExpandMixinsPhase.java +++ b/sources/scalac/transformer/ExpandMixinsPhase.java @@ -178,9 +178,9 @@ public class ExpandMixinsPhase extends Phase { assert supertype.symbol().isSubClass(tree.symbol().owner()): tree + " -- " + Debug.show(clasz); global.nextPhase(); - Symbol symbol = tree.symbol().overridingSymbol(supertype); + Symbol symbol = tree.symbol().overriddenSymbol(supertype); + assert !symbol.isNone(): Debug.show(tree, clasz, supertype); global.prevPhase(); - assert !symbol.isNone(): tree + " -- " + Debug.show(clasz); return symbol; case Super(_, _): case This(_): @@ -376,16 +376,22 @@ public class ExpandMixinsPhase extends Phase { } } + private Symbol getMemberOrigin(Symbol member) { + Object origin = origins.get(member); + return origin == null ? member : (Symbol)origin; + } + private void createMixedInMemberSymbols(Scope symbols) { Scope scope = clasz.members(); for (SymbolIterator i = symbols.iterator(); i.hasNext();) { Symbol member = i.next(); boolean shadowed = member.isPrivate() || member.isInitializer() || member.overridingSymbol(clasz.thisType()) != member; - Symbol origin = (Symbol)origins.get(member); - if (!shadowed) { - if (member.overriddenSymbol(parents[0]) == origin) { - cloner.clones.put(member, origin); + Symbol origin = getMemberOrigin(member); + if (!shadowed && origin != null) { + Symbol overridden = member.overriddenSymbol(parents[0]); + if (origin == getMemberOrigin(overridden)) { + cloner.clones.put(member, overridden); continue; } } |