diff options
author | Den Shabalin <den.shabalin@gmail.com> | 2013-10-30 13:24:05 +0100 |
---|---|---|
committer | Den Shabalin <den.shabalin@gmail.com> | 2013-11-12 14:04:41 +0100 |
commit | 80ddc958a2f7487b03d5334ac7bacf209fe98dd5 (patch) | |
tree | 2a540a15eb8e74dd2ad42e16db5a7d800e61a6c9 /src/reflect/scala/reflect/internal/TreeGen.scala | |
parent | d2cee3a5e1d26ba27fd7912d48b1e7af0beb844a (diff) | |
download | scala-80ddc958a2f7487b03d5334ac7bacf209fe98dd5.tar.gz scala-80ddc958a2f7487b03d5334ac7bacf209fe98dd5.tar.bz2 scala-80ddc958a2f7487b03d5334ac7bacf209fe98dd5.zip |
deduplicate tuple tree creation code
Previously tuple tree generation code has been implemented in
three place: tree builder, tree gen, build utils. Now it's just
defined once in tree gen.
Diffstat (limited to 'src/reflect/scala/reflect/internal/TreeGen.scala')
-rw-r--r-- | src/reflect/scala/reflect/internal/TreeGen.scala | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/reflect/scala/reflect/internal/TreeGen.scala b/src/reflect/scala/reflect/internal/TreeGen.scala index cf7c729a6a..c87eeea8e0 100644 --- a/src/reflect/scala/reflect/internal/TreeGen.scala +++ b/src/reflect/scala/reflect/internal/TreeGen.scala @@ -279,11 +279,23 @@ abstract class TreeGen extends macros.TreeBuilder { def mkNamedArg(lhs: Tree, rhs: Tree): Tree = atPos(rhs.pos)(AssignOrNamedArg(lhs, rhs)) /** Builds a tuple */ - def mkTuple(elems: List[Tree]): Tree = - if (elems.isEmpty) Literal(Constant(())) - else Apply( - Select(mkAttributedRef(TupleClass(elems.length).caseModule), nme.apply), - elems) + def mkTuple(elems: List[Tree], flattenUnary: Boolean = true): Tree = elems match { + case Nil => + Literal(Constant(())) + case tree :: Nil if flattenUnary => + tree + case _ => + Apply(scalaDot(TupleClass(elems.length).companionModule.name), elems) + } + + def mkTupleType(elems: List[Tree], flattenUnary: Boolean = true): Tree = elems match { + case Nil => + scalaDot(tpnme.Unit) + case List(tree) if flattenUnary => + tree + case _ => + AppliedTypeTree(scalaDot(TupleClass(elems.length).name), elems) + } // tree1 AND tree2 def mkAnd(tree1: Tree, tree2: Tree): Tree = |