summaryrefslogtreecommitdiff
path: root/test/files/scalacheck/quasiquotes/TermConstructionProps.scala
diff options
context:
space:
mode:
authorDenys Shabalin <denys.shabalin@typesafe.com>2014-02-10 14:29:59 +0100
committerDenys Shabalin <denys.shabalin@typesafe.com>2014-02-10 14:44:27 +0100
commit2b67f8b94f9e95c5fb7be0e6d6c4718a6e045ec4 (patch)
tree437aa34986ad2b060b5ef52533a7f8abf5b199e4 /test/files/scalacheck/quasiquotes/TermConstructionProps.scala
parent08e51dfec50842253afb87cc5ae3c7400dc18ced (diff)
downloadscala-2b67f8b94f9e95c5fb7be0e6d6c4718a6e045ec4.tar.gz
scala-2b67f8b94f9e95c5fb7be0e6d6c4718a6e045ec4.tar.bz2
scala-2b67f8b94f9e95c5fb7be0e6d6c4718a6e045ec4.zip
Make handling of tuples more consistent in quasi-quotes
On one hand we know that q"($expr)" is the same as q"$expr". On the other if we wrap it into a list and splice as q"(..$expr)" we get a Tuple1 constructor call which is inconsistent. This pull request fixes this inconsistency by making q"(..$expr)" being equivalent q"(${expr.head})" for single-element list. We also add support for matching of expressions as single-element tuples (similarly to blocks) and remove liftables and unliftables for Tuple1 (which aren't clearly defined any longer due to q"(foo)" == q"foo" invariant).
Diffstat (limited to 'test/files/scalacheck/quasiquotes/TermConstructionProps.scala')
-rw-r--r--test/files/scalacheck/quasiquotes/TermConstructionProps.scala5
1 files changed, 5 insertions, 0 deletions
diff --git a/test/files/scalacheck/quasiquotes/TermConstructionProps.scala b/test/files/scalacheck/quasiquotes/TermConstructionProps.scala
index 058880a25c..c1aa23ac23 100644
--- a/test/files/scalacheck/quasiquotes/TermConstructionProps.scala
+++ b/test/files/scalacheck/quasiquotes/TermConstructionProps.scala
@@ -139,6 +139,11 @@ object TermConstructionProps extends QuasiquoteProperties("term construction") {
assert(q"(..$empty)" ≈ q"()")
}
+ property("splice single element list into tuple") = test {
+ val xs = q"x" :: Nil
+ assert(q"(..$xs)" ≈ xs.head)
+ }
+
property("function param flags are the same") = test {
val xy = q"val x: A" :: q"val y: B" :: Nil
assertEqAst(q"(..$xy) => x + y", "(x: A, y: B) => x + y")