【发布时间】:2019-10-16 20:39:10
【问题描述】:
在scalac 中使用-Xprint 标志我们得到不同compiler phases 的输出,例如给定以下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> { ...
包含相位源代码而不是原始的vanilla Scala源代码,那么如何实现类似于scalac jvmphase.scala的东西?
【问题讨论】:
-
我猜你可以将输出重定向到一个文件,然后编译那个文件?
-
@LuisMiguelMejíaSuárez 我试过了,它似乎不起作用。例如,它无法识别
<empty>提供identifier expected but $XMLSTART$< found。 -
@MarioGalic 为什么需要这个?
-
@MarioGalic 如果您想在阶段之间进行更改,也许您应该创建编译器插件。
-
@MarioGalic“编译器阶段的编译输出”听起来很奇怪。从字面上看,编译器编译源文件。编译器阶段的输出不再是源。例如
jvm阶段在erasure阶段之后。除了原始源代码的编译结果之外,还不清楚在“编译编译器阶段的输出”时您期望得到什么。
标签: scala scalac scala-compiler