diff options
author | paltherr <paltherr@epfl.ch> | 2003-11-25 09:59:25 +0000 |
---|---|---|
committer | paltherr <paltherr@epfl.ch> | 2003-11-25 09:59:25 +0000 |
commit | bcfd14b3f33b451b3297d9651082811e41fd65d4 (patch) | |
tree | ec8a023321b43a696556c0622e493b12f7e17559 /sources/scalac/ast | |
parent | 6e64ba463c2aee75dc1426e7633888d64e73836b (diff) | |
download | scala-bcfd14b3f33b451b3297d9651082811e41fd65d4.tar.gz scala-bcfd14b3f33b451b3297d9651082811e41fd65d4.tar.bz2 scala-bcfd14b3f33b451b3297d9651082811e41fd65d4.zip |
- Added class GenTreeCloner
Diffstat (limited to 'sources/scalac/ast')
-rw-r--r-- | sources/scalac/ast/TreeCloner.java | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/sources/scalac/ast/TreeCloner.java b/sources/scalac/ast/TreeCloner.java index ff05b4d256..35d55fb247 100644 --- a/sources/scalac/ast/TreeCloner.java +++ b/sources/scalac/ast/TreeCloner.java @@ -12,6 +12,7 @@ import java.util.Map; import scalac.Global; import scalac.symtab.Symbol; +import scalac.symtab.SymbolCloner; import scalac.symtab.Type; import scalac.symtab.SymbolSubstTypeMap; import scalac.util.Debug; @@ -87,3 +88,45 @@ public class TreeCloner extends Transformer { //######################################################################## } + + +/** !!! */ +public class GenTreeCloner extends GenTransformer { + + //######################################################################## + // Public Fields + + /** The symbol cloner */ + public final SymbolCloner cloner; + + //######################################################################## + // Public Constructors + + /** Initializes a new instance. */ + public GenTreeCloner(Global global, Type.Map map, SymbolCloner cloner) { + super(global, map); + this.cloner = cloner; + } + + //######################################################################## + // Public Methods + + public Symbol getSymbolFor(Tree tree) { + switch (tree) { + case ValDef(_, _, _, _): + if (tree.symbol().owner().isClass()) break; + Symbol symbol = cloner.cloneSymbol(tree.symbol()); + symbol.setType(transform(symbol.type())); + return symbol; + case LabelDef(_, _, _): + Symbol symbol = cloner.cloneSymbol(tree.symbol()); + symbol.setType(transform(symbol.type())); + return symbol; + } + Symbol symbol = (Symbol)cloner.clones.get(tree.symbol()); + assert !tree.definesSymbol() || symbol != null: tree; + return symbol != null ? symbol : tree.symbol(); + } + + //######################################################################## +} |