summaryrefslogtreecommitdiff
path: root/sources/scalac/transformer/AddInterfacesPhase.java
diff options
context:
space:
mode:
authorschinz <schinz@epfl.ch>2005-01-17 14:45:33 +0000
committerschinz <schinz@epfl.ch>2005-01-17 14:45:33 +0000
commitf1bf4d646d7a22f8ad4a9ff39344b8925a8230e7 (patch)
tree695a285352edd547f53e4349b1295d9881f9cf1e /sources/scalac/transformer/AddInterfacesPhase.java
parent4fd6b0098ed0ae704946fc97e97b7f97dee1026e (diff)
downloadscala-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)
Diffstat (limited to 'sources/scalac/transformer/AddInterfacesPhase.java')
-rw-r--r--sources/scalac/transformer/AddInterfacesPhase.java17
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(