Как скомпилировать вывод фазы компилятора? - PullRequest
1 голос
/ 16 октября 2019

Используя флаг -Xprint в scalac, мы получаем выходные данные фаз компилятора , например, с учетом следующих 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?

1 Ответ

3 голосов
/ 17 октября 2019

«Компиляция вывода фазы компилятора» звучит странно. Буквально компилятор компилирует исходный файл. Вывод фазы компилятора больше не является источником (хотя scalac -Xprint:... пытается напечатать его аналогично). Например, jvm фаза находится после erasure фазы. И неясно, что вы ожидаете получить при «компиляции вывода фазы компилятора», кроме результата компиляции исходного источника.

Если вы хотите внести изменения между фазами, возможно, вам следует создать плагин компилятора.

https://docs.scala -lang.org / обзоры / плагины / index.html

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...