lua_pushcfunction(L, error_handler); luaL_loadfile(L, "file.lua"); lua_pcall(L, 0, 0, -2);
Using this there is a way to get a chunk name and it's error line number:
int error_handler(lua_State* L) {
lua_Debug d;
lua_getstack(L, 1, &d);
lua_getinfo(L, "Sln", &d);
string err = lua_tostring(L, -1);
lua_pop(L, 1);
stringstream msg;
msg << d.short_src << ":" << d.currentline;
if(d.name != 0) {
msg << "(" << d.namewhat << " " << d.name << ")";
}
msg << " > " << err;
lua_pushstring(L, msg.str().c_str());
return 1;
}
Work's like a charm, except one thing. This is the output from this error handler: [string "test"]:1 > [string "test"]:1: attempt to index global 'a' (a nil value)
Why? Oh, why the Lua guys are putting assembled error message with chunk name and line number if I use my own error handler? IMHO, this is wrong. There is no other way to give a user nice message except parsing. Actually parsing of such message is easy, but.. the Lua guys have changed error message format a few times already. I'm pissed!
No comments:
Post a Comment