diff options
author | schinz <schinz@epfl.ch> | 2004-01-08 14:21:32 +0000 |
---|---|---|
committer | schinz <schinz@epfl.ch> | 2004-01-08 14:21:32 +0000 |
commit | 5059979f3564477abd7f74088649e5c5721e0f14 (patch) | |
tree | 6185bc13cf16f7220699e07e3aaa4dfcef4215b9 /sources | |
parent | c8eb73357f8a871c1772e578cefa4d744a9a5d32 (diff) | |
download | scala-5059979f3564477abd7f74088649e5c5721e0f14.tar.gz scala-5059979f3564477abd7f74088649e5c5721e0f14.tar.bz2 scala-5059979f3564477abd7f74088649e5c5721e0f14.zip |
- bug fix (#268): make *all* private fields pub...
- bug fix (#268): make *all* private fields public after renaming them
Diffstat (limited to 'sources')
-rw-r--r-- | sources/scalac/transformer/AddInterfacesPhase.java | 44 |
1 files changed, 22 insertions, 22 deletions
diff --git a/sources/scalac/transformer/AddInterfacesPhase.java b/sources/scalac/transformer/AddInterfacesPhase.java index c91274df78..5a3bc5b724 100644 --- a/sources/scalac/transformer/AddInterfacesPhase.java +++ b/sources/scalac/transformer/AddInterfacesPhase.java @@ -50,9 +50,29 @@ public class AddInterfacesPhase extends Phase { Debug.show(sym) + " <: " + Debug.show(oldSym); } + boolean ifaceReqrd = needInterface(sym); Type[] newParents; - Scope newMembers; - if (needInterface(sym)) { + Scope newMembers = new Scope(); + + Scope.SymbolIterator oldMembersIt = + new Scope.UnloadIterator(tp.members().iterator()); + while (oldMembersIt.hasNext()) { + Symbol member = oldMembersIt.next(); + + if (ifaceReqrd + && (member.isInitializer() || !memberGoesInInterface(member))) + continue; + + if (member.isPrivate()) { + member.name = uniqueName(member); + member.flags ^= Modifiers.PRIVATE; + } else if (member.isProtected()) + member.flags ^= Modifiers.PROTECTED; + + newMembers.enterOrOverload(member); + } + + if (ifaceReqrd) { // Before this phase, the symbol is a class, but after // it will be an interface. Its type has to be changed // so that: @@ -63,31 +83,11 @@ public class AddInterfacesPhase extends Phase { // interface are kept, and private ones are made // public and renamed. sym.flags |= Modifiers.INTERFACE; - - Scope.SymbolIterator oldMembersIt = - new Scope.UnloadIterator(tp.members().iterator()); - newMembers = new Scope(); - while (oldMembersIt.hasNext()) { - Symbol member = oldMembersIt.next(); - - if (!memberGoesInInterface(member) || member.isInitializer()) - continue; - - if (member.isPrivate()) { - member.name = uniqueName(member); - member.flags ^= Modifiers.PRIVATE; - } else if (member.isProtected()) - member.flags ^= Modifiers.PROTECTED; - - newMembers.enterOrOverload(member); - } - newParents = oldParents; } else { // The symbol is the one of a class which doesn't need // an interface. We need to fix its parents to use // class symbols instead of interface symbols. - newMembers = tp.members(); newParents = new Type[oldParents.length]; for (int i = 0; i < oldParents.length; ++i) { switch (oldParents[i]) { |