summaryrefslogtreecommitdiff
path: root/sources/scalac
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-07-22 15:56:30 +0000
committerpaltherr <paltherr@epfl.ch>2003-07-22 15:56:30 +0000
commit34c22f876f9d74f9c44694ddd74e6ec561367ba8 (patch)
tree150c6829f564ad1697acfe2c59921c7e1dfd51ee /sources/scalac
parentaaf811cc097da8e5429babe06c96ac8b6edf696a (diff)
downloadscala-34c22f876f9d74f9c44694ddd74e6ec561367ba8.tar.gz
scala-34c22f876f9d74f9c44694ddd74e6ec561367ba8.tar.bz2
scala-34c22f876f9d74f9c44694ddd74e6ec561367ba8.zip
- Replaced SymbolFixer by a subclass of TreeCloner
Diffstat (limited to 'sources/scalac')
-rw-r--r--sources/scalac/transformer/ExpandMixins.java48
1 files changed, 16 insertions, 32 deletions
diff --git a/sources/scalac/transformer/ExpandMixins.java b/sources/scalac/transformer/ExpandMixins.java
index 2ff3d357a3..e812dec44d 100644
--- a/sources/scalac/transformer/ExpandMixins.java
+++ b/sources/scalac/transformer/ExpandMixins.java
@@ -115,8 +115,6 @@ public class ExpandMixins extends Transformer {
List/*<Tree>*/ newBody = new ArrayList();
Scope newMembers = new Scope();
- Map mixedInSymbols/*<Symbol,Symbol>*/ = new HashMap();
-
Symbol newTemplSymbol = tree.symbol().cloneSymbol();
// Start by copying the statement sequence.
@@ -140,8 +138,6 @@ public class ExpandMixins extends Transformer {
SymbolCloner symbolCloner =
new SymbolCloner(global.freshNameCreator);
SymbolSubstTypeMap typeCloner = new SymbolSubstTypeMap();
- TreeCloner treeCloner = new TreeCloner(
- global, symbolCloner.clones, typeCloner);
Tree bc = tree.parents[bcIndex];
final Symbol bcSym = baseTypes[bcIndex].symbol();
@@ -217,12 +213,13 @@ public class ExpandMixins extends Transformer {
newNames.put(symbol.name, clone.name);
typeCloner.insertSymbol(symbol, clone);
newMembers.enterOrOverload(clone);
- mixedInSymbols.put(symbol, clone);
}
// Pass 2: copy members
TreeSymbolCloner treeSymbolCloner =
new TreeSymbolCloner(symbolCloner);
+ TreeCloner treeCloner = new MyTreeCloner(
+ global, symbolCloner.clones, typeCloner, owner);
for (int m = 0; m < mixinBody.length; ++m) {
Tree member = mixinBody[m];
if (symbolCloner.clones.containsKey(member.symbol())) {
@@ -254,10 +251,7 @@ public class ExpandMixins extends Transformer {
}
}
- // Use correct symbols for mixed-in members.
- SymbolFixer symbolFixer = new SymbolFixer(global, mixedInSymbols);
- Tree[] fixedBody =
- symbolFixer.transform((Tree[])newBody.toArray(new Tree[newBody.size()]));
+ Tree[] fixedBody = (Tree[])newBody.toArray(new Tree[newBody.size()]);
Template newTree = make.Template(tree.pos, newBaseClasses, fixedBody);
newTree.setSymbol(newTemplSymbol);
newTree.setType(Type.compoundType(newBaseTypes, newMembers, owner));
@@ -318,38 +312,28 @@ public class ExpandMixins extends Transformer {
}
//########################################################################
+ // Private Class - MyTreeCloner
+
+ private static class MyTreeCloner extends TreeCloner {
- protected static class SymbolFixer extends Transformer {
- protected final Map/*<Symbol,Symbol>*/ mixedInSymbols;
+ private final Symbol clasz;
- public SymbolFixer(Global global, Map mixedInSymbols) {
- super(global);
- this.mixedInSymbols = mixedInSymbols;
+ public MyTreeCloner(Global global, Map symbols, Type.Map types,
+ Symbol clasz)
+ {
+ super(global, symbols, types);
+ this.clasz = clasz;
}
public Tree transform(Tree tree) {
switch (tree) {
- case Ident(_): {
- Symbol sym = tree.symbol();
- if (mixedInSymbols.containsKey(sym))
- return gen.Ident((Symbol)mixedInSymbols.get(sym));
- else
- return super.transform(tree);
- }
-
- case Select(This(_), _):
- case Select(Super(_), _): {
- Symbol sym = tree.symbol();
- if (mixedInSymbols.containsKey(sym))
- // TODO generate this.ident instead of just ident
- return gen.Ident((Symbol)mixedInSymbols.get(sym));
- else
- return super.transform(tree);
- }
-
+ case Super(Tree qualifier):
+ return gen.This(tree.pos, clasz);
default:
return super.transform(tree);
}
}
}
+
+ //########################################################################
}