diff options
author | VladimirNik <vladimir.nikolaev9@gmail.com> | 2014-02-18 01:38:12 +0400 |
---|---|---|
committer | VladimirNik <vladimir.nikolaev9@gmail.com> | 2014-02-20 01:23:26 +0400 |
commit | 74b5c928795f0702772e5a33c82a7c72b86a8c9b (patch) | |
tree | 637ba1a28e046476ea86da86cd5fc6c5500ce44a | |
parent | f7425c0e987aa092488b2d5405b64d77995bd712 (diff) | |
download | scala-74b5c928795f0702772e5a33c82a7c72b86a8c9b.tar.gz scala-74b5c928795f0702772e5a33c82a7c72b86a8c9b.tar.bz2 scala-74b5c928795f0702772e5a33c82a7c72b86a8c9b.zip |
block processing fixed for syntactics in typechecked trees
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 |