From 95fe19545d60ae9aa79d2c8d5665c7f3b0cbdb1a Mon Sep 17 00:00:00 2001 From: Den Shabalin Date: Fri, 6 Sep 2013 18:28:44 +0200 Subject: SI-6489 parsing in macros should provide proper positions 1. macro parsing doesn't use toolbox any more but calls parser directly 2. in order for this to work parser has to be refactored to limit usage of currentUnit and rewire it into parser's local unit method which might use currentUnit for some parsers but will user proper unit for UnitParser 3. similar change has to be done to make compilation unit's reporter overridable --- test/files/run/macro-parse-position/Impls_Macros_1.scala | 12 ++++++++++++ test/files/run/macro-parse-position/Test_2.scala | 3 +++ 2 files changed, 15 insertions(+) create mode 100644 test/files/run/macro-parse-position/Impls_Macros_1.scala create mode 100644 test/files/run/macro-parse-position/Test_2.scala (limited to 'test/files/run/macro-parse-position') diff --git a/test/files/run/macro-parse-position/Impls_Macros_1.scala b/test/files/run/macro-parse-position/Impls_Macros_1.scala new file mode 100644 index 0000000000..b6f1ebbcd5 --- /dev/null +++ b/test/files/run/macro-parse-position/Impls_Macros_1.scala @@ -0,0 +1,12 @@ +import scala.language.experimental.macros +import scala.reflect.macros.{Context => Ctx} + +object Macros { + def impl(c: Ctx)() = { + import c.universe._ + val t = c.parse("foo bar") + val out = s"${t.pos == NoPosition}\n${t.pos}\n${t.pos.source.content.length}\n${new String(t.pos.source.content)}" + c.Expr[String](Literal(Constant(out))) + } + def foo(): String = macro impl +} \ No newline at end of file diff --git a/test/files/run/macro-parse-position/Test_2.scala b/test/files/run/macro-parse-position/Test_2.scala new file mode 100644 index 0000000000..cff569bd81 --- /dev/null +++ b/test/files/run/macro-parse-position/Test_2.scala @@ -0,0 +1,3 @@ +object Test extends App { + println(Macros.foo) +} -- cgit v1.2.3