summaryrefslogtreecommitdiff
path: root/src/compiler/scala/tools/nsc/ast/Trees.scala
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 /src/compiler/scala/tools/nsc/ast/Trees.scala
parent0b424f22db3fdb2d17424aa09015f6c97aa56036 (diff)
downloadscala-74c681cb2d3e599a899f538c00440bcab19ec5d2.tar.gz
scala-74c681cb2d3e599a899f538c00440bcab19ec5d2.tar.bz2
scala-74c681cb2d3e599a899f538c00440bcab19ec5d2.zip
Moved resetAttrs from UnCurry to Trees
Diffstat (limited to 'src/compiler/scala/tools/nsc/ast/Trees.scala')
-rw-r--r--src/compiler/scala/tools/nsc/ast/Trees.scala22
1 files changed, 22 insertions, 0 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)
+ }
+ }
}