diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2012-09-19 12:01:25 +0200 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2012-09-19 20:25:35 +0200 |
commit | 648dae6a504f0a5c24d3a7f6efc996f508a006ce (patch) | |
tree | 8addffd07f20b5c75351352db1291708be887ccf | |
parent | b0a4d536482c6582bafb383a30f553862aceb00f (diff) | |
download | scala-648dae6a504f0a5c24d3a7f6efc996f508a006ce.tar.gz scala-648dae6a504f0a5c24d3a7f6efc996f508a006ce.tar.bz2 scala-648dae6a504f0a5c24d3a7f6efc996f508a006ce.zip |
SI-6394 fixes macros.Context.enclosingClass
Previously I used typer.context.enclClass, but it seems to do something
completely unexpected, so I switched to manual context traversal.
-rw-r--r-- | src/compiler/scala/reflect/macros/runtime/Enclosures.scala | 2 | ||||
-rw-r--r-- | test/files/run/t6394a.check | 1 | ||||
-rw-r--r-- | test/files/run/t6394a.flags | 1 | ||||
-rw-r--r-- | test/files/run/t6394a/Macros_1.scala | 12 | ||||
-rw-r--r-- | test/files/run/t6394a/Test_2.scala | 4 |
5 files changed, 19 insertions, 1 deletions
diff --git a/src/compiler/scala/reflect/macros/runtime/Enclosures.scala b/src/compiler/scala/reflect/macros/runtime/Enclosures.scala index ebde4447d7..b5c988ca83 100644 --- a/src/compiler/scala/reflect/macros/runtime/Enclosures.scala +++ b/src/compiler/scala/reflect/macros/runtime/Enclosures.scala @@ -14,7 +14,7 @@ trait Enclosures { // vals are eager to simplify debugging // after all we wouldn't save that much time by making them lazy val macroApplication: Tree = expandee - val enclosingClass: Tree = site.enclClass.tree + val enclosingClass: Tree = enclTrees collectFirst { case x: ImplDef => x } getOrElse EmptyTree val enclosingImplicits: List[(Type, Tree)] = site.openImplicits val enclosingMacros: List[Context] = this :: universe.analyzer.openMacros // include self val enclosingMethod: Tree = site.enclMethod.tree diff --git a/test/files/run/t6394a.check b/test/files/run/t6394a.check new file mode 100644 index 0000000000..34997f71e3 --- /dev/null +++ b/test/files/run/t6394a.check @@ -0,0 +1 @@ +TEST
diff --git a/test/files/run/t6394a.flags b/test/files/run/t6394a.flags new file mode 100644 index 0000000000..cd66464f2f --- /dev/null +++ b/test/files/run/t6394a.flags @@ -0,0 +1 @@ +-language:experimental.macros
\ No newline at end of file diff --git a/test/files/run/t6394a/Macros_1.scala b/test/files/run/t6394a/Macros_1.scala new file mode 100644 index 0000000000..3d39d3e40a --- /dev/null +++ b/test/files/run/t6394a/Macros_1.scala @@ -0,0 +1,12 @@ +import scala.reflect.macros.Context + +object Macros { + def impl(c:Context): c.Expr[Any] = { + import c.universe._ + + val selfTree = This(c.enclosingClass.symbol.asModule.moduleClass) + c.Expr[AnyRef](selfTree) + } + + def foo: Any = macro impl +}
\ No newline at end of file diff --git a/test/files/run/t6394a/Test_2.scala b/test/files/run/t6394a/Test_2.scala new file mode 100644 index 0000000000..75e84f0e38 --- /dev/null +++ b/test/files/run/t6394a/Test_2.scala @@ -0,0 +1,4 @@ +object Test extends App { + println(Macros.foo) + override def toString = "TEST" +}
\ No newline at end of file |