我正在尝试将 mRuby 嵌入Max MSP对象中。我要设置的第一件事是在 Max IDE 控制台窗口中记录错误。为此,在我使用 mrb_parse_string 解析代码(存储在 C 字符串中)后,我希望解析器的 error_buffer 数组中存在错误,但该数组中的结构始终为空( lineno 和 column 设置为 0 和 message 集为 NULL ),即使出现错误。
在解析代码之前是否有一种特殊的方法来设置解析器,以便在发生错误时正确填充其 error_buffer 数组?我已经查看了 mirb 来源,但它看起来不像。我迷路了。这是我正在使用的代码,取自我用作测试的一个小型 C 程序:
mrb_state *mrb;
char *code;
struct mrb_parser_state *parser;
parser = mrb_parse_string(mrb, code, mrbc_context_new(mrb));
if (parser->nerr > 0) {
for(i = 0; i < parser->nerr; i++) {
printf("line %d:%d: %s\n", parser->error_buffer[i].lineno,
parser->error_buffer[i].column,
parser->error_buffer[i].message);
}
return -1;
}
当通过以下错误的 ruby 代码时:
[1,1,1]]
前面的代码输出:
line 1:8: syntax error, unexpected ']', expecting $end
line 0:0: (null)
我不知道第一行来自哪里,因为我编译了 mRuby 并定义了 MRB_DISABLE_STDIO 并且按照第 14 行和 mrbconf.md 中的建议,但它是准确的。
第二行是我的代码的实际输出,显示返回mrb_parser_state
的结构error_buffer
是空的,这令人惊讶,因为解析器确实看到了错误。