Haxe宏-将meta“ @:await”替换为“ await expr”]]

问题描述 投票:1回答:1

我在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 ...

javascript replace async-await macros haxe
1个回答
0
投票

[您只想检查函数中的顶级表达式(很可能是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; } }

© www.soinside.com 2019 - 2024. All rights reserved.