From c8a9329ff9b2a6ea99eef7234c9f84c0bfe0166b Mon Sep 17 00:00:00 2001 From: Den Shabalin Date: Wed, 11 Sep 2013 19:22:48 +0200 Subject: add syntactic extractor for assignment-like trees There are three kinds of assign-like trees: 1. Assign(lhs, rhs) // $lhs = $rhs 3. AssignOrNamedArg(lhs, rhs) // $lhs = $rhs 2. Apply(Select(f, nme.update), args :+ rhs) // $f(..$args) = $rhs New syntactic combinator unifies all of them and lets users not to think about these implementations details. --- src/reflect/scala/reflect/internal/TreeGen.scala | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'src/reflect/scala/reflect/internal/TreeGen.scala') diff --git a/src/reflect/scala/reflect/internal/TreeGen.scala b/src/reflect/scala/reflect/internal/TreeGen.scala index 26adf20c52..0050df67d8 100644 --- a/src/reflect/scala/reflect/internal/TreeGen.scala +++ b/src/reflect/scala/reflect/internal/TreeGen.scala @@ -443,4 +443,12 @@ abstract class TreeGen extends macros.TreeBuilder { case head :: Nil => head case _ => gen.mkBlock(stats) } + + /** Create a tree representing an assignment */ + def mkAssign(lhs: Tree, rhs: Tree): Tree = lhs match { + case Apply(fn, args) => + Apply(atPos(fn.pos)(Select(fn, nme.update)), args :+ rhs) + case _ => + Assign(lhs, rhs) + } } -- cgit v1.2.3