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