aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lbuiltin.c26
-rw-r--r--ldo.c11
-rw-r--r--liolib.c11
3 files changed, 24 insertions, 24 deletions
diff --git a/lbuiltin.c b/lbuiltin.c
index 6c13ad32..db7e473c 100644
--- a/lbuiltin.c
+++ b/lbuiltin.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lbuiltin.c,v 1.50 1999/02/08 16:29:35 roberto Exp roberto $ 2** $Id: lbuiltin.c,v 1.51 1999/02/12 19:23:02 roberto Exp roberto $
3** Built-in functions 3** Built-in functions
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -82,9 +82,8 @@ static Hash *gethash (int arg) {
82 82
83 83
84/* 84/*
85** If your system does not support "stderr", remove this function and 85** If your system does not support "stderr", redefine this function, or
86** define your own "_ALERT" function. You *must* have an _ALERT function 86** redefine _ERRORMESSAGE so that it won't need _ALERT.
87** defined for Lua to work properly.
88*/ 87*/
89static void luaB_alert (void) { 88static void luaB_alert (void) {
90 fputs(luaL_check_string(1), stderr); 89 fputs(luaL_check_string(1), stderr);
@@ -96,10 +95,13 @@ static void luaB_alert (void) {
96** The library "iolib" redefines _ERRORMESSAGE for better error information. 95** The library "iolib" redefines _ERRORMESSAGE for better error information.
97*/ 96*/
98static void error_message (void) { 97static void error_message (void) {
99 char buff[600]; 98 lua_Object al = lua_rawgetglobal("_ALERT");
100 sprintf(buff, "lua error: %.500s\n", luaL_check_string(1)); 99 if (lua_isfunction(al)) { /* avoid error loop if _ALERT is not defined */
101 lua_pushstring(buff); 100 char buff[600];
102 lua_call("_ALERT"); 101 sprintf(buff, "lua error: %.500s\n", luaL_check_string(1));
102 lua_pushstring(buff);
103 lua_callfunction(al);
104 }
103} 105}
104 106
105 107
@@ -301,7 +303,6 @@ static void luaB_call (void) {
301/* }====================================================== */ 303/* }====================================================== */
302 304
303 305
304#ifdef EXTRALIB
305/* 306/*
306** {====================================================== 307** {======================================================
307** "Extra" functions 308** "Extra" functions
@@ -501,7 +502,6 @@ static void luaB_sort (void) {
501} 502}
502 503
503/* }}===================================================== */ 504/* }}===================================================== */
504#endif
505 505
506 506
507/* 507/*
@@ -709,10 +709,9 @@ static struct luaL_reg builtin_funcs[] = {
709 {"tag", luaB_luatag}, 709 {"tag", luaB_luatag},
710 {"tonumber", luaB_tonumber}, 710 {"tonumber", luaB_tonumber},
711 {"tostring", luaB_tostring}, 711 {"tostring", luaB_tostring},
712 {"type", luaB_type} 712 {"type", luaB_type},
713#ifdef EXTRALIB
714 /* "Extra" functions */ 713 /* "Extra" functions */
715 ,{"assert", luaB_assert}, 714 {"assert", luaB_assert},
716 {"foreach", luaB_foreach}, 715 {"foreach", luaB_foreach},
717 {"foreachi", luaB_foreachi}, 716 {"foreachi", luaB_foreachi},
718 {"foreachvar", luaB_foreachvar}, 717 {"foreachvar", luaB_foreachvar},
@@ -720,7 +719,6 @@ static struct luaL_reg builtin_funcs[] = {
720 {"sort", luaB_sort}, 719 {"sort", luaB_sort},
721 {"tinsert", luaB_tinsert}, 720 {"tinsert", luaB_tinsert},
722 {"tremove", luaB_tremove} 721 {"tremove", luaB_tremove}
723#endif
724}; 722};
725 723
726 724
diff --git a/ldo.c b/ldo.c
index 146125a6..b5ae4607 100644
--- a/ldo.c
+++ b/ldo.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ldo.c,v 1.32 1999/02/12 19:23:02 roberto Exp roberto $ 2** $Id: ldo.c,v 1.33 1999/02/22 13:51:44 roberto Exp roberto $
3** Stack and Call structure of Lua 3** Stack and Call structure of Lua
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -235,7 +235,8 @@ void luaD_travstack (int (*fn)(TObject *))
235 235
236static void message (char *s) { 236static void message (char *s) {
237 TObject *em = &(luaS_new("_ERRORMESSAGE")->u.s.globalval); 237 TObject *em = &(luaS_new("_ERRORMESSAGE")->u.s.globalval);
238 if (ttype(em) != LUA_T_NIL) { 238 if (ttype(em) == LUA_T_PROTO || ttype(em) == LUA_T_CPROTO ||
239 ttype(em) == LUA_T_CLOSURE) {
239 *L->stack.top = *em; 240 *L->stack.top = *em;
240 incr_top; 241 incr_top;
241 lua_pushstring(s); 242 lua_pushstring(s);
@@ -246,14 +247,12 @@ static void message (char *s) {
246/* 247/*
247** Reports an error, and jumps up to the available recover label 248** Reports an error, and jumps up to the available recover label
248*/ 249*/
249void lua_error (char *s) 250void lua_error (char *s) {
250{
251 if (s) message(s); 251 if (s) message(s);
252 if (L->errorJmp) 252 if (L->errorJmp)
253 longjmp(*((jmp_buf *)L->errorJmp), 1); 253 longjmp(*((jmp_buf *)L->errorJmp), 1);
254 else { 254 else {
255 lua_pushstring("lua: exit(1). Unable to recover.\n"); 255 message("exit(1). Unable to recover.\n");
256 lua_call("_ALERT");
257 exit(1); 256 exit(1);
258 } 257 }
259} 258}
diff --git a/liolib.c b/liolib.c
index 1de1b79f..ed40b1ac 100644
--- a/liolib.c
+++ b/liolib.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: liolib.c,v 1.29 1999/01/04 12:41:12 roberto Exp roberto $ 2** $Id: liolib.c,v 1.30 1999/02/05 15:22:43 roberto Exp roberto $
3** Standard I/O (and system) library 3** Standard I/O (and system) library
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -459,7 +459,7 @@ static void errorfb (void) {
459 char buff[MAXMESSAGE]; 459 char buff[MAXMESSAGE];
460 int level = 1; /* skip level 0 (it's this function) */ 460 int level = 1; /* skip level 0 (it's this function) */
461 lua_Object func; 461 lua_Object func;
462 sprintf(buff, "lua: %.200s\n", lua_getstring(lua_getparam(1))); 462 sprintf(buff, "lua error: %.200s\n", lua_getstring(lua_getparam(1)));
463 while ((func = lua_stackedfunction(level++)) != LUA_NOOBJECT) { 463 while ((func = lua_stackedfunction(level++)) != LUA_NOOBJECT) {
464 char *name; 464 char *name;
465 int currentline; 465 int currentline;
@@ -496,8 +496,11 @@ static void errorfb (void) {
496 sprintf(buff+strlen(buff), " [in chunk %.50s]", chunkname); 496 sprintf(buff+strlen(buff), " [in chunk %.50s]", chunkname);
497 strcat(buff, "\n"); 497 strcat(buff, "\n");
498 } 498 }
499 lua_pushstring(buff); 499 func = lua_rawgetglobal("_ALERT");
500 lua_call("_ALERT"); 500 if (lua_isfunction(func)) { /* avoid error loop if _ALERT is not defined */
501 lua_pushstring(buff);
502 lua_callfunction(func);
503 }
501} 504}
502 505
503 506