diff options
author | paltherr <paltherr@epfl.ch> | 2003-07-10 15:34:13 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2003-07-10 15:34:13 +0000 |
commit | 3b96193f16e4392e36fdc32e11d28304d46923ff (patch) | |
tree | ba5cce1c3339ed3215259b903309ce247e6a53b5 /sources/scalac/transformer | |
parent | 7a4d11c99780a6de513cd818f41b923df0502a6c (diff) | |
download | scala-3b96193f16e4392e36fdc32e11d28304d46923ff.tar.gz scala-3b96193f16e4392e36fdc32e11d28304d46923ff.tar.bz2 scala-3b96193f16e4392e36fdc32e11d28304d46923ff.zip |
- Added method Symbol.cloneSymbol(Symbol)
Diffstat (limited to 'sources/scalac/transformer')
-rw-r--r-- | sources/scalac/transformer/AddInterfacesPhase.java | 17 | ||||
-rw-r--r-- | sources/scalac/transformer/Erasure.java | 3 | ||||
-rw-r--r-- | sources/scalac/transformer/ExpandMixins.java | 23 | ||||
-rw-r--r-- | sources/scalac/transformer/LambdaLift.java | 6 |
4 files changed, 16 insertions, 33 deletions
diff --git a/sources/scalac/transformer/AddInterfacesPhase.java b/sources/scalac/transformer/AddInterfacesPhase.java index 3c51efae91..754d3e1b8c 100644 --- a/sources/scalac/transformer/AddInterfacesPhase.java +++ b/sources/scalac/transformer/AddInterfacesPhase.java @@ -200,13 +200,6 @@ public class AddInterfacesPhase extends PhaseDescriptor { else return className; } - /** Clone symbol and set its owner immediately. */ - protected Symbol cloneSymbol(Symbol original, Symbol newOwner) { - Symbol clone = original.cloneSymbol(); - clone.setOwner(newOwner); - return clone; - } - /** Clone the symbol itself, and if it represents a method, clone * its type and value arguments too, then update the symbol's type * to use these new symbols. Also applies the given substitution @@ -216,20 +209,20 @@ public class AddInterfacesPhase extends PhaseDescriptor { Symbol newOwner, SymbolSubstTypeMap map) { SymbolSubstTypeMap symMap; - Symbol clone = cloneSymbol(original, newOwner); + Symbol clone = original.cloneSymbol(newOwner); if (clone.isMethod()) { Symbol[] tparams = clone.typeParams(); Symbol[] newTParams = new Symbol[tparams.length]; symMap = new SymbolSubstTypeMap(map); for (int i = 0; i < tparams.length; ++i) { - newTParams[i] = cloneSymbol(tparams[i], clone); + newTParams[i] = tparams[i].cloneSymbol(clone); symMap.insertSymbol(tparams[i], newTParams[i]); } Symbol[] vparams = clone.valueParams(); Symbol[] newVParams = new Symbol[vparams.length]; for (int i = 0; i < vparams.length; ++i) { - newVParams[i] = cloneSymbol(vparams[i], clone); + newVParams[i] = vparams[i].cloneSymbol(clone); newVParams[i].updateInfo(symMap.apply(newVParams[i].info())); symMap.insertSymbol(vparams[i], newVParams[i]); } @@ -266,7 +259,7 @@ public class AddInterfacesPhase extends PhaseDescriptor { Symbol classSym = (Symbol)ifaceToClass.get(ifaceSym); if (classSym == null) { - classSym = cloneSymbol(ifaceSym, ifaceSym.owner()); + classSym = ifaceSym.cloneSymbol(ifaceSym.owner()); classSym.name = className(ifaceSym.name); classSym.flags &= ~Modifiers.INTERFACE; @@ -282,7 +275,7 @@ public class AddInterfacesPhase extends PhaseDescriptor { Map classSubst = newClassSubst(classSym); Symbol[] tparams = classConstrSym.typeParams(); for (int i = 0; i < tparams.length; ++i) { - Symbol newParam = cloneSymbol(tparams[i], classConstrSym); + Symbol newParam = tparams[i].cloneSymbol(classConstrSym); classSubst.put(tparams[i], newParam); } diff --git a/sources/scalac/transformer/Erasure.java b/sources/scalac/transformer/Erasure.java index 1722eb3677..63bb24931c 100644 --- a/sources/scalac/transformer/Erasure.java +++ b/sources/scalac/transformer/Erasure.java @@ -271,8 +271,7 @@ public class Erasure extends Transformer implements Modifiers { // where owner of all parameters is bridge symbol itself. Symbol[] params1 = new Symbol[params.length]; for (int i = 0; i < params.length; i++) { - params1[i] = params[i].cloneSymbol(); - params1[i].setOwner(bridgeSym); + params1[i] = params[i].cloneSymbol(bridgeSym); } bridgeSym.setType(Type.MethodType(params1, restp)); diff --git a/sources/scalac/transformer/ExpandMixins.java b/sources/scalac/transformer/ExpandMixins.java index 0cb5638ceb..9c589cf4f8 100644 --- a/sources/scalac/transformer/ExpandMixins.java +++ b/sources/scalac/transformer/ExpandMixins.java @@ -122,11 +122,11 @@ public class ExpandMixins extends Transformer { return (Tree[][])s.toArray(new Tree[s.size()][]); } - protected Symbol renameSymbol(Map symbolMap, Symbol oldSymbol) { + protected Symbol renameSymbol(Map symbolMap, Symbol oldSymbol, Symbol newOwner) { Name newName = freshNameCreator.newName(oldSymbol.name); if (oldSymbol.name.isTypeName()) newName = newName.toTypeName(); else if (oldSymbol.name.isConstrName()) newName = newName.toConstrName(); - Symbol newSymbol = oldSymbol.cloneSymbol(); + Symbol newSymbol = oldSymbol.cloneSymbol(newOwner); newSymbol.name = newName; symbolMap.put(oldSymbol, newSymbol); @@ -212,8 +212,7 @@ public class ExpandMixins extends Transformer { Tree actual = sectionA[p]; Symbol memberSymbol = - renameSymbol(symbolMap, formal.symbol()); - memberSymbol.setOwner(owner); + renameSymbol(symbolMap, formal.symbol(), owner); Type memberType = typeMap.apply(formal.tpe.type()); memberSymbol.updateInfo(memberType); @@ -248,8 +247,11 @@ public class ExpandMixins extends Transformer { if (memSymT != memSymM) { if ((memSym.flags & Modifiers.DEFERRED) != 0) leftOutMembers.add(member); - else - renameSymbol(symbolMap, memSym); + else { + Symbol newMemSym = renameSymbol(symbolMap, memSym, owner); + newMembers.enterOrOverload(newMemSym); + mixedInSymbols.put(memSym, newMemSym); + } } } @@ -267,15 +269,6 @@ public class ExpandMixins extends Transformer { treeCopier.popSymbolSubst(); newBody.add(newMember); - - if (newMember.definesSymbol()) { - Symbol sym = newMember.symbol(); - - sym.setOwner(owner); - newMembers.enterOrOverload(sym); - - mixedInSymbols.put(member.symbol(), newMember.symbol()); - } } } diff --git a/sources/scalac/transformer/LambdaLift.java b/sources/scalac/transformer/LambdaLift.java index 201c2b6152..2b8a05135d 100644 --- a/sources/scalac/transformer/LambdaLift.java +++ b/sources/scalac/transformer/LambdaLift.java @@ -436,10 +436,9 @@ public class LambdaLift extends OwnerTransformer Symbol[] freevars = get(free.ftvs, owner).toArray(); Symbol[] params = new Symbol[freevars.length]; for (int i = 0; i < params.length; i++) { - params[i] = freevars[i].cloneSymbol(); + params[i] = freevars[i].cloneSymbol(owner); params[i].pos = owner.pos; params[i].flags = PARAM | SYNTHETIC; - params[i].setOwner(owner); } for (int i = 0; i < params.length; i++) params[i].setInfo(freevars[i].info().subst(freevars, params)); @@ -450,11 +449,10 @@ public class LambdaLift extends OwnerTransformer Symbol[] freevars = get(free.fvs, owner).toArray(); Symbol[] params = new Symbol[freevars.length]; for (int i = 0; i < params.length; i++) { - params[i] = freevars[i].cloneSymbol(); + params[i] = freevars[i].cloneSymbol(owner); params[i].pos = owner.pos; params[i].flags &= CAPTURED; params[i].flags |= PARAM | SYNTHETIC; - params[i].setOwner(owner); params[i].setInfo(freevars[i].type()); } return params; |