diff options
author | Denys Shabalin <denys.shabalin@typesafe.com> | 2014-02-10 14:29:59 +0100 |
---|---|---|
committer | Denys Shabalin <denys.shabalin@typesafe.com> | 2014-02-10 14:44:27 +0100 |
commit | 2b67f8b94f9e95c5fb7be0e6d6c4718a6e045ec4 (patch) | |
tree | 437aa34986ad2b060b5ef52533a7f8abf5b199e4 /test/files/scalacheck/quasiquotes/TypeConstructionProps.scala | |
parent | 08e51dfec50842253afb87cc5ae3c7400dc18ced (diff) | |
download | scala-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/TypeConstructionProps.scala')
-rw-r--r-- | test/files/scalacheck/quasiquotes/TypeConstructionProps.scala | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/test/files/scalacheck/quasiquotes/TypeConstructionProps.scala b/test/files/scalacheck/quasiquotes/TypeConstructionProps.scala index 78b54a4e49..08ed15e8a5 100644 --- a/test/files/scalacheck/quasiquotes/TypeConstructionProps.scala +++ b/test/files/scalacheck/quasiquotes/TypeConstructionProps.scala @@ -18,6 +18,11 @@ object TypeConstructionProps extends QuasiquoteProperties("type construction") assert(tq"(t0, ..$ts)" ≈ tq"scala.Tuple3[t0, t1, t2]") } + property("single-element tuple type") = test { + val ts = q"T" :: Nil + assert(tq"(..$ts)" ≈ ts.head) + } + property("refined type") = test { val stats = q"def foo" :: q"val x: Int" :: q"type Y = String" :: Nil assert(tq"T { ..$stats }" ≈ tq"T { def foo; val x: Int; type Y = String }") |