LINUX.ORG.RU

История изменений

Исправление monk, (текущая версия) :

Хмм, а там можно как в ракете, написать функцию, которая генерит АСТ в рантайме, а потом уже вызвать ее в макросе?

Разумеется.

proc gen(e: stmt) : stmt =
  # здесь генерим АСТ из e
  ...
  ...

macro play(e: stmt) =
  result = gen(e)

Если потом надо выкинуть функцию из скомпилированного кода (оставить только на время компиляции), то http://nim-lang.org/docs/manual.html#pragmas-compiletime-pragma

И как там с хранением строки исходника в АСТ

Судя по документации, никак.

Исходная версия monk, :

Хмм, а там можно как в ракете, написать функцию, которая генерит АСТ в рантайме, а потом уже вызвать ее в макросе?

Разумеется.

proc gen(e: stmt) : stmt =
  # здесь генерим АСТ из e
  ...
  ...

macros play(e: stmt) =
  result = gen(e)

Если потом надо выкинуть функцию из скомпилированного кода (оставить только на время компиляции), то http://nim-lang.org/docs/manual.html#pragmas-compiletime-pragma

И как там с хранением строки исходника в АСТ

Судя по документации, никак.