aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2002-05-06 16:05:10 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2002-05-06 16:05:10 -0300
commit71144e3ff0cb81bd9b8bb56d94dc76074c638c64 (patch)
tree8098675276d0640684898d4302ea98ae91e2c430
parent0dbf0c5953a3d72deebc7e41840a0e73b46de8bc (diff)
downloadlua-71144e3ff0cb81bd9b8bb56d94dc76074c638c64.tar.gz
lua-71144e3ff0cb81bd9b8bb56d94dc76074c638c64.tar.bz2
lua-71144e3ff0cb81bd9b8bb56d94dc76074c638c64.zip
errors `return' int, to avoid warnings
+ home-made `sprintf' (first version)
-rw-r--r--lapi.c5
-rw-r--r--lauxlib.c63
-rw-r--r--lauxlib.h10
-rw-r--r--lbaselib.c41
-rw-r--r--ldblib.c57
-rw-r--r--liolib.c15
-rw-r--r--lmathlib.c4
-rw-r--r--lstrlib.c11
-rw-r--r--ltests.c4
-rw-r--r--lua.h4
10 files changed, 118 insertions, 96 deletions
diff --git a/lapi.c b/lapi.c
index 54ec5f3b..fa05ca49 100644
--- a/lapi.c
+++ b/lapi.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lapi.c,v 1.187 2002/05/02 16:55:55 roberto Exp roberto $ 2** $Id: lapi.c,v 1.188 2002/05/06 15:51:41 roberto Exp roberto $
3** Lua API 3** Lua API
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -641,11 +641,12 @@ LUA_API void lua_setgcthreshold (lua_State *L, int newthreshold) {
641*/ 641*/
642 642
643 643
644LUA_API void lua_errorobj (lua_State *L) { 644LUA_API int lua_errorobj (lua_State *L) {
645 lua_lock(L); 645 lua_lock(L);
646 api_checknelems(L, 1); 646 api_checknelems(L, 1);
647 luaD_errorobj(L, L->top - 1, LUA_ERRRUN); 647 luaD_errorobj(L, L->top - 1, LUA_ERRRUN);
648 lua_unlock(L); 648 lua_unlock(L);
649 return 0; /* to avoid warnings */
649} 650}
650 651
651 652
diff --git a/lauxlib.c b/lauxlib.c
index 46454d83..7be33892 100644
--- a/lauxlib.c
+++ b/lauxlib.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lauxlib.c,v 1.66 2002/04/16 12:00:02 roberto Exp roberto $ 2** $Id: lauxlib.c,v 1.67 2002/05/01 20:40:42 roberto Exp roberto $
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*/
@@ -30,23 +30,21 @@ LUALIB_API int luaL_findstring (const char *name, const char *const list[]) {
30} 30}
31 31
32 32
33LUALIB_API void luaL_argerror (lua_State *L, int narg, const char *extramsg) { 33LUALIB_API int luaL_argerror (lua_State *L, int narg, const char *extramsg) {
34 lua_Debug ar; 34 lua_Debug ar;
35 lua_getstack(L, 0, &ar); 35 lua_getstack(L, 0, &ar);
36 lua_getinfo(L, "n", &ar); 36 lua_getinfo(L, "n", &ar);
37 if (strcmp(ar.namewhat, "method") == 0) narg--; /* do not count `self' */ 37 if (strcmp(ar.namewhat, "method") == 0) narg--; /* do not count `self' */
38 if (ar.name == NULL) 38 if (ar.name == NULL)
39 ar.name = "?"; 39 ar.name = "?";
40 luaL_verror(L, "bad argument #%d to `%.50s' (%.100s)", 40 return luaL_verror(L, "bad argument #%d to `%s' (%s)",
41 narg, ar.name, extramsg); 41 narg, ar.name, extramsg);
42} 42}
43 43
44 44
45LUALIB_API void luaL_typerror (lua_State *L, int narg, const char *tname) { 45LUALIB_API int luaL_typerror (lua_State *L, int narg, const char *tname) {
46 char buff[80]; 46 luaL_vstr(L, "%s expected, got %s", tname, lua_typename(L, lua_type(L,narg)));
47 sprintf(buff, "%.25s expected, got %.25s", tname, 47 return luaL_argerror(L, narg, lua_tostring(L, -1));
48 lua_typename(L, lua_type(L,narg)));
49 luaL_argerror(L, narg, buff);
50} 48}
51 49
52 50
@@ -57,11 +55,11 @@ static void tag_error (lua_State *L, int narg, int tag) {
57 55
58LUALIB_API void luaL_check_stack (lua_State *L, int space, const char *mes) { 56LUALIB_API void luaL_check_stack (lua_State *L, int space, const char *mes) {
59 if (!lua_checkstack(L, space)) 57 if (!lua_checkstack(L, space))
60 luaL_verror(L, "stack overflow (%.30s)", mes); 58 luaL_verror(L, "stack overflow (%s)", mes);
61} 59}
62 60
63 61
64LUALIB_API void luaL_check_type(lua_State *L, int narg, int t) { 62LUALIB_API void luaL_check_type (lua_State *L, int narg, int t) {
65 if (lua_type(L, narg) != t) 63 if (lua_type(L, narg) != t)
66 tag_error(L, narg, t); 64 tag_error(L, narg, t);
67} 65}
@@ -144,13 +142,48 @@ LUALIB_API void luaL_opennamedlib (lua_State *L, const char *libname,
144} 142}
145 143
146 144
147LUALIB_API void luaL_verror (lua_State *L, const char *fmt, ...) { 145static void vstr (lua_State *L, const char *fmt, va_list argp) {
148 char buff[500]; 146 luaL_Buffer b;
147 luaL_buffinit(L, &b);
148 for (;;) {
149 const char *e = strchr(fmt, '%');
150 if (e == NULL) break;
151 luaL_addlstring(&b, fmt, e-fmt);
152 switch (*(e+1)) {
153 case 's':
154 luaL_addstring(&b, va_arg(argp, char *));
155 break;
156 case 'd':
157 lua_pushnumber(L, va_arg(argp, int));
158 luaL_addvalue (&b);
159 break;
160 case '%':
161 luaL_putchar(&b, '%');
162 break;
163 default:
164 lua_error(L, "invalid format option");
165 }
166 fmt = e+2;
167 }
168 luaL_addstring(&b, fmt);
169 luaL_pushresult(&b);
170}
171
172
173LUALIB_API void luaL_vstr (lua_State *L, const char *fmt, ...) {
174 va_list argp;
175 va_start(argp, fmt);
176 vstr(L, fmt, argp);
177 va_end(argp);
178}
179
180
181LUALIB_API int luaL_verror (lua_State *L, const char *fmt, ...) {
149 va_list argp; 182 va_list argp;
150 va_start(argp, fmt); 183 va_start(argp, fmt);
151 vsprintf(buff, fmt, argp); 184 vstr(L, fmt, argp);
152 va_end(argp); 185 va_end(argp);
153 lua_error(L, buff); 186 return lua_errorobj(L);
154} 187}
155 188
156 189
diff --git a/lauxlib.h b/lauxlib.h
index 6affc407..93282517 100644
--- a/lauxlib.h
+++ b/lauxlib.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lauxlib.h,v 1.44 2002/04/02 20:42:49 roberto Exp roberto $ 2** $Id: lauxlib.h,v 1.45 2002/05/01 20:40:42 roberto Exp roberto $
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*/
@@ -31,9 +31,8 @@ LUALIB_API void luaL_openlib (lua_State *L, const luaL_reg *l, int nup);
31LUALIB_API void luaL_opennamedlib (lua_State *L, const char *libname, 31LUALIB_API void luaL_opennamedlib (lua_State *L, const char *libname,
32 const luaL_reg *l, int nup); 32 const luaL_reg *l, int nup);
33LUALIB_API int luaL_callmeta (lua_State *L, int obj, const char *event); 33LUALIB_API int luaL_callmeta (lua_State *L, int obj, const char *event);
34LUALIB_API void luaL_typerror (lua_State *L, int narg, const char *tname); 34LUALIB_API int luaL_typerror (lua_State *L, int narg, const char *tname);
35LUALIB_API void luaL_argerror (lua_State *L, int numarg, 35LUALIB_API int luaL_argerror (lua_State *L, int numarg, const char *extramsg);
36 const char *extramsg);
37LUALIB_API const char *luaL_check_lstr (lua_State *L, int numArg, 36LUALIB_API const char *luaL_check_lstr (lua_State *L, int numArg,
38 size_t *len); 37 size_t *len);
39LUALIB_API const char *luaL_opt_lstr (lua_State *L, int numArg, 38LUALIB_API const char *luaL_opt_lstr (lua_State *L, int numArg,
@@ -45,7 +44,8 @@ LUALIB_API void luaL_check_stack (lua_State *L, int space, const char *msg);
45LUALIB_API void luaL_check_type (lua_State *L, int narg, int t); 44LUALIB_API void luaL_check_type (lua_State *L, int narg, int t);
46LUALIB_API void luaL_check_any (lua_State *L, int narg); 45LUALIB_API void luaL_check_any (lua_State *L, int narg);
47 46
48LUALIB_API void luaL_verror (lua_State *L, const char *fmt, ...); 47LUALIB_API int luaL_verror (lua_State *L, const char *fmt, ...);
48LUALIB_API void luaL_vstr (lua_State *L, const char *fmt, ...);
49LUALIB_API int luaL_findstring (const char *name, 49LUALIB_API int luaL_findstring (const char *name,
50 const char *const list[]); 50 const char *const list[]);
51 51
diff --git a/lbaselib.c b/lbaselib.c
index 50bdc7f7..a92f785d 100644
--- a/lbaselib.c
+++ b/lbaselib.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lbaselib.c,v 1.70 2002/05/01 20:40:42 roberto Exp roberto $ 2** $Id: lbaselib.c,v 1.71 2002/05/02 17:12:27 roberto Exp roberto $
3** Basic library 3** Basic library
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -43,9 +43,7 @@ static int luaB__ERRORMESSAGE (lua_State *L) {
43 if (lua_getstack(L, 1, &ar)) { 43 if (lua_getstack(L, 1, &ar)) {
44 lua_getinfo(L, "Sl", &ar); 44 lua_getinfo(L, "Sl", &ar);
45 if (ar.source && ar.currentline > 0) { 45 if (ar.source && ar.currentline > 0) {
46 char buff[100]; 46 luaL_vstr(L, "\n <%s: line %d>", ar.short_src, ar.currentline);
47 sprintf(buff, "\n <%.70s: line %d>", ar.short_src, ar.currentline);
48 lua_pushstring(L, buff);
49 lua_concat(L, 2); 47 lua_concat(L, 2);
50 } 48 }
51 } 49 }
@@ -72,7 +70,7 @@ static int luaB_print (lua_State *L) {
72 lua_rawcall(L, 1, 1); 70 lua_rawcall(L, 1, 1);
73 s = lua_tostring(L, -1); /* get result */ 71 s = lua_tostring(L, -1); /* get result */
74 if (s == NULL) 72 if (s == NULL)
75 luaL_verror(L, "`tostring' must return a string to `print'"); 73 return luaL_verror(L, "`tostring' must return a string to `print'");
76 if (i>1) fputs("\t", stdout); 74 if (i>1) fputs("\t", stdout);
77 fputs(s, stdout); 75 fputs(s, stdout);
78 lua_pop(L, 1); /* pop result */ 76 lua_pop(L, 1); /* pop result */
@@ -112,8 +110,7 @@ static int luaB_tonumber (lua_State *L) {
112 110
113static int luaB_error (lua_State *L) { 111static int luaB_error (lua_State *L) {
114 lua_settop(L, 1); 112 lua_settop(L, 1);
115 lua_errorobj(L); 113 return lua_errorobj(L);
116 return 0; /* to avoid warnings */
117} 114}
118 115
119 116
@@ -242,7 +239,7 @@ static int luaB_loadfile (lua_State *L) {
242static int luaB_assert (lua_State *L) { 239static int luaB_assert (lua_State *L) {
243 luaL_check_any(L, 1); 240 luaL_check_any(L, 1);
244 if (!lua_toboolean(L, 1)) 241 if (!lua_toboolean(L, 1))
245 luaL_verror(L, "assertion failed! %.90s", luaL_opt_string(L, 2, "")); 242 return luaL_verror(L, "assertion failed! %s", luaL_opt_string(L, 2, ""));
246 lua_settop(L, 1); 243 lua_settop(L, 1);
247 return 1; 244 return 1;
248} 245}
@@ -335,6 +332,7 @@ static const char *getpath (lua_State *L) {
335 const char *path; 332 const char *path;
336 lua_getglobal(L, LUA_PATH); /* try global variable */ 333 lua_getglobal(L, LUA_PATH); /* try global variable */
337 path = lua_tostring(L, -1); 334 path = lua_tostring(L, -1);
335 lua_pop(L, 1);
338 if (path) return path; 336 if (path) return path;
339 path = getenv(LUA_PATH); /* else try environment variable */ 337 path = getenv(LUA_PATH); /* else try environment variable */
340 if (path) return path; 338 if (path) return path;
@@ -342,7 +340,7 @@ static const char *getpath (lua_State *L) {
342} 340}
343 341
344 342
345static const char *nextpath (lua_State *L, const char *path) { 343static const char *pushnextpath (lua_State *L, const char *path) {
346 const char *l; 344 const char *l;
347 if (*path == '\0') return NULL; /* no more pathes */ 345 if (*path == '\0') return NULL; /* no more pathes */
348 if (*path == LUA_PATH_SEP) path++; /* skip separator */ 346 if (*path == LUA_PATH_SEP) path++; /* skip separator */
@@ -353,7 +351,7 @@ static const char *nextpath (lua_State *L, const char *path) {
353} 351}
354 352
355 353
356static void composename (lua_State *L) { 354static void pushcomposename (lua_State *L) {
357 const char *path = lua_tostring(L, -1); 355 const char *path = lua_tostring(L, -1);
358 const char *wild = strchr(path, '?'); 356 const char *wild = strchr(path, '?');
359 if (wild == NULL) return; /* no wild char; path is the file name */ 357 if (wild == NULL) return; /* no wild char; path is the file name */
@@ -372,35 +370,34 @@ static int luaB_require (lua_State *L) {
372 lua_pushvalue(L, 1); 370 lua_pushvalue(L, 1);
373 lua_setglobal(L, "_REQUIREDNAME"); 371 lua_setglobal(L, "_REQUIREDNAME");
374 lua_getglobal(L, REQTAB); 372 lua_getglobal(L, REQTAB);
375 if (!lua_istable(L, 2)) luaL_verror(L, REQTAB " is not a table"); 373 if (!lua_istable(L, 2)) return luaL_verror(L, REQTAB " is not a table");
376 path = getpath(L); 374 path = getpath(L);
377 lua_pushvalue(L, 1); /* check package's name in book-keeping table */ 375 lua_pushvalue(L, 1); /* check package's name in book-keeping table */
378 lua_gettable(L, 2); 376 lua_gettable(L, 2);
379 if (!lua_isnil(L, -1)) /* is it there? */ 377 if (!lua_isnil(L, -1)) /* is it there? */
380 return 0; /* package is already loaded */ 378 return 0; /* package is already loaded */
381 else { /* must load it */ 379 else { /* must load it */
382 while (status == LUA_ERRFILE && (path = nextpath(L, path)) != NULL) { 380 while (status == LUA_ERRFILE) {
383 composename(L); 381 lua_settop(L, 3); /* reset stack position */
382 if ((path = pushnextpath(L, path)) == NULL) break;
383 pushcomposename(L);
384 status = lua_loadfile(L, lua_tostring(L, -1)); /* try to load it */ 384 status = lua_loadfile(L, lua_tostring(L, -1)); /* try to load it */
385 if (status == 0)
386 status = lua_pcall(L, 0, 0, 0);
387 lua_settop(L, 3); /* pop string and eventual results from dofile */
388 } 385 }
389 } 386 }
390 switch (status) { 387 switch (status) {
391 case 0: { 388 case 0: {
389 lua_rawcall(L, 0, 0); /* run loaded module */
392 lua_pushvalue(L, 1); 390 lua_pushvalue(L, 1);
393 lua_pushboolean(L, 1); 391 lua_pushboolean(L, 1);
394 lua_settable(L, 2); /* mark it as loaded */ 392 lua_settable(L, 2); /* mark it as loaded */
395 return 0; 393 return 0;
396 } 394 }
397 case LUA_ERRFILE: { /* file not found */ 395 case LUA_ERRFILE: { /* file not found */
398 luaL_verror(L, "could not load package `%.20s' from path `%.200s'", 396 return luaL_verror(L, "could not load package `%s' from path `%s'",
399 lua_tostring(L, 1), lua_tostring(L, 3)); 397 lua_tostring(L, 1), getpath(L));
400 } 398 }
401 default: { 399 default: {
402 luaL_verror(L, "error loading package"); 400 return luaL_verror(L, "error loading package\n%s", lua_tostring(L, -1));
403 return 0; /* to avoid warnings */
404 } 401 }
405 } 402 }
406} 403}
@@ -445,7 +442,7 @@ static int luaB_resume (lua_State *L) {
445 lua_State *co = (lua_State *)lua_getfrombox(L, lua_upvalueindex(1)); 442 lua_State *co = (lua_State *)lua_getfrombox(L, lua_upvalueindex(1));
446 lua_settop(L, 0); 443 lua_settop(L, 0);
447 if (lua_resume(L, co) != 0) 444 if (lua_resume(L, co) != 0)
448 lua_errorobj(L); 445 return lua_errorobj(L);
449 return lua_gettop(L); 446 return lua_gettop(L);
450} 447}
451 448
@@ -466,7 +463,7 @@ static int luaB_coroutine (lua_State *L) {
466 luaL_arg_check(L, lua_isfunction(L, 1) && !lua_iscfunction(L, 1), 1, 463 luaL_arg_check(L, lua_isfunction(L, 1) && !lua_iscfunction(L, 1), 1,
467 "Lua function expected"); 464 "Lua function expected");
468 NL = lua_newthread(L); 465 NL = lua_newthread(L);
469 if (NL == NULL) luaL_verror(L, "unable to create new thread"); 466 if (NL == NULL) return luaL_verror(L, "unable to create new thread");
470 /* move function and arguments from L to NL */ 467 /* move function and arguments from L to NL */
471 for (i=0; i<n; i++) { 468 for (i=0; i<n; i++) {
472 ref = lua_ref(L, 1); 469 ref = lua_ref(L, 1);
diff --git a/ldblib.c b/ldblib.c
index 4e565256..106c1e02 100644
--- a/ldblib.c
+++ b/ldblib.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ldblib.c,v 1.48 2002/04/22 14:40:50 roberto Exp roberto $ 2** $Id: ldblib.c,v 1.49 2002/05/01 20:40:42 roberto Exp roberto $
3** Interface from Lua to its debug API 3** Interface from Lua to its debug API
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -47,9 +47,9 @@ static int getinfo (lua_State *L) {
47 options = buff; 47 options = buff;
48 } 48 }
49 else 49 else
50 luaL_argerror(L, 1, "function or level expected"); 50 return luaL_argerror(L, 1, "function or level expected");
51 if (!lua_getinfo(L, options, &ar)) 51 if (!lua_getinfo(L, options, &ar))
52 luaL_argerror(L, 2, "invalid option"); 52 return luaL_argerror(L, 2, "invalid option");
53 lua_newtable(L); 53 lua_newtable(L);
54 for (; *options; options++) { 54 for (; *options; options++) {
55 switch (*options) { 55 switch (*options) {
@@ -85,7 +85,7 @@ static int getlocal (lua_State *L) {
85 lua_Debug ar; 85 lua_Debug ar;
86 const char *name; 86 const char *name;
87 if (!lua_getstack(L, luaL_check_int(L, 1), &ar)) /* level out of range? */ 87 if (!lua_getstack(L, luaL_check_int(L, 1), &ar)) /* level out of range? */
88 luaL_argerror(L, 1, "level out of range"); 88 return luaL_argerror(L, 1, "level out of range");
89 name = lua_getlocal(L, &ar, luaL_check_int(L, 2)); 89 name = lua_getlocal(L, &ar, luaL_check_int(L, 2));
90 if (name) { 90 if (name) {
91 lua_pushstring(L, name); 91 lua_pushstring(L, name);
@@ -102,7 +102,7 @@ static int getlocal (lua_State *L) {
102static int setlocal (lua_State *L) { 102static int setlocal (lua_State *L) {
103 lua_Debug ar; 103 lua_Debug ar;
104 if (!lua_getstack(L, luaL_check_int(L, 1), &ar)) /* level out of range? */ 104 if (!lua_getstack(L, luaL_check_int(L, 1), &ar)) /* level out of range? */
105 luaL_argerror(L, 1, "level out of range"); 105 return luaL_argerror(L, 1, "level out of range");
106 luaL_check_any(L, 3); 106 luaL_check_any(L, 3);
107 lua_pushstring(L, lua_setlocal(L, &ar, luaL_check_int(L, 2))); 107 lua_pushstring(L, lua_setlocal(L, &ar, luaL_check_int(L, 2)));
108 return 1; 108 return 1;
@@ -187,20 +187,19 @@ static int errorfb (lua_State *L) {
187 int level = 1; /* skip level 0 (it's this function) */ 187 int level = 1; /* skip level 0 (it's this function) */
188 int firstpart = 1; /* still before eventual `...' */ 188 int firstpart = 1; /* still before eventual `...' */
189 lua_Debug ar; 189 lua_Debug ar;
190 luaL_Buffer b; 190 luaL_check_string(L, 1);
191 luaL_buffinit(L, &b); 191 lua_settop(L, 1);
192 luaL_addstring(&b, luaL_check_string(L, 1)); 192 lua_pushliteral(L, "\n");
193 luaL_addstring(&b, "\n");
194 while (lua_getstack(L, level++, &ar)) { 193 while (lua_getstack(L, level++, &ar)) {
195 char buff[120]; /* enough to fit following `sprintf's */ 194 char buff[10];
196 if (level == 2) 195 if (level == 2)
197 luaL_addstring(&b, "stack traceback:\n"); 196 lua_pushliteral(L, "stack traceback:\n");
198 else if (level > LEVELS1 && firstpart) { 197 else if (level > LEVELS1 && firstpart) {
199 /* no more than `LEVELS2' more levels? */ 198 /* no more than `LEVELS2' more levels? */
200 if (!lua_getstack(L, level+LEVELS2, &ar)) 199 if (!lua_getstack(L, level+LEVELS2, &ar))
201 level--; /* keep going */ 200 level--; /* keep going */
202 else { 201 else {
203 luaL_addstring(&b, " ...\n"); /* too many levels */ 202 lua_pushliteral(L, " ...\n"); /* too many levels */
204 while (lua_getstack(L, level+LEVELS2, &ar)) /* find last levels */ 203 while (lua_getstack(L, level+LEVELS2, &ar)) /* find last levels */
205 level++; 204 level++;
206 } 205 }
@@ -208,40 +207,34 @@ static int errorfb (lua_State *L) {
208 continue; 207 continue;
209 } 208 }
210 sprintf(buff, "%4d: ", level-1); 209 sprintf(buff, "%4d: ", level-1);
211 luaL_addstring(&b, buff); 210 lua_pushstring(L, buff);
212 lua_getinfo(L, "Snl", &ar); 211 lua_getinfo(L, "Snl", &ar);
213 switch (*ar.namewhat) { 212 switch (*ar.namewhat) {
214 case 'g': case 'l': /* global, local */ 213 case 'g': case 'l': /* global, local */
215 sprintf(buff, "function `%.50s'", ar.name); 214 luaL_vstr(L, "function `%s'", ar.name);
216 break; 215 break;
217 case 'f': /* field */ 216 case 'f': /* field */
218 sprintf(buff, "method `%.50s'", ar.name); 217 case 'm': /* method */
219 break; 218 luaL_vstr(L, "method `%s'", ar.name);
220 case 't': /* tag method */
221 sprintf(buff, "`%.50s' tag method", ar.name);
222 break; 219 break;
223 default: { 220 default: {
224 if (*ar.what == 'm') /* main? */ 221 if (*ar.what == 'm') /* main? */
225 sprintf(buff, "main of %.70s", ar.short_src); 222 luaL_vstr(L, "main of %s", ar.short_src);
226 else if (*ar.what == 'C') /* C function? */ 223 else if (*ar.what == 'C') /* C function? */
227 sprintf(buff, "%.70s", ar.short_src); 224 luaL_vstr(L, "%s", ar.short_src);
228 else 225 else
229 sprintf(buff, "function <%d:%.70s>", ar.linedefined, ar.short_src); 226 luaL_vstr(L, "function <%d:%s>", ar.linedefined, ar.short_src);
230 ar.source = NULL; /* do not print source again */ 227 ar.source = NULL; /* do not print source again */
231 } 228 }
232 } 229 }
233 luaL_addstring(&b, buff); 230 if (ar.currentline > 0)
234 if (ar.currentline > 0) { 231 luaL_vstr(L, " at line %d", ar.currentline);
235 sprintf(buff, " at line %d", ar.currentline); 232 if (ar.source)
236 luaL_addstring(&b, buff); 233 luaL_vstr(L, " [%s]", ar.short_src);
237 } 234 lua_pushliteral(L, "\n");
238 if (ar.source) { 235 lua_concat(L, lua_gettop(L));
239 sprintf(buff, " [%.70s]", ar.short_src);
240 luaL_addstring(&b, buff);
241 }
242 luaL_addstring(&b, "\n");
243 } 236 }
244 luaL_pushresult(&b); 237 lua_concat(L, lua_gettop(L));
245 return 1; 238 return 1;
246} 239}
247 240
diff --git a/liolib.c b/liolib.c
index bdfe380d..6d6024cf 100644
--- a/liolib.c
+++ b/liolib.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: liolib.c,v 2.3 2002/04/12 19:56:25 roberto Exp roberto $ 2** $Id: liolib.c,v 2.4 2002/05/02 17:12:27 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*/
@@ -257,7 +257,7 @@ static int g_read (lua_State *L, FILE *f, int first) {
257 else { 257 else {
258 const char *p = lua_tostring(L, n); 258 const char *p = lua_tostring(L, n);
259 if (!p || p[0] != '*') 259 if (!p || p[0] != '*')
260 luaL_verror(L, "invalid `read' option"); 260 return luaL_verror(L, "invalid `read' option");
261 switch (p[1]) { 261 switch (p[1]) {
262 case 'n': /* number */ 262 case 'n': /* number */
263 success = read_number(L, f); 263 success = read_number(L, f);
@@ -270,11 +270,10 @@ static int g_read (lua_State *L, FILE *f, int first) {
270 success = 1; /* always success */ 270 success = 1; /* always success */
271 break; 271 break;
272 case 'w': /* word */ 272 case 'w': /* word */
273 luaL_verror(L, "obsolete option `*w'"); 273 return luaL_verror(L, "obsolete option `*w'");
274 break; 274 break;
275 default: 275 default:
276 luaL_argerror(L, n, "invalid format"); 276 return luaL_argerror(L, n, "invalid format");
277 success = 0; /* to avoid warnings */
278 } 277 }
279 } 278 }
280 } 279 }
@@ -430,7 +429,7 @@ static int io_rename (lua_State *L) {
430static int io_tmpname (lua_State *L) { 429static int io_tmpname (lua_State *L) {
431 char buff[L_tmpnam]; 430 char buff[L_tmpnam];
432 if (tmpnam(buff) != buff) 431 if (tmpnam(buff) != buff)
433 luaL_verror(L, "unable to generate a unique filename"); 432 return luaL_verror(L, "unable to generate a unique filename");
434 lua_pushstring(L, buff); 433 lua_pushstring(L, buff);
435 return 1; 434 return 1;
436} 435}
@@ -471,7 +470,7 @@ static int getfield (lua_State *L, const char *key, int d) {
471 res = (int)(lua_tonumber(L, -1)); 470 res = (int)(lua_tonumber(L, -1));
472 else { 471 else {
473 if (d == -2) 472 if (d == -2)
474 luaL_verror(L, "field `%.20s' missing in date table", key); 473 return luaL_verror(L, "field `%s' missing in date table", key);
475 res = d; 474 res = d;
476 } 475 }
477 lua_pop(L, 1); 476 lua_pop(L, 1);
@@ -510,7 +509,7 @@ static int io_date (lua_State *L) {
510 if (strftime(b, sizeof(b), s, stm)) 509 if (strftime(b, sizeof(b), s, stm))
511 lua_pushstring(L, b); 510 lua_pushstring(L, b);
512 else 511 else
513 luaL_verror(L, "invalid `date' format"); 512 return luaL_verror(L, "invalid `date' format");
514 } 513 }
515 return 1; 514 return 1;
516} 515}
diff --git a/lmathlib.c b/lmathlib.c
index 7d91b083..4890f6f9 100644
--- a/lmathlib.c
+++ b/lmathlib.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lmathlib.c,v 1.43 2002/04/04 20:20:49 roberto Exp roberto $ 2** $Id: lmathlib.c,v 1.44 2002/05/02 17:12:27 roberto Exp roberto $
3** Standard mathematical library 3** Standard mathematical library
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -187,7 +187,7 @@ static int math_random (lua_State *L) {
187 lua_pushnumber(L, (int)(r*(u-l+1))+l); /* integer between `l' and `u' */ 187 lua_pushnumber(L, (int)(r*(u-l+1))+l); /* integer between `l' and `u' */
188 break; 188 break;
189 } 189 }
190 default: luaL_verror(L, "wrong number of arguments"); 190 default: return luaL_verror(L, "wrong number of arguments");
191 } 191 }
192 return 1; 192 return 1;
193} 193}
diff --git a/lstrlib.c b/lstrlib.c
index b308b78e..8a3cd686 100644
--- a/lstrlib.c
+++ b/lstrlib.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lstrlib.c,v 1.80 2002/04/02 20:41:59 roberto Exp roberto $ 2** $Id: lstrlib.c,v 1.81 2002/05/02 17:12:27 roberto Exp roberto $
3** Standard library for string operations and pattern-matching 3** Standard library for string operations and pattern-matching
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -170,7 +170,7 @@ typedef struct MatchState {
170static int check_capture (MatchState *ms, int l) { 170static int check_capture (MatchState *ms, int l) {
171 l -= '1'; 171 l -= '1';
172 if (l < 0 || l >= ms->level || ms->capture[l].len == CAP_UNFINISHED) 172 if (l < 0 || l >= ms->level || ms->capture[l].len == CAP_UNFINISHED)
173 luaL_verror(ms->L, "invalid capture index"); 173 return luaL_verror(ms->L, "invalid capture index");
174 return l; 174 return l;
175} 175}
176 176
@@ -179,8 +179,7 @@ static int capture_to_close (MatchState *ms) {
179 int level = ms->level; 179 int level = ms->level;
180 for (level--; level>=0; level--) 180 for (level--; level>=0; level--)
181 if (ms->capture[level].len == CAP_UNFINISHED) return level; 181 if (ms->capture[level].len == CAP_UNFINISHED) return level;
182 luaL_verror(ms->L, "invalid pattern capture"); 182 return luaL_verror(ms->L, "invalid pattern capture");
183 return 0; /* to avoid warnings */
184} 183}
185 184
186 185
@@ -663,7 +662,7 @@ static int str_format (lua_State *L) {
663 char buff[MAX_ITEM]; /* to store the formatted item */ 662 char buff[MAX_ITEM]; /* to store the formatted item */
664 int hasprecision = 0; 663 int hasprecision = 0;
665 if (isdigit(uchar(*strfrmt)) && *(strfrmt+1) == '$') 664 if (isdigit(uchar(*strfrmt)) && *(strfrmt+1) == '$')
666 luaL_verror(L, "obsolete `format' option (d$)"); 665 return luaL_verror(L, "obsolete `format' option (d$)");
667 arg++; 666 arg++;
668 strfrmt = scanformat(L, strfrmt, form, &hasprecision); 667 strfrmt = scanformat(L, strfrmt, form, &hasprecision);
669 switch (*strfrmt++) { 668 switch (*strfrmt++) {
@@ -696,7 +695,7 @@ static int str_format (lua_State *L) {
696 } 695 }
697 } 696 }
698 default: /* also treat cases `pnLlh' */ 697 default: /* also treat cases `pnLlh' */
699 luaL_verror(L, "invalid option in `format'"); 698 return luaL_verror(L, "invalid option in `format'");
700 } 699 }
701 luaL_addlstring(&b, buff, strlen(buff)); 700 luaL_addlstring(&b, buff, strlen(buff));
702 } 701 }
diff --git a/ltests.c b/ltests.c
index e19cea71..feef9e52 100644
--- a/ltests.c
+++ b/ltests.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: ltests.c,v 1.118 2002/05/01 20:40:42 roberto Exp roberto $ 2** $Id: ltests.c,v 1.119 2002/05/02 13:06:20 roberto Exp roberto $
3** Internal Module for Debugging of the Lua Implementation 3** Internal Module for Debugging of the Lua Implementation
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -639,7 +639,7 @@ static int testC (lua_State *L) {
639 else if EQ("type") { 639 else if EQ("type") {
640 lua_pushstring(L, lua_typename(L, lua_type(L, getnum))); 640 lua_pushstring(L, lua_typename(L, lua_type(L, getnum)));
641 } 641 }
642 else luaL_verror(L, "unknown instruction %.30s", buff); 642 else luaL_verror(L, "unknown instruction %s", buff);
643 } 643 }
644 return 0; 644 return 0;
645} 645}
diff --git a/lua.h b/lua.h
index 9ea98c11..47f50f1f 100644
--- a/lua.h
+++ b/lua.h
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lua.h,v 1.129 2002/05/01 20:40:42 roberto Exp roberto $ 2** $Id: lua.h,v 1.130 2002/05/01 20:48:12 roberto Exp roberto $
3** Lua - An Extensible Extension Language 3** Lua - An Extensible Extension Language
4** TeCGraf: Grupo de Tecnologia em Computacao Grafica, PUC-Rio, Brazil 4** TeCGraf: Grupo de Tecnologia em Computacao Grafica, PUC-Rio, Brazil
5** e-mail: info@lua.org 5** e-mail: info@lua.org
@@ -193,7 +193,7 @@ LUA_API void lua_setgcthreshold (lua_State *L, int newthreshold);
193** miscellaneous functions 193** miscellaneous functions
194*/ 194*/
195 195
196LUA_API void lua_errorobj (lua_State *L); 196LUA_API int lua_errorobj (lua_State *L);
197 197
198LUA_API int lua_next (lua_State *L, int index); 198LUA_API int lua_next (lua_State *L, int index);
199LUA_API int lua_getn (lua_State *L, int index); 199LUA_API int lua_getn (lua_State *L, int index);