summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimirNik <vladimir.nikolaev9@gmail.com>2014-02-18 01:38:12 +0400
committerVladimirNik <vladimir.nikolaev9@gmail.com>2014-02-20 01:23:26 +0400
commit74b5c928795f0702772e5a33c82a7c72b86a8c9b (patch)
tree637ba1a28e046476ea86da86cd5fc6c5500ce44a
parentf7425c0e987aa092488b2d5405b64d77995bd712 (diff)
downloadscala-74b5c928795f0702772e5a33c82a7c72b86a8c9b.tar.gz
scala-74b5c928795f0702772e5a33c82a7c72b86a8c9b.tar.bz2
scala-74b5c928795f0702772e5a33c82a7c72b86a8c9b.zip
block processing fixed for syntactics in typechecked trees
-rw-r--r--src/reflect/scala/reflect/internal/ReificationSupport.scala4
-rw-r--r--src/reflect/scala/reflect/internal/TreeInfo.scala2
-rw-r--r--src/reflect/scala/reflect/internal/Trees.scala3
-rw-r--r--test/files/scalacheck/quasiquotes/TypecheckedProps.scala4
4 files changed, 7 insertions, 6 deletions
diff --git a/src/reflect/scala/reflect/internal/ReificationSupport.scala b/src/reflect/scala/reflect/internal/ReificationSupport.scala
index 100c4e6c47..ea230a215b 100644
--- a/src/reflect/scala/reflect/internal/ReificationSupport.scala
+++ b/src/reflect/scala/reflect/internal/ReificationSupport.scala
@@ -465,8 +465,8 @@ trait ReificationSupport { self: SymbolTable =>
else gen.mkBlock(stats)
def unapply(tree: Tree): Option[List[Tree]] = tree match {
- case self.Block(stats, SyntheticUnit()) => Some(stats)
- case self.Block(stats, expr) => Some(stats :+ expr)
+ case bl @ self.Block(stats, SyntheticUnit()) => Some(treeInfo.untypecheckedBlockBody(bl))
+ case bl @ self.Block(stats, expr) => Some(treeInfo.untypecheckedBlockBody(bl) :+ expr)
case EmptyTree => Some(Nil)
case _ if tree.isTerm => Some(tree :: Nil)
case _ => None
diff --git a/src/reflect/scala/reflect/internal/TreeInfo.scala b/src/reflect/scala/reflect/internal/TreeInfo.scala
index 4dee80afa9..7cf749c048 100644
--- a/src/reflect/scala/reflect/internal/TreeInfo.scala
+++ b/src/reflect/scala/reflect/internal/TreeInfo.scala
@@ -458,7 +458,7 @@ abstract class TreeInfo {
// transform getter mods to field
val vdMods = (if (!mods.hasStableFlag) mods | Flags.MUTABLE else mods &~ Flags.STABLE) &~ Flags.ACCESSOR
ValDef(vdMods, name, tpt, rhs)
- case tree => tree
+ case tr => tr
}
if (detectTypecheckedTree(tree)) {
diff --git a/src/reflect/scala/reflect/internal/Trees.scala b/src/reflect/scala/reflect/internal/Trees.scala
index 7a6862a770..cefab8ffa2 100644
--- a/src/reflect/scala/reflect/internal/Trees.scala
+++ b/src/reflect/scala/reflect/internal/Trees.scala
@@ -1687,7 +1687,8 @@ trait Trees extends api.Trees {
// when someone tries to c.typecheck a naked MemberDef
def wrappingIntoTerm(tree: Tree)(op: Tree => Tree): Tree = {
op(build.SyntacticBlock(tree :: Nil)) match {
- case build.SyntacticBlock(tree :: Nil) => tree
+ case Block(tree :: Nil, build.SyntheticUnit()) => tree
+ case Block(Nil, tree) => tree
case tree => tree
}
}
diff --git a/test/files/scalacheck/quasiquotes/TypecheckedProps.scala b/test/files/scalacheck/quasiquotes/TypecheckedProps.scala
index 14669764d3..b4b909e9be 100644
--- a/test/files/scalacheck/quasiquotes/TypecheckedProps.scala
+++ b/test/files/scalacheck/quasiquotes/TypecheckedProps.scala
@@ -92,7 +92,7 @@ object TypecheckedProps extends QuasiquoteProperties("typechecked") {
property("class with param (2)") = test {
val paramName = TermName("y")
- val q"{ class $_($param); $_}" = typecheck(q"{ class Test(val $paramName: Int = 3) }")
+ val q"{class $_($param)}" = typecheck(q"class Test(val $paramName: Int = 3)")
assert(param.name == paramName)
assert(param.rhs ≈ q"3")
@@ -101,7 +101,7 @@ object TypecheckedProps extends QuasiquoteProperties("typechecked") {
property("class with params") = test {
val pName1 = TermName("x1")
val pName2 = TermName("x2")
- val q"{ class $_($param1)(..$params2); $_}" = typecheck(q"{ class Test(val x0: Float)(val $pName1: Int = 3, $pName2: String) }")
+ val q"{class $_($param1)(..$params2)}" = typecheck(q"class Test(val x0: Float)(val $pName1: Int = 3, $pName2: String)")
val List(p1, p2, _*) = params2