diff options
Diffstat (limited to 'lauxlib.c')
| -rw-r--r-- | lauxlib.c | 15 |
1 files changed, 7 insertions, 8 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lauxlib.c,v 1.77 2002/06/26 19:28:44 roberto Exp roberto $ | 2 | ** $Id: lauxlib.c,v 1.78 2002/07/01 19:23:58 roberto Exp $ |
| 3 | ** Auxiliary functions for building Lua libraries | 3 | ** Auxiliary functions for building Lua libraries |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -394,21 +394,20 @@ LUALIB_API int luaL_loadbuffer (lua_State *L, const char *buff, size_t size, | |||
| 394 | 394 | ||
| 395 | static void callalert (lua_State *L, int status) { | 395 | static void callalert (lua_State *L, int status) { |
| 396 | if (status != 0) { | 396 | if (status != 0) { |
| 397 | int top; | ||
| 398 | if (status == LUA_ERRRUN) | ||
| 399 | lua_concat(L, 2); /* concat error message and traceback */ | ||
| 400 | top = lua_gettop(L); | ||
| 401 | lua_getglobal(L, "_ALERT"); | 397 | lua_getglobal(L, "_ALERT"); |
| 402 | lua_insert(L, -2); | 398 | lua_insert(L, -2); |
| 403 | lua_pcall(L, 1, 0); | 399 | lua_call(L, 1, 0); |
| 404 | lua_settop(L, top-1); | 400 | lua_pop(L, 1); |
| 405 | } | 401 | } |
| 406 | } | 402 | } |
| 407 | 403 | ||
| 408 | 404 | ||
| 409 | static int aux_do (lua_State *L, int status) { | 405 | static int aux_do (lua_State *L, int status) { |
| 410 | if (status == 0) /* parse OK? */ | 406 | if (status == 0) { /* parse OK? */ |
| 411 | status = lua_pcall(L, 0, LUA_MULTRET); /* call main */ | 407 | status = lua_pcall(L, 0, LUA_MULTRET); /* call main */ |
| 408 | if (status != 0) | ||
| 409 | lua_pcallreset(L); | ||
| 410 | } | ||
| 412 | callalert(L, status); | 411 | callalert(L, status); |
| 413 | return status; | 412 | return status; |
| 414 | } | 413 | } |
