パラメータの元の入力文字列をマクロに取得しようとしていますが、返される位置が少しずれているようです。たとえば、次のマクロを検討してください。
object M {
import scala.reflect.macros.Context
import language.experimental.macros
def f[T](v: => T) = macro fImpl[T]
def fImpl[T : c.WeakTypeTag](c: Context)(v: c.Expr[T]): c.Expr[Unit] = {
import c.universe._
val pos = v.tree.pos
println(pos.lineContent)
println(" " * pos.column + "^")
println(" " * pos.point + "^")
c.literalUnit
}
}
このファイルで試してみると:
object N extends App {
val x = 1
val y = 2
println(M.f(x + y))
}
私はこの出力を得ます:
println(M.f(x + y))
^
^
私には意味がありません。を指すx
か、1つずれていると思います。どうしたの?