summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2006-06-27 16:36:54 +0000
committerMartin Odersky <odersky@gmail.com>2006-06-27 16:36:54 +0000
commit74c681cb2d3e599a899f538c00440bcab19ec5d2 (patch)
tree678573c521b0b2da2f0ed9fe3f4e1a3f96586b3b
parent0b424f22db3fdb2d17424aa09015f6c97aa56036 (diff)
downloadscala-74c681cb2d3e599a899f538c00440bcab19ec5d2.tar.gz
scala-74c681cb2d3e599a899f538c00440bcab19ec5d2.tar.bz2
scala-74c681cb2d3e599a899f538c00440bcab19ec5d2.zip
Moved resetAttrs from UnCurry to Trees
-rw-r--r--src/compiler/scala/tools/nsc/ast/Trees.scala22
-rw-r--r--src/compiler/scala/tools/nsc/transform/UnCurry.scala19
2 files changed, 22 insertions, 19 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/Trees.scala b/src/compiler/scala/tools/nsc/ast/Trees.scala
index cfa5c3b8a8..9566198d18 100644
--- a/src/compiler/scala/tools/nsc/ast/Trees.scala
+++ b/src/compiler/scala/tools/nsc/ast/Trees.scala
@@ -6,6 +6,7 @@
package scala.tools.nsc.ast
+import util.HashSet
import java.io.{PrintWriter, StringWriter}
import scala.tools.nsc.symtab.Flags
import scala.tools.nsc.util.{Position, SourceFile}
@@ -1243,5 +1244,26 @@ trait Trees requires Global {
}
}
+ /** A traverser which resets symbol and tpe fields of all nodes in a given tree
+ * except for (1) TypeTree nodes, whose .tpe field is kept and
+ * (2) is a .symbol field refers to a symbol which is defined outside the
+ * tree, it is also kept.
+ */
+ object resetAttrs extends Traverser {
+ private val erasedSyms = new HashSet[Symbol](8)
+ override def traverse(tree: Tree): unit = tree match {
+ case EmptyTree | TypeTree() =>
+ ;
+ case _: DefTree =>
+ erasedSyms.addEntry(tree.symbol);
+ tree.symbol = NoSymbol;
+ tree.tpe = null;
+ super.traverse(tree)
+ case _ =>
+ if (tree.hasSymbol && erasedSyms.contains(tree.symbol)) tree.symbol = NoSymbol;
+ tree.tpe = null;
+ super.traverse(tree)
+ }
+ }
}
diff --git a/src/compiler/scala/tools/nsc/transform/UnCurry.scala b/src/compiler/scala/tools/nsc/transform/UnCurry.scala
index 6e04ccfd11..9039b6b5c8 100644
--- a/src/compiler/scala/tools/nsc/transform/UnCurry.scala
+++ b/src/compiler/scala/tools/nsc/transform/UnCurry.scala
@@ -460,23 +460,4 @@ abstract class UnCurry extends InfoTransform {
}
}
}
-
- private val resetAttrs = new Traverser {
- val erasedSyms = new HashSet[Symbol](8)
- override def traverse(tree: Tree): unit = tree match {
- case EmptyTree | TypeTree() =>
- ;
- case Bind(_, body) =>
- if (tree.hasSymbol && tree.symbol != NoSymbol) {
- erasedSyms.addEntry(tree.symbol);
- tree.symbol = NoSymbol;
- }
- tree.tpe = null;
- super.traverse(tree)
- case _ =>
- if (tree.hasSymbol && erasedSyms.contains(tree.symbol)) tree.symbol = NoSymbol;
- tree.tpe = null;
- super.traverse(tree)
- }
- }
}