summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-07-03 08:22:47 +0000
committerpaltherr <paltherr@epfl.ch>2003-07-03 08:22:47 +0000
commita0361ef7c1b1c288ba58691c58562fc895694105 (patch)
treeb4e9b9a801fd02be7e027e7fe66f2402a6bdedcb
parenta6389e9170fba8c9ba4227f9c029b240fff386e3 (diff)
downloadscala-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.java17
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));