summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/internal/TreeGen.scala
diff options
context:
space:
mode:
authorDen Shabalin <den.shabalin@gmail.com>2013-10-30 13:24:05 +0100
committerDen Shabalin <den.shabalin@gmail.com>2013-11-12 14:04:41 +0100
commit80ddc958a2f7487b03d5334ac7bacf209fe98dd5 (patch)
tree2a540a15eb8e74dd2ad42e16db5a7d800e61a6c9 /src/reflect/scala/reflect/internal/TreeGen.scala
parentd2cee3a5e1d26ba27fd7912d48b1e7af0beb844a (diff)
downloadscala-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.scala22
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 =