summaryrefslogtreecommitdiff
path: root/sources/scalac/ast/TreeCopier.java
diff options
context:
space:
mode:
Diffstat (limited to 'sources/scalac/ast/TreeCopier.java')
-rw-r--r--sources/scalac/ast/TreeCopier.java74
1 files changed, 0 insertions, 74 deletions
diff --git a/sources/scalac/ast/TreeCopier.java b/sources/scalac/ast/TreeCopier.java
index 092f7960c2..2f12558655 100644
--- a/sources/scalac/ast/TreeCopier.java
+++ b/sources/scalac/ast/TreeCopier.java
@@ -13,77 +13,3 @@ import scalac.*;
import scalac.util.Name;
import scalac.symtab.*;
import java.util.*;
-
-/**
- * Superclass for tree copiers. Takes care of duplicating symbols and
- * types when needed.
- *
- * @author Michel Schinz
- * @version 1.0
- */
-
-public class TreeCopier extends SubstTransformer {
- public TreeCopier(Global global, TreeFactory make) {
- super(global, make);
- }
-
- private boolean inPattern = false;
-
- // Return true iff tree's symbol must be copied. By default,
- // symbols which are defined are copied.
- public boolean mustCopySymbol(Tree tree) {
- switch (tree) {
- case Ident(Name name):
- return (inPattern && name.isVariable()) || tree.definesSymbol();
- default:
- return tree.definesSymbol();
- }
- }
-
- public Tree copy(Tree tree) {
- // Copy all symbols that have to be copied.
- Traverser symCopier = new Traverser() {
- public void traverse(Tree tree) {
- if (tree.hasSymbol()) {
- Symbol sym = tree.symbol();
-
- if (sym != Symbol.NONE
- && mustCopySymbol(tree)
- && !symbolMap.containsKey(sym)) {
- Symbol newSym = sym.cloneSymbol();
-
- if (symbolMap.containsKey(newSym.owner()))
- newSym.setOwner((Symbol)symbolMap.get(newSym.owner()));
-
- symbolMap.put(sym, newSym);
- }
- }
- switch (tree) {
- case CaseDef(Tree pat, Tree guard, Tree body):
- inPattern = true; traverse(pat); inPattern = false;
- traverse(guard);
- traverse(body);
- break;
- default:
- super.traverse(tree);
- }
- }
- };
- symCopier.traverse(tree);
-
- // Copy tree
- Tree newTree = transform(tree);
-
- // Update symbols
- Iterator symbolsIt = symbolMap.entrySet().iterator();
- while (symbolsIt.hasNext()) {
- Map.Entry symPair = (Map.Entry)symbolsIt.next();
- Symbol oldSym = (Symbol)symPair.getKey();
- Symbol newSym = (Symbol)symPair.getValue();
-
- newSym.setInfo(smApplier.apply(typeMap.apply(oldSym.info())));
- }
-
- return newTree;
- }
-}