summaryrefslogtreecommitdiff
path: root/sources/scalac/ast
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-11-25 09:59:25 +0000
committerpaltherr <paltherr@epfl.ch>2003-11-25 09:59:25 +0000
commitbcfd14b3f33b451b3297d9651082811e41fd65d4 (patch)
treeec8a023321b43a696556c0622e493b12f7e17559 /sources/scalac/ast
parent6e64ba463c2aee75dc1426e7633888d64e73836b (diff)
downloadscala-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.java43
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();
+ }
+
+ //########################################################################
+}