summaryrefslogtreecommitdiff
path: root/sources
diff options
context:
space:
mode:
authorpaltherr <paltherr@epfl.ch>2003-04-11 14:33:20 +0000
committerpaltherr <paltherr@epfl.ch>2003-04-11 14:33:20 +0000
commit6bb5add14b677f23683c1cafab7f74beea52f9f9 (patch)
tree19d87fa03338218c88cde636194da9d1cfccb3c0 /sources
parent53e9038cd0437b84ecf833e27c42f70831c01f32 (diff)
downloadscala-6bb5add14b677f23683c1cafab7f74beea52f9f9.tar.gz
scala-6bb5add14b677f23683c1cafab7f74beea52f9f9.tar.bz2
scala-6bb5add14b677f23683c1cafab7f74beea52f9f9.zip
- Renamed class TreeCopier into AttributedTreeC...
- Renamed class TreeCopier into AttributedTreeCopier and moved it into file SubstTransformer.java.
Diffstat (limited to 'sources')
-rw-r--r--sources/scalac/ast/SubstTransformer.java74
-rw-r--r--sources/scalac/ast/TreeCopier.java74
2 files changed, 74 insertions, 74 deletions
diff --git a/sources/scalac/ast/SubstTransformer.java b/sources/scalac/ast/SubstTransformer.java
index cc9ebfa781..038a7a934b 100644
--- a/sources/scalac/ast/SubstTransformer.java
+++ b/sources/scalac/ast/SubstTransformer.java
@@ -242,3 +242,77 @@ public class SubstTransformer extends Transformer {
}
}
}
+
+
+/**
+ * Superclass for tree copiers. Takes care of duplicating symbols and
+ * types when needed.
+ *
+ * @author Michel Schinz
+ * @version 1.0
+ */
+public class AttributedTreeCopier extends SubstTransformer {
+ public AttributedTreeCopier(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;
+ }
+}
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;
- }
-}