我在haxe
类中有方法:
@:async static function test() { @:await test(); }
而且我想在所有异步方法中将d替换为
@:await
的地方都像这样:
await
我的宏:
. . . Main.test = function() { return await Main.test(); }; . . .
我的宏出了什么问题,我的方向正确吗?
我在ma haxe类中有方法:@:async静态函数test(){@:await test();我想在所有异步方法中都将d替换为@:await以替换为await ...
[您只想检查函数中的顶级表达式(很可能是EBlock),而您要递归映射它。请参见haxe.macro.ExprTools.map import haxe.macro.Expr;
import haxe.macro.Context;
import haxe.macro.Type;
class BuildHub {
macro static public function build():Array<Field> {
var fields = Context.getBuildFields();
for (field in fields) {
switch (field.kind) {
case FFun(fn):
for (meta in field.meta) {
if(meta.name == ":async") {
switch(fn.expr) {
case macro @:await $task:
fn.expr = macro $task;
case _: fn.expr;
}
}
}
default: continue;
}
}
return fields;
}
}