Важно понимать, что между макросами сборки для классов и тезисов нет никакой разницы. В обоих случаях они создают поля, что означает, что они должны возвращать массив haxe.macro.Expr.Field
. Поэтому любая документация или пример кода, который относится к одному, относится и к другому.
Самый простой / читаемый способ исправить ошибку компилятора в вашем примере - использовать reification класса , так что конструктор может быть объявлен с обычным синтаксисом Haxe:
import haxe.macro.Context;
import haxe.macro.Expr.Field;
class Macro {
public static function build():Array<Field> {
var fields = Context.getBuildFields();
fields = fields.concat((macro class {
public function new() {
this = {};
}
}).fields);
return fields;
}
}
class Main {
static function main() {
new Abstract(); // compiles
}
}
@:build(Macro.build())
abstract Abstract({}) from {} to {} {}