diff options
author | Burak Emir <emir@epfl.ch> | 2007-08-20 05:20:39 +0000 |
---|---|---|
committer | Burak Emir <emir@epfl.ch> | 2007-08-20 05:20:39 +0000 |
commit | e8844dd9190bc1817be6210fca467d386df40f70 (patch) | |
tree | eef13eb479792f687b54271b432ab126c9272a9d | |
parent | 60718f6da04ff19571cc7e276acf455c99d090b1 (diff) | |
download | scala-e8844dd9190bc1817be6210fca467d386df40f70.tar.gz scala-e8844dd9190bc1817be6210fca467d386df40f70.tar.bz2 scala-e8844dd9190bc1817be6210fca467d386df40f70.zip |
split object resetAttrs into a function and a c...
split object resetAttrs into a function and a class, shielding its
mutable state
-rw-r--r-- | src/compiler/scala/tools/nsc/ast/Trees.scala | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/compiler/scala/tools/nsc/ast/Trees.scala b/src/compiler/scala/tools/nsc/ast/Trees.scala index 3681307413..42a0eceaaf 100644 --- a/src/compiler/scala/tools/nsc/ast/Trees.scala +++ b/src/compiler/scala/tools/nsc/ast/Trees.scala @@ -1568,12 +1568,19 @@ trait Trees { } } + + /** resets symbol and tpe fields in a tree, @see ResetAttrsTraverse + */ + def resetAttrs[A<:Tree](x:A):A = {new ResetAttrsTraverser().traverse(x); x} + /** A traverser which resets symbol and tpe fields of all nodes in a given tree * except for (1) TypeTree nodes, whose <code>.tpe</code> field is kept and - * (2) is a <code>.symbol</code> field refers to a symbol which is defined + * (2) if a <code>.symbol</code> field refers to a symbol which is defined * outside the tree, it is also kept. + * + * (bq:) This traverser has mutable state and should be discarded after use */ - object resetAttrs extends Traverser { + class ResetAttrsTraverser extends Traverser { private val erasedSyms = new HashSet[Symbol](8) override def traverse(tree: Tree): Unit = tree match { case EmptyTree | TypeTree() => |