summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorschinz <schinz@epfl.ch>2004-01-08 14:21:32 +0000
committerschinz <schinz@epfl.ch>2004-01-08 14:21:32 +0000
commit5059979f3564477abd7f74088649e5c5721e0f14 (patch)
tree6185bc13cf16f7220699e07e3aaa4dfcef4215b9
parentc8eb73357f8a871c1772e578cefa4d744a9a5d32 (diff)
downloadscala-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
-rw-r--r--sources/scalac/transformer/AddInterfacesPhase.java44
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]) {