diff options
author | Eugene Burmako <xeno.by@gmail.com> | 2013-12-19 00:03:24 +0100 |
---|---|---|
committer | Eugene Burmako <xeno.by@gmail.com> | 2013-12-19 13:59:09 +0100 |
commit | bce97058c4733f4c7bfac473db6bf378942900b8 (patch) | |
tree | 0b17b36362447bdf8976ab2bc1e8b128587d8e0f /test/files/neg/macro-reify-splice-splice/Macros_1.scala | |
parent | b5ef79f2f8bc010220d2920a890352d96ad84b45 (diff) | |
download | scala-bce97058c4733f4c7bfac473db6bf378942900b8.tar.gz scala-bce97058c4733f4c7bfac473db6bf378942900b8.tar.bz2 scala-bce97058c4733f4c7bfac473db6bf378942900b8.zip |
makes boxity of fast track macros configurable
Previously, all built-in macros were assumed to be whitebox, but that’s
actually not the case. Just quasiquote macros have to be whitebox, while
the rest can be blackbox.
This also fixes SI-8091, because blackbox macros are typechecked differently
and therefore the necessary implicit conversion kicks in. If `f”...”` were
to remain a whitebox macro, then due to the changes introduced in commit
https://github.com/scala/scala/commit/a3b33419b02cafb7e2c6fed6dd96151859fc7d77
we would have to explicitly ascribe its expansion as String to achieve the same effect.
After I made reify blackbox, several tests had to be changed, because
we now explicitly ascribe the expansion with `c.Expr[T]`, which changes `toString`.
Also, a number of less obvious corrections had to be applied, because
things like `reify(<constant>).splice` have stopped being optimized away
due to `reify(<constant>)` no longer having a narrow `c.Expr[<constant>.type]`,
making it ineligible for constant folding.
Moreover, this change forced me to adjust our approach to positioning
blackbox wrappings, because after being changed to blacbox and starting using
wrappings, f”...” interpolators used in the compiler started crashing
-Yrangepos builds. Now wrapping Typed nodes are assigned with transparent
positions.
Diffstat (limited to 'test/files/neg/macro-reify-splice-splice/Macros_1.scala')
-rw-r--r-- | test/files/neg/macro-reify-splice-splice/Macros_1.scala | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/test/files/neg/macro-reify-splice-splice/Macros_1.scala b/test/files/neg/macro-reify-splice-splice/Macros_1.scala new file mode 100644 index 0000000000..691f22ad07 --- /dev/null +++ b/test/files/neg/macro-reify-splice-splice/Macros_1.scala @@ -0,0 +1,11 @@ +import scala.reflect.macros.{BlackboxContext => Ctx} + +object Macros { + def foo = macro Impls.foo + + object Impls { + def foo(c: Ctx) = c.universe.reify { + { c.universe.reify(c.universe.reify("hello world")) }.splice.splice + } + } +}
\ No newline at end of file |