summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2014-08-19 11:58:41 +0200
committerGrzegorz Kossakowski <grzegorz.kossakowski@gmail.com>2014-08-19 11:58:41 +0200
commit1d3613b5e2e82479464d90cc3401ccebb09bee89 (patch)
tree9f884113fa32fc3ee1c9ee5ff353f6e2d7162898 /test
parentac7e1026090cf0895e03717e715ce25015263175 (diff)
parent36379cf8af8e0bb92f7a399fe2c8e1cb05b31fc9 (diff)
downloadscala-1d3613b5e2e82479464d90cc3401ccebb09bee89.tar.gz
scala-1d3613b5e2e82479464d90cc3401ccebb09bee89.tar.bz2
scala-1d3613b5e2e82479464d90cc3401ccebb09bee89.zip
Merge pull request #3865 from xeno-by/topic/extractor-macros-210x
[backport] transformers no longer ignore UnApply.fun
Diffstat (limited to 'test')
-rw-r--r--test/files/run/t7871.check1
-rw-r--r--test/files/run/t7871/Macros_1.scala43
-rw-r--r--test/files/run/t7871/Test_2.scala6
3 files changed, 50 insertions, 0 deletions
diff --git a/test/files/run/t7871.check b/test/files/run/t7871.check
new file mode 100644
index 0000000000..ce6efd812d
--- /dev/null
+++ b/test/files/run/t7871.check
@@ -0,0 +1 @@
+(SomeTree,SomeTree)
diff --git a/test/files/run/t7871/Macros_1.scala b/test/files/run/t7871/Macros_1.scala
new file mode 100644
index 0000000000..2943445ff8
--- /dev/null
+++ b/test/files/run/t7871/Macros_1.scala
@@ -0,0 +1,43 @@
+import scala.reflect.macros.Context
+import scala.language.experimental.macros
+
+trait Tree
+case object SomeTree extends Tree
+
+object NewQuasiquotes {
+ implicit class QuasiquoteInterpolation(c: StringContext) {
+ object nq {
+ def unapply(t: Tree): Any = macro QuasiquoteMacros.unapplyImpl
+ }
+ }
+}
+
+object QuasiquoteMacros {
+ def unapplyImpl(c: Context)(t: c.Expr[Tree]) = {
+ import c.universe._
+ import Flag._
+ // q"""
+ // new {
+ // def unapply(t: Tree) = t match {
+ // case SomeTree => Some((SomeTree, SomeTree))
+ // case _ => None
+ // }
+ // }.unapply($t)
+ // """
+ c.Expr[Any](Apply(
+ Select(
+ Block(List(
+ ClassDef(Modifiers(FINAL), newTypeName("$anon"), List(),
+ Template(List(Select(Ident(newTermName("scala")), newTypeName("AnyRef"))), emptyValDef, List(
+ DefDef(Modifiers(), nme.CONSTRUCTOR, List(), List(List()), TypeTree(),
+ Block(List(Apply(Select(Super(This(tpnme.EMPTY), tpnme.EMPTY), nme.CONSTRUCTOR), List())), Literal(Constant(())))),
+ DefDef(Modifiers(), newTermName("unapply"), List(), List(List(ValDef(Modifiers(PARAM), newTermName("t"), Ident(newTypeName("Tree")), EmptyTree))), TypeTree(),
+ Match(
+ Ident(newTermName("t")), List(
+ CaseDef(Ident(newTermName("SomeTree")), EmptyTree, Apply(Ident(newTermName("Some")), List(Apply(Select(Ident(newTermName("scala")), newTermName("Tuple2")), List(Ident(newTermName("SomeTree")), Ident(newTermName("SomeTree"))))))),
+ CaseDef(Ident(nme.WILDCARD), EmptyTree, Ident(newTermName("None")))))))))),
+ Apply(Select(New(Ident(newTypeName("$anon"))), nme.CONSTRUCTOR), List())),
+ newTermName("unapply")),
+ List(t.tree)))
+ }
+}
diff --git a/test/files/run/t7871/Test_2.scala b/test/files/run/t7871/Test_2.scala
new file mode 100644
index 0000000000..3a0b68b568
--- /dev/null
+++ b/test/files/run/t7871/Test_2.scala
@@ -0,0 +1,6 @@
+object Test extends App {
+ import NewQuasiquotes._
+ SomeTree match {
+ case nq"$x + $y" => println((x, y))
+ }
+}