diff options
author | paltherr <paltherr@epfl.ch> | 2003-07-03 08:22:47 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2003-07-03 08:22:47 +0000 |
commit | a0361ef7c1b1c288ba58691c58562fc895694105 (patch) | |
tree | b4e9b9a801fd02be7e027e7fe66f2402a6bdedcb | |
parent | a6389e9170fba8c9ba4227f9c029b240fff386e3 (diff) | |
download | scala-a0361ef7c1b1c288ba58691c58562fc895694105.tar.gz scala-a0361ef7c1b1c288ba58691c58562fc895694105.tar.bz2 scala-a0361ef7c1b1c288ba58691c58562fc895694105.zip |
- Added method updateMemberInfo.
- Changed deepCloneSymbol to use it.
- Fixed getClassSymbol to also update the info of members that are
moved (not cloned) into the class.
-rw-r--r-- | sources/scalac/transformer/AddInterfacesPhase.java | 17 |
1 files changed, 11 insertions, 6 deletions
diff --git a/sources/scalac/transformer/AddInterfacesPhase.java b/sources/scalac/transformer/AddInterfacesPhase.java index ee3f939957..6bf1a8fe40 100644 --- a/sources/scalac/transformer/AddInterfacesPhase.java +++ b/sources/scalac/transformer/AddInterfacesPhase.java @@ -226,12 +226,19 @@ public class AddInterfacesPhase extends PhaseDescriptor { } else symMap = map; - Type.SubstThisMap thisTypeMap = new Type.SubstThisMap(oldOwner, newOwner); - Type newTp = thisTypeMap.apply(substParams(clone.info(), symMap)); - clone.updateInfo(newTp); + updateMemberInfo(clone, oldOwner, newOwner, symMap); return clone; } + protected void updateMemberInfo(Symbol member, + Symbol oldOwner, + Symbol newOwner, + SymbolSubstTypeMap map) { + Type.SubstThisMap thisTypeMap = new Type.SubstThisMap(oldOwner, newOwner); + Type newTp = thisTypeMap.apply(substParams(member.info(), map)); + member.updateInfo(newTp); + } + protected HashMap ifaceToClass = new HashMap(); protected HashMap classToIFace = new HashMap(); @@ -275,8 +282,6 @@ public class AddInterfacesPhase extends PhaseDescriptor { // modified anymore. classSubst = Collections.unmodifiableMap(classSubst); - Type.SubstThisMap thisTpMap = new Type.SubstThisMap(ifaceSym, classSym); - Symbol[] vparams = classConstrSym.valueParams(); for (int i = 0; i < vparams.length; ++i) { vparams[i].setOwner(classConstrSym); @@ -309,13 +314,13 @@ public class AddInterfacesPhase extends PhaseDescriptor { paramsSubst); ifaceMemberSym.flags |= Modifiers.DEFERRED; - classMemberSym.updateInfo(thisTpMap.apply(classMemberSym.info())); classMembersMap.put(ifaceMemberSym, classMemberSym); } else { // Member doesn't go in interface, we just make it // owned by the class. classMemberSym = ifaceMemberSym; classMemberSym.setOwner(classSym); + updateMemberInfo(classMemberSym, ifaceSym, classSym, paramsSubst); } Type nextMemberTp = classMemberSym.nextInfo(); classMemberSym.updateInfo(paramsSubst.apply(nextMemberTp)); |