summaryrefslogtreecommitdiff
path: root/test/files/run/macro-reify-splice-outside-reify/Impls_Macros_1.scala
diff options
context:
space:
mode:
Diffstat (limited to 'test/files/run/macro-reify-splice-outside-reify/Impls_Macros_1.scala')
-rw-r--r--test/files/run/macro-reify-splice-outside-reify/Impls_Macros_1.scala24
1 files changed, 24 insertions, 0 deletions
diff --git a/test/files/run/macro-reify-splice-outside-reify/Impls_Macros_1.scala b/test/files/run/macro-reify-splice-outside-reify/Impls_Macros_1.scala
new file mode 100644
index 0000000000..3ddfe6a737
--- /dev/null
+++ b/test/files/run/macro-reify-splice-outside-reify/Impls_Macros_1.scala
@@ -0,0 +1,24 @@
+import scala.reflect.makro.{Context => Ctx}
+
+object Impls {
+ def foo(c: Ctx)(x: c.Expr[Int]) = {
+ val x1 = c.Expr[Int](c.resetAllAttrs(x.tree))
+// was: c.literal(x1.splice)
+ c.literal(eval(c)(x1))
+ }
+
+ private def eval[T](c: Ctx)(x: c.Expr[T]): T = {
+ import scala.reflect.runtime.{universe => ru}
+ val mirror = ru.runtimeMirror(c.libraryClassLoader)
+ import scala.tools.reflect.ToolBox
+ val toolBox = mirror.mkToolBox()
+ val importer = ru.mkImporter(c.universe).asInstanceOf[ru.Importer { val from: c.universe.type }]
+ val tree = c.resetAllAttrs(x.tree.duplicate)
+ val imported = importer.importTree(tree)
+ toolBox.runExpr(imported).asInstanceOf[T]
+ }
+}
+
+object Macros {
+ def foo(x: Int) = macro Impls.foo
+}