Context.parse() 错误的 haxe 宏捕获

haxe macro catching of Context.parse() errors

在编译(宏)时,调用

Context.parse("a bad expression", somePos) 

产生一个错误,即 不能 在 try-catch 块中被捕获(编辑: 这是错误的,见下文)。有没有办法捕获这个错误? Context.parseInlineString() 似乎也不起作用。

其他函数如Context.typeExpr()也有类似的问题。

编辑: catch 的type 错误。我做了:

try {...}
catch (err:String) {...}

你必须做的事情:

try {...}
catch (err:Dynamic) {...}

仔细阅读文档可以解释这一点。这与 Java 不同,后者每个错误对应一种类型的异常。在 Haxe 中,大多数 错误是字符串,但也有一些像这里的错误。

以下对我有用:

import haxe.macro.*;

class Test {
    macro static function test() {
        try {
            Context.parse("a bad expression", Context.currentPos());
        } catch(e:Dynamic) {
            trace(e); //Test.hx:8: Missing ;
        }
        return macro {};
    }
    static function main() {
        test();
    }
}