瀏覽代碼

new function luaL_errstr

Roberto Ierusalimschy 23 年之前
父節點
當前提交
d070506a25
共有 3 個文件被更改,包括 19 次插入5 次删除
  1. 12 0
      lauxlib.c
  2. 4 0
      lauxlib.h
  3. 3 5
      lbaselib.c

+ 12 - 0
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;

+ 4 - 0
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);
+
 
 /*
 ** ===============================================================

+ 3 - 5
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);
 }