aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/ast
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2013-08-09 14:30:38 +0200
committerMartin Odersky <odersky@gmail.com>2013-08-09 14:30:38 +0200
commit73525ada82375ef0ff4be61a3bfbae8c74963ad0 (patch)
treed7b403c60d6eb5471ead5f65b94feecb982f7007 /src/dotty/tools/dotc/ast
parenta326b06088d7eadde03bbcd56883b62fcfd21011 (diff)
downloaddotty-73525ada82375ef0ff4be61a3bfbae8c74963ad0.tar.gz
dotty-73525ada82375ef0ff4be61a3bfbae8c74963ad0.tar.bz2
dotty-73525ada82375ef0ff4be61a3bfbae8c74963ad0.zip
Added support for pattern variables and Bind.
Also some fixes in adapt wrt patterns.
Diffstat (limited to 'src/dotty/tools/dotc/ast')
-rw-r--r--src/dotty/tools/dotc/ast/Trees.scala14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/ast/Trees.scala b/src/dotty/tools/dotc/ast/Trees.scala
index ab1517f9c..5ae87d9ad 100644
--- a/src/dotty/tools/dotc/ast/Trees.scala
+++ b/src/dotty/tools/dotc/ast/Trees.scala
@@ -796,6 +796,15 @@ object Trees {
// ----- Position handling -----------------------------------------
+ def foreachSubTreeOf(tree: Tree)(f: Tree => Unit): Unit = {
+ val traverser = new TreeTraverser {
+ def traverse(tree: Tree) = foldOver(f(tree), tree)
+ }
+ traverser.traverse(tree)
+ }
+
+ // ----- Position handling -----------------------------------------
+
protected implicit def pos(implicit ctx: Context): Position = ctx.position
def defPos(sym: Symbol)(implicit ctx: Context) = ctx.position union sym.coord.toPosition
@@ -1182,6 +1191,11 @@ object Trees {
}
}
+ abstract class TreeTraverser extends TreeAccumulator[Unit] {
+ def traverse(tree: Tree): Unit
+ def apply(x: Unit, tree: Tree) = traverse(tree)
+ }
+
/** Fold `f` over all tree nodes, in depth-first, prefix order */
class DeepFolder[X](f: (X, Tree) => X) extends TreeAccumulator[X] {
def apply(x: X, tree: Tree): X = foldOver(f(x, tree), tree)