diff options
author | Martin Odersky <odersky@gmail.com> | 2013-08-09 14:30:38 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2013-08-09 14:30:38 +0200 |
commit | 73525ada82375ef0ff4be61a3bfbae8c74963ad0 (patch) | |
tree | d7b403c60d6eb5471ead5f65b94feecb982f7007 /src/dotty/tools/dotc/ast | |
parent | a326b06088d7eadde03bbcd56883b62fcfd21011 (diff) | |
download | dotty-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.scala | 14 |
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) |