summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdriaan Moors <adriaan.moors@typesafe.com>2014-07-03 10:56:27 +0200
committerAdriaan Moors <adriaan.moors@typesafe.com>2014-07-03 10:56:27 +0200
commitc9ab6b60e521dacff7e6ada1a53c057117bb30a7 (patch)
tree9a4a697c42b9e679758af0ee799cc1f68e5b3705
parent17d56e47f77b021744ad7bce5eae54d33dc3734e (diff)
parent56ed4fc79580d4a0b7a264a436db3010543a9211 (diff)
downloadscala-c9ab6b60e521dacff7e6ada1a53c057117bb30a7.tar.gz
scala-c9ab6b60e521dacff7e6ada1a53c057117bb30a7.tar.bz2
scala-c9ab6b60e521dacff7e6ada1a53c057117bb30a7.zip
Merge pull request #3772 from densh/si/8609
SI-8609 Fix flattening of definitions and imports in quasiquotes
-rw-r--r--src/reflect/scala/reflect/internal/ReificationSupport.scala2
-rw-r--r--test/files/scalacheck/quasiquotes/TermConstructionProps.scala12
2 files changed, 14 insertions, 0 deletions
diff --git a/src/reflect/scala/reflect/internal/ReificationSupport.scala b/src/reflect/scala/reflect/internal/ReificationSupport.scala
index ad8a2594dd..2caa30d27e 100644
--- a/src/reflect/scala/reflect/internal/ReificationSupport.scala
+++ b/src/reflect/scala/reflect/internal/ReificationSupport.scala
@@ -97,6 +97,8 @@ trait ReificationSupport { self: SymbolTable =>
def toStats(tree: Tree): List[Tree] = tree match {
case EmptyTree => Nil
case SyntacticBlock(stats) => stats
+ case defn if defn.isDef => defn :: Nil
+ case imp: Import => imp :: Nil
case _ => throw new IllegalArgumentException(s"can't flatten $tree")
}
diff --git a/test/files/scalacheck/quasiquotes/TermConstructionProps.scala b/test/files/scalacheck/quasiquotes/TermConstructionProps.scala
index 45392de582..409f07037e 100644
--- a/test/files/scalacheck/quasiquotes/TermConstructionProps.scala
+++ b/test/files/scalacheck/quasiquotes/TermConstructionProps.scala
@@ -310,4 +310,16 @@ object TermConstructionProps extends QuasiquoteProperties("term construction") {
val cases = List(cq"a => b", cq"c => d")
assertEqAst(q"{ case ..$cases }", "{ case a => b case c => d }")
}
+
+ property("SI-8609 a") = test {
+ val q1 = q"val x = 1"
+ val q2 = q"..$q1; val y = 2"
+ assert(q2 ≈ q"{ val x = 1; val y = 2 }")
+ }
+
+ property("SI-8609 b") = test {
+ val q1 = q"import foo.bar"
+ val q2 = q"..$q1; val y = 2"
+ assert(q2 ≈ q"{ import foo.bar; val y = 2 }")
+ }
}