summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorDen Shabalin <den.shabalin@gmail.com>2013-09-30 17:25:44 +0200
committerDen Shabalin <den.shabalin@gmail.com>2013-10-18 17:24:51 +0200
commit9aa5a27042abae1e0ed585863678bc3a6fcf63a4 (patch)
tree709966bcb8d83696f13264831bace6477d0970b7 /src
parentd36989d1ec1de3b5b75de41415c852b087974bc7 (diff)
downloadscala-9aa5a27042abae1e0ed585863678bc3a6fcf63a4.tar.gz
scala-9aa5a27042abae1e0ed585863678bc3a6fcf63a4.tar.bz2
scala-9aa5a27042abae1e0ed585863678bc3a6fcf63a4.zip
make q"f(..$xs)" deconstruction symmetrical to q"f[..$xs]"
Diffstat (limited to 'src')
-rw-r--r--src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala3
-rw-r--r--src/reflect/scala/reflect/api/BuildUtils.scala7
-rw-r--r--src/reflect/scala/reflect/internal/BuildUtils.scala9
-rw-r--r--src/reflect/scala/reflect/internal/StdNames.scala1
4 files changed, 20 insertions, 0 deletions
diff --git a/src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala b/src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala
index 642c882d5c..b397940803 100644
--- a/src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala
+++ b/src/compiler/scala/tools/reflect/quasiquotes/Reifiers.scala
@@ -150,6 +150,9 @@ trait Reifiers { self: Quasiquotes =>
reifyBuildCall(nme.SyntacticVarDef, mods, name, tpt, rhs)
case SyntacticAssign(lhs, rhs) =>
reifyBuildCall(nme.SyntacticAssign, lhs, rhs)
+ case SyntacticApplied(fun, List(args))
+ if args.forall { case Placeholder(_, _, DotDotDot) => false case _ => true } =>
+ reifyBuildCall(nme.SyntacticApply, fun, args)
case SyntacticApplied(fun, argss) if argss.nonEmpty =>
reifyBuildCall(nme.SyntacticApplied, fun, argss)
case SyntacticTypeApplied(fun, targs) if targs.nonEmpty =>
diff --git a/src/reflect/scala/reflect/api/BuildUtils.scala b/src/reflect/scala/reflect/api/BuildUtils.scala
index 0dad78112b..fc5d228417 100644
--- a/src/reflect/scala/reflect/api/BuildUtils.scala
+++ b/src/reflect/scala/reflect/api/BuildUtils.scala
@@ -122,6 +122,13 @@ private[reflect] trait BuildUtils { self: Universe =>
def unapply(tree: Tree): Some[(Tree, List[List[Tree]])]
}
+ val SyntacticApply: SyntacticApplyExtractor
+
+ trait SyntacticApplyExtractor {
+ def apply(tree: Tree, args: List[Tree]): Tree
+ def unapply(tree: Tree): Some[(Tree, List[Tree])]
+ }
+
val SyntacticClassDef: SyntacticClassDefExtractor
trait SyntacticClassDefExtractor {
diff --git a/src/reflect/scala/reflect/internal/BuildUtils.scala b/src/reflect/scala/reflect/internal/BuildUtils.scala
index 3e04811f4d..28f353593a 100644
--- a/src/reflect/scala/reflect/internal/BuildUtils.scala
+++ b/src/reflect/scala/reflect/internal/BuildUtils.scala
@@ -173,6 +173,15 @@ trait BuildUtils { self: SymbolTable =>
}
}
+ object SyntacticApply extends SyntacticApplyExtractor {
+ def apply(tree: Tree, args: List[Tree]): Tree = SyntacticApplied(tree, List(args))
+
+ def unapply(tree: Tree): Some[(Tree, List[Tree])] = tree match {
+ case Apply(fun, args) => Some((fun, args))
+ case other => Some((other, Nil))
+ }
+ }
+
private object UnCtor {
def unapply(tree: Tree): Option[(Modifiers, List[List[ValDef]], List[Tree])] = tree match {
case DefDef(mods, nme.MIXIN_CONSTRUCTOR, _, _, _, Block(lvdefs, _)) =>
diff --git a/src/reflect/scala/reflect/internal/StdNames.scala b/src/reflect/scala/reflect/internal/StdNames.scala
index 5cc3f911a4..8a0e1e4768 100644
--- a/src/reflect/scala/reflect/internal/StdNames.scala
+++ b/src/reflect/scala/reflect/internal/StdNames.scala
@@ -584,6 +584,7 @@ trait StdNames {
val Select: NameType = "Select"
val SelectFromTypeTree: NameType = "SelectFromTypeTree"
val SyntacticApplied: NameType = "SyntacticApplied"
+ val SyntacticApply: NameType = "SyntacticApply"
val SyntacticAssign: NameType = "SyntacticAssign"
val SyntacticBlock: NameType = "SyntacticBlock"
val SyntacticClassDef: NameType = "SyntacticClassDef"