如何编译编译器阶段的输出?



scalac中使用-Xprint标志,我们得到了不同编译器阶段的输出,例如给定以下Foo.scala

object Foo {
val x = 42
}

然后scalac -Xprint:jvm Foo.scala输出

package <empty> {
object Foo extends Object {
<static> private[this] val x: Int = _;
<stable> <accessor> def x(): Int = Foo.this.x;
def <init>(): Foo.type = {
Foo.super.<init>();
Foo.this.x = 42;
()
}
}
}

如何编译阶段本身,也就是说,假设我们有这样的源文件jvmphase.scala

package <empty> { ...

包含阶段源代码而不是原始的原版 Scala 源代码,那么如何实现类似于scalac jvmphase.scala的东西?

"编译编译器阶段的输出"听起来很奇怪。从字面上看,编译器编译源文件。编译器阶段的输出不再是源(尽管scalac -Xprint:...尝试以类似的方式打印它(。例如jvm阶段是在erasure阶段之后。而且不清楚除了编译原始源代码的结果之外,您在"编译编译器阶段的输出"时期望得到什么。

如果你想在阶段之间进行更改,也许你应该创建编译器插件。

https://docs.scala-lang.org/overviews/plugins/index.html

https://dotty.epfl.ch/docs/reference/changed-features/compiler-plugins.html

相关内容

  • 没有找到相关文章

最新更新