From d070506a255cc7cc33842a7bb97e1405cfb048aa Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Tue, 5 Feb 2002 20:36:52 -0200 Subject: new function luaL_errstr --- lauxlib.c | 12 ++++++++++++ lauxlib.h | 4 ++++ lbaselib.c | 8 +++----- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/lauxlib.c b/lauxlib.c index b6903013..831d3e34 100644 --- a/lauxlib.c +++ b/lauxlib.c @@ -21,6 +21,18 @@ #include "lualib.h" +LUALIB_API const char *luaL_errstr (int errcode) { + static const char *const errstr[] = { + "ok", + "run-time error", + "cannot open file", + "syntax error", + "memory allocation error", + "error in error handling" + }; + return errstr[errcode]; +} + LUALIB_API int luaL_findstring (const char *name, const char *const list[]) { int i; diff --git a/lauxlib.h b/lauxlib.h index 92f8b5d6..57d259c0 100644 --- a/lauxlib.h +++ b/lauxlib.h @@ -20,6 +20,7 @@ #endif + typedef struct luaL_reg { const char *name; lua_CFunction func; @@ -48,6 +49,9 @@ LUALIB_API int luaL_findstring (const char *name, LUALIB_API int luaL_ref (lua_State *L, int t); LUALIB_API void luaL_unref (lua_State *L, int t, int ref); +/* error messages corresponding to error codes */ +LUALIB_API const char *luaL_errstr (int errcode); + /* ** =============================================================== diff --git a/lbaselib.c b/lbaselib.c index 1b1d4d96..74d176dd 100644 --- a/lbaselib.c +++ b/lbaselib.c @@ -213,9 +213,6 @@ static int luaB_next (lua_State *L) { static int passresults (lua_State *L, int status, int oldtop) { - static const char *const errornames[] = - {"ok", "run-time error", "file error", "syntax error", - "memory error", "error in error handling"}; if (status == 0) { int nresults = lua_gettop(L) - oldtop; if (nresults > 0) @@ -227,7 +224,7 @@ static int passresults (lua_State *L, int status, int oldtop) { } else { /* error */ lua_pushnil(L); - lua_pushstring(L, errornames[status]); /* error code */ + lua_pushstring(L, luaL_errstr(status)); /* error code */ return 2; } } @@ -415,7 +412,8 @@ static int luaB_tostring (lua_State *L) { static int luaB_resume (lua_State *L) { lua_State *co = (lua_State *)lua_touserdata(L, lua_upvalueindex(1)); - lua_resume(L, co); + if (lua_resume(L, co) != 0) + lua_error(L, "error running co-routine"); return lua_gettop(L); } -- cgit v1.2.3-55-g6feb