diff options
author | schinz <schinz@epfl.ch> | 2005-01-17 14:45:33 +0000 |
---|---|---|
committer | schinz <schinz@epfl.ch> | 2005-01-17 14:45:33 +0000 |
commit | f1bf4d646d7a22f8ad4a9ff39344b8925a8230e7 (patch) | |
tree | 695a285352edd547f53e4349b1295d9881f9cf1e | |
parent | 4fd6b0098ed0ae704946fc97e97b7f97dee1026e (diff) | |
download | scala-f1bf4d646d7a22f8ad4a9ff39344b8925a8230e7.tar.gz scala-f1bf4d646d7a22f8ad4a9ff39344b8925a8230e7.tar.bz2 scala-f1bf4d646d7a22f8ad4a9ff39344b8925a8230e7.zip |
- bug fix: nested private classes are no longer...
- bug fix: nested private classes are no longer renamed and made public,
- introduced a few hacks to work around problems caused by our use of
setOwner (to be removed during next redesign)
-rw-r--r-- | sources/scalac/transformer/AddInterfacesPhase.java | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/sources/scalac/transformer/AddInterfacesPhase.java b/sources/scalac/transformer/AddInterfacesPhase.java index 9b2447b119..aa2eb23ebb 100644 --- a/sources/scalac/transformer/AddInterfacesPhase.java +++ b/sources/scalac/transformer/AddInterfacesPhase.java @@ -56,7 +56,7 @@ public class AddInterfacesPhase extends Phase { && (member.isInitializer() || !memberGoesInInterface(member))) continue; - if (member.isPrivate()) { + if (member.isPrivate() && !member.isClass()) { member.name = uniqueName(member); member.flags ^= Modifiers.PRIVATE; } else if (member.isProtected()) @@ -96,6 +96,9 @@ public class AddInterfacesPhase extends Phase { } return Type.compoundType(newParents, newMembers, sym); + } else if (sym.owner().isClass() || sym.isParameter()) { + getClassSymbol(sym.enclClass()); + return sym.info(); } else return tp; } @@ -205,6 +208,18 @@ public class AddInterfacesPhase extends Phase { // Member doesn't go in interface, we just make it // owned by the class. classMemberSym = ifaceMemberSym; + + // [HACK] the following forces the evaluation of + // the type of all value parameters, which might + // otherwise become invalid once the owner is + // changed. + classMemberSym.info(); + if (classMemberSym.isMethod()) { + Symbol[] vp = classMemberSym.valueParams(); + for (int i = 0; i < vp.length; ++i) + vp[i].info(); + } + classMemberSym.setOwner(classSym); classMemberSym.updateInfo( thisTypeMap.apply( |