代码之家  ›  专栏  ›  技术社区  ›  Mario Galic

如何编译编译阶段?

  •  0
  • Mario Galic  · 技术社区  · 5 年前

    使用 -Xprint 标志进入 scalac 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> { ...
    

    scalac jvmphase.scala ?

    0 回复  |  直到 5 年前
        1
  •  3
  •   Dmytro Mitin    5 年前

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

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

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