aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lua.c16
1 files changed, 14 insertions, 2 deletions
diff --git a/lua.c b/lua.c
index 1885364f..f52ded8e 100644
--- a/lua.c
+++ b/lua.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lua.c,v 1.173 2009/06/18 18:59:58 roberto Exp roberto $ 2** $Id: lua.c,v 1.174 2009/07/15 17:35:20 roberto Exp roberto $
3** Lua stand-alone interpreter 3** Lua stand-alone interpreter
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -75,6 +75,18 @@ static int report (lua_State *L, int status) {
75} 75}
76 76
77 77
78/* the next function is called unprotected, so it must avoid errors */
79static void finalreport (lua_State *L, int status) {
80 if (status != LUA_OK) {
81 const char *msg = (lua_type(L, -1) == LUA_TSTRING) ? lua_tostring(L, -1)
82 : NULL;
83 if (msg == NULL) msg = "(error object is not a string)";
84 l_message(progname, msg);
85 lua_pop(L, 1);
86 }
87}
88
89
78static int traceback (lua_State *L) { 90static int traceback (lua_State *L) {
79 const char *msg = lua_tostring(L, 1); 91 const char *msg = lua_tostring(L, 1);
80 if (msg) 92 if (msg)
@@ -383,7 +395,7 @@ int main (int argc, char **argv) {
383 s.argc = argc; 395 s.argc = argc;
384 s.argv = argv; 396 s.argv = argv;
385 status = lua_cpcall(L, &pmain, &s); 397 status = lua_cpcall(L, &pmain, &s);
386 report(L, status); 398 finalreport(L, status);
387 lua_close(L); 399 lua_close(L);
388 return (s.ok && status == LUA_OK) ? EXIT_SUCCESS : EXIT_FAILURE; 400 return (s.ok && status == LUA_OK) ? EXIT_SUCCESS : EXIT_FAILURE;
389} 401}