diff options
author | Martin Odersky <odersky@gmail.com> | 2006-06-27 16:36:54 +0000 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2006-06-27 16:36:54 +0000 |
commit | 74c681cb2d3e599a899f538c00440bcab19ec5d2 (patch) | |
tree | 678573c521b0b2da2f0ed9fe3f4e1a3f96586b3b /src/compiler/scala/tools/nsc/ast/Trees.scala | |
parent | 0b424f22db3fdb2d17424aa09015f6c97aa56036 (diff) | |
download | scala-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.scala | 22 |
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) + } + } } |