From 955def034814e96f5f8e42def2e47ca6817ef103 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Thu, 16 May 2002 15:39:46 -0300 Subject: new names for string formating functions --- lapi.c | 48 +++++++++++++++++++++++++++--------------------- lauxlib.c | 21 +++++++-------------- lauxlib.h | 3 +-- lbaselib.c | 25 +------------------------ ldblib.c | 17 +++++++++-------- ldebug.c | 6 +++--- ldo.c | 4 ++-- llex.c | 16 ++++++++-------- lobject.c | 8 ++++---- lobject.h | 6 +++--- lparser.c | 6 +++--- lua.h | 18 ++++++++++-------- 12 files changed, 78 insertions(+), 100 deletions(-) diff --git a/lapi.c b/lapi.c index eae26308..5421cdf4 100644 --- a/lapi.c +++ b/lapi.c @@ -1,5 +1,5 @@ /* -** $Id: lapi.c,v 1.190 2002/05/07 17:36:56 roberto Exp roberto $ +** $Id: lapi.c,v 1.191 2002/05/15 18:57:44 roberto Exp roberto $ ** Lua API ** See Copyright Notice in lua.h */ @@ -355,10 +355,23 @@ LUA_API void lua_pushstring (lua_State *L, const char *s) { } -LUA_API void lua_vpushstr (lua_State *L, const char *fmt, va_list argp) { +LUA_API const char *lua_pushvfstring (lua_State *L, const char *fmt, + va_list argp) { + const char *ret; lua_lock(L); - luaO_vpushstr(L, fmt, argp); + ret = luaO_pushvfstring(L, fmt, argp); lua_unlock(L); + return ret; +} + + +LUA_API const char *lua_pushfstring (lua_State *L, const char *fmt, ...) { + const char *ret; + va_list argp; + va_start(argp, fmt); + ret = lua_pushvfstring(L, fmt, argp); + va_end(argp); + return ret; } @@ -556,21 +569,16 @@ LUA_API int lua_pcall (lua_State *L, int nargs, int nresults, int errf) { static int errfile (lua_State *L, const char *filename) { if (filename == NULL) filename = "stdin"; - lua_pushliteral(L, "cannot read "); - lua_pushstring(L, filename); - lua_pushliteral(L, ": "); - lua_pushstring(L, lua_fileerror); - lua_concat(L, 4); + lua_pushfstring(L, "cannot read %s: %s", filename, lua_fileerror); return LUA_ERRFILE; } LUA_API int lua_loadfile (lua_State *L, const char *filename) { ZIO z; - const char *luafname; /* name used by lua */ + int fnindex; int status; int bin; /* flag for file mode */ - int nlevel; /* level on the stack of filename */ FILE *f = (filename == NULL) ? stdin : fopen(filename, "r"); if (f == NULL) return errfile(L, filename); /* unable to open file */ bin = (ungetc(getc(f), f) == LUA_SIGNATURE[0]); @@ -580,19 +588,17 @@ LUA_API int lua_loadfile (lua_State *L, const char *filename) { if (f == NULL) return errfile(L, filename); /* unable to reopen file */ } if (filename == NULL) - lua_pushstring(L, "=stdin"); - else { - lua_pushliteral(L, "@"); - lua_pushstring(L, filename); - lua_concat(L, 2); - } - nlevel = lua_gettop(L); - luafname = lua_tostring(L, -1); /* luafname = `@'..filename */ - luaZ_Fopen(&z, f, luafname); + lua_pushliteral(L, "=stdin"); + else + lua_pushfstring(L, "@%s", filename); + fnindex = lua_gettop(L); /* stack index of file name */ + luaZ_Fopen(&z, f, lua_tostring(L, fnindex)); status = luaD_protectedparser(L, &z, bin); - if (ferror(f)) + lua_remove(L, fnindex); + if (ferror(f)) { + if (status == 0) lua_pop(L, 1); /* remove chunk */ return errfile(L, filename); - lua_remove(L, nlevel); /* remove filename */ + } if (f != stdin) fclose(f); return status; diff --git a/lauxlib.c b/lauxlib.c index ecaa6c8f..b7b82661 100644 --- a/lauxlib.c +++ b/lauxlib.c @@ -1,5 +1,5 @@ /* -** $Id: lauxlib.c,v 1.69 2002/05/07 17:36:56 roberto Exp roberto $ +** $Id: lauxlib.c,v 1.70 2002/05/15 18:57:44 roberto Exp roberto $ ** Auxiliary functions for building Lua libraries ** See Copyright Notice in lua.h */ @@ -43,8 +43,9 @@ LUALIB_API int luaL_argerror (lua_State *L, int narg, const char *extramsg) { LUALIB_API int luaL_typerror (lua_State *L, int narg, const char *tname) { - luaL_vstr(L, "%s expected, got %s", tname, lua_typename(L, lua_type(L,narg))); - return luaL_argerror(L, narg, lua_tostring(L, -1)); + const char *msg = lua_pushfstring(L, "%s expected, got %s", + tname, lua_typename(L, lua_type(L,narg))); + return luaL_argerror(L, narg, msg); } @@ -142,25 +143,17 @@ LUALIB_API void luaL_opennamedlib (lua_State *L, const char *libname, } -LUALIB_API void luaL_vstr (lua_State *L, const char *fmt, ...) { - va_list argp; - va_start(argp, fmt); - lua_vpushstr(L, fmt, argp); - va_end(argp); -} - - LUALIB_API int luaL_verror (lua_State *L, const char *fmt, ...) { lua_Debug ar; + const char *msg; va_list argp; va_start(argp, fmt); - lua_vpushstr(L, fmt, argp); + msg = lua_pushvfstring(L, fmt, argp); va_end(argp); if (lua_getstack(L, 1, &ar)) { /* check calling function */ lua_getinfo(L, "Snl", &ar); if (ar.currentline > 0) - luaL_vstr(L, "%s:%d: %s", - ar.short_src, ar.currentline, lua_tostring(L, -1)); + lua_pushfstring(L, "%s:%d: %s", ar.short_src, ar.currentline, msg); } return lua_errorobj(L); } diff --git a/lauxlib.h b/lauxlib.h index 93282517..f8c0235e 100644 --- a/lauxlib.h +++ b/lauxlib.h @@ -1,5 +1,5 @@ /* -** $Id: lauxlib.h,v 1.45 2002/05/01 20:40:42 roberto Exp roberto $ +** $Id: lauxlib.h,v 1.46 2002/05/06 19:05:10 roberto Exp roberto $ ** Auxiliary functions for building Lua libraries ** See Copyright Notice in lua.h */ @@ -45,7 +45,6 @@ LUALIB_API void luaL_check_type (lua_State *L, int narg, int t); LUALIB_API void luaL_check_any (lua_State *L, int narg); LUALIB_API int luaL_verror (lua_State *L, const char *fmt, ...); -LUALIB_API void luaL_vstr (lua_State *L, const char *fmt, ...); LUALIB_API int luaL_findstring (const char *name, const char *const list[]); diff --git a/lbaselib.c b/lbaselib.c index cdfa3d33..e29480bd 100644 --- a/lbaselib.c +++ b/lbaselib.c @@ -1,5 +1,5 @@ /* -** $Id: lbaselib.c,v 1.72 2002/05/06 19:05:10 roberto Exp roberto $ +** $Id: lbaselib.c,v 1.73 2002/05/13 13:10:58 roberto Exp roberto $ ** Basic library ** See Copyright Notice in lua.h */ @@ -31,28 +31,6 @@ static int luaB__ALERT (lua_State *L) { } -/* -** Basic implementation of _ERRORMESSAGE. -** The library `liolib' redefines _ERRORMESSAGE for better error information. -*/ -static int luaB__ERRORMESSAGE (lua_State *L) { - lua_Debug ar; - luaL_check_type(L, 1, LUA_TSTRING); - lua_pushliteral(L, "error: "); - lua_pushvalue(L, 1); - if (lua_getstack(L, 1, &ar)) { - lua_getinfo(L, "Sl", &ar); - if (ar.source && ar.currentline > 0) { - luaL_vstr(L, "\n <%s: line %d>", ar.short_src, ar.currentline); - lua_concat(L, 2); - } - } - lua_pushliteral(L, "\n"); - lua_concat(L, 3); - return 1; -} - - /* ** If your system does not support `stdout', you can just remove this function. ** If you need, you can define your own `print' function, following this @@ -408,7 +386,6 @@ static int luaB_require (lua_State *L) { static const luaL_reg base_funcs[] = { {LUA_ALERT, luaB__ALERT}, - {"_ERRORMESSAGE", luaB__ERRORMESSAGE}, {"error", luaB_error}, {"metatable", luaB_metatable}, {"globals", luaB_globals}, diff --git a/ldblib.c b/ldblib.c index da0a90f5..5ef7d428 100644 --- a/ldblib.c +++ b/ldblib.c @@ -1,5 +1,5 @@ /* -** $Id: ldblib.c,v 1.51 2002/05/07 17:36:56 roberto Exp roberto $ +** $Id: ldblib.c,v 1.52 2002/05/15 18:57:44 roberto Exp roberto $ ** Interface from Lua to its debug API ** See Copyright Notice in lua.h */ @@ -41,7 +41,7 @@ static int getinfo (lua_State *L) { } } else if (lua_isfunction(L, 1)) { - luaL_vstr(L, ">%s", options); + lua_pushfstring(L, ">%s", options); options = lua_tostring(L, -1); lua_pushvalue(L, 1); } @@ -207,23 +207,24 @@ static int errorfb (lua_State *L) { sprintf(buff, "%4d- ", level-1); lua_pushstring(L, buff); lua_getinfo(L, "Snl", &ar); - luaL_vstr(L, "%s:", ar.short_src); + lua_pushfstring(L, "%s:", ar.short_src); if (ar.currentline > 0) - luaL_vstr(L, "%d:", ar.currentline); + lua_pushfstring(L, "%d:", ar.currentline); switch (*ar.namewhat) { case 'g': /* global */ case 'l': /* local */ case 'f': /* field */ case 'm': /* method */ - luaL_vstr(L, " in function `%s'", ar.name); + lua_pushfstring(L, " in function `%s'", ar.name); break; default: { if (*ar.what == 'm') /* main? */ - luaL_vstr(L, " in main chunk"); + lua_pushfstring(L, " in main chunk"); else if (*ar.what == 'C') /* C function? */ - luaL_vstr(L, "%s", ar.short_src); + lua_pushfstring(L, "%s", ar.short_src); else - luaL_vstr(L, " in function <%s:%d>", ar.short_src, ar.linedefined); + lua_pushfstring(L, " in function <%s:%d>", + ar.short_src, ar.linedefined); } } lua_pushliteral(L, "\n"); diff --git a/ldebug.c b/ldebug.c index eb2aa527..2a94dc09 100644 --- a/ldebug.c +++ b/ldebug.c @@ -1,5 +1,5 @@ /* -** $Id: ldebug.c,v 1.115 2002/05/14 17:52:22 roberto Exp roberto $ +** $Id: ldebug.c,v 1.116 2002/05/15 18:57:44 roberto Exp roberto $ ** Debug Interface ** See Copyright Notice in lua.h */ @@ -517,13 +517,13 @@ void luaG_runerror (lua_State *L, const char *fmt, ...) { const char *msg; va_list argp; va_start(argp, fmt); - msg = luaO_vpushstr(L, fmt, argp); + msg = luaO_pushvfstring(L, fmt, argp); va_end(argp); if (isLmark(L->ci)) { char buff[LUA_IDSIZE]; int line = currentline(L, L->ci); luaO_chunkid(buff, getstr(getluaproto(L->ci)->source), LUA_IDSIZE); - msg = luaO_pushstr(L, "%s:%d: %s", buff, line, msg); + msg = luaO_pushfstring(L, "%s:%d: %s", buff, line, msg); } luaD_error(L, msg, LUA_ERRRUN); } diff --git a/ldo.c b/ldo.c index 5b5bad8d..34914923 100644 --- a/ldo.c +++ b/ldo.c @@ -1,5 +1,5 @@ /* -** $Id: ldo.c,v 1.174 2002/05/07 17:36:56 roberto Exp roberto $ +** $Id: ldo.c,v 1.175 2002/05/15 18:57:44 roberto Exp roberto $ ** Stack and Call structure of Lua ** See Copyright Notice in lua.h */ @@ -424,7 +424,7 @@ int luaD_protectedparser (lua_State *L, ZIO *z, int bin) { lua_lock(L); p.z = z; p.bin = bin; /* before parsing, give a (good) chance to GC */ - if (G(L)->nblocks/8 >= G(L)->GCthreshold/10) + if (G(L)->nblocks + G(L)->nblocks/4 >= G(L)->GCthreshold) luaC_collectgarbage(L); old_blocks = G(L)->nblocks; setnilvalue(&p.err); diff --git a/llex.c b/llex.c index 90e6698b..08beda35 100644 --- a/llex.c +++ b/llex.c @@ -1,5 +1,5 @@ /* -** $Id: llex.c,v 1.100 2002/05/07 17:36:56 roberto Exp roberto $ +** $Id: llex.c,v 1.101 2002/05/15 18:57:44 roberto Exp roberto $ ** Lexical Analyzer ** See Copyright Notice in lua.h */ @@ -51,7 +51,7 @@ void luaX_init (lua_State *L) { void luaX_checklimit (LexState *ls, int val, int limit, const char *msg) { if (val > limit) { - msg = luaO_pushstr(ls->L, "too many %s (limit=%d)", msg, limit); + msg = luaO_pushfstring(ls->L, "too many %s (limit=%d)", msg, limit); luaX_syntaxerror(ls, msg); } } @@ -61,7 +61,7 @@ static void luaX_error (LexState *ls, const char *s, const char *token) { lua_State *L = ls->L; char buff[MAXSRC]; luaO_chunkid(buff, getstr(ls->source), MAXSRC); - luaO_pushstr(L, "%s:%d: %s near `%s'", buff, ls->linenumber, s, token); + luaO_pushfstring(L, "%s:%d: %s near `%s'", buff, ls->linenumber, s, token); luaD_errorobj(L, L->top - 1, LUA_ERRSYNTAX); } @@ -70,13 +70,13 @@ void luaX_syntaxerror (LexState *ls, const char *msg) { const char *lasttoken; switch (ls->t.token) { case TK_NAME: - lasttoken = luaO_pushstr(ls->L, "%s", getstr(ls->t.seminfo.ts)); + lasttoken = luaO_pushfstring(ls->L, "%s", getstr(ls->t.seminfo.ts)); break; case TK_STRING: - lasttoken = luaO_pushstr(ls->L, "\"%s\"", getstr(ls->t.seminfo.ts)); + lasttoken = luaO_pushfstring(ls->L, "\"%s\"", getstr(ls->t.seminfo.ts)); break; case TK_NUMBER: - lasttoken = luaO_pushstr(ls->L, "%f", ls->t.seminfo.r); + lasttoken = luaO_pushfstring(ls->L, "%f", ls->t.seminfo.r); break; default: lasttoken = luaX_token2str(ls, ls->t.token); @@ -89,7 +89,7 @@ void luaX_syntaxerror (LexState *ls, const char *msg) { const char *luaX_token2str (LexState *ls, int token) { if (token < FIRST_RESERVED) { lua_assert(token == (char)token); - return luaO_pushstr(ls->L, "%c", token); + return luaO_pushfstring(ls->L, "%c", token); } else return token2string[token-FIRST_RESERVED]; @@ -397,7 +397,7 @@ int luaX_lex (LexState *LS, SemInfo *seminfo) { int c = LS->current; if (iscntrl(c)) luaX_error(LS, "invalid control char", - luaO_pushstr(LS->L, "char(%d)", c)); + luaO_pushfstring(LS->L, "char(%d)", c)); next(LS); return c; /* single-char tokens (+ - / ...) */ } diff --git a/lobject.c b/lobject.c index 52e81205..a57db0c3 100644 --- a/lobject.c +++ b/lobject.c @@ -1,5 +1,5 @@ /* -** $Id: lobject.c,v 1.79 2002/05/07 17:36:56 roberto Exp roberto $ +** $Id: lobject.c,v 1.80 2002/05/15 18:57:44 roberto Exp roberto $ ** Some generic functions over Lua objects ** See Copyright Notice in lua.h */ @@ -99,7 +99,7 @@ static void pushstr (lua_State *L, const char *str) { /* this function handles only `%d', `%c', %f, and `%s' formats */ -const char *luaO_vpushstr (lua_State *L, const char *fmt, va_list argp) { +const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp) { int n = 1; pushstr(L, ""); for (;;) { @@ -141,11 +141,11 @@ const char *luaO_vpushstr (lua_State *L, const char *fmt, va_list argp) { } -const char *luaO_pushstr (lua_State *L, const char *fmt, ...) { +const char *luaO_pushfstring (lua_State *L, const char *fmt, ...) { const char *msg; va_list argp; va_start(argp, fmt); - msg = luaO_vpushstr(L, fmt, argp); + msg = luaO_pushvfstring(L, fmt, argp); va_end(argp); return msg; } diff --git a/lobject.h b/lobject.h index fbf57adc..76855319 100644 --- a/lobject.h +++ b/lobject.h @@ -1,5 +1,5 @@ /* -** $Id: lobject.h,v 1.131 2002/05/07 17:36:56 roberto Exp roberto $ +** $Id: lobject.h,v 1.132 2002/05/15 18:57:44 roberto Exp roberto $ ** Type definitions for Lua objects ** See Copyright Notice in lua.h */ @@ -250,8 +250,8 @@ void *luaO_openspaceaux (lua_State *L, size_t n); int luaO_equalObj (const TObject *t1, const TObject *t2); int luaO_str2d (const char *s, lua_Number *result); -const char *luaO_vpushstr (lua_State *L, const char *fmt, va_list argp); -const char *luaO_pushstr (lua_State *L, const char *fmt, ...); +const char *luaO_pushvfstring (lua_State *L, const char *fmt, va_list argp); +const char *luaO_pushfstring (lua_State *L, const char *fmt, ...); void luaO_chunkid (char *out, const char *source, int len); diff --git a/lparser.c b/lparser.c index af9d0f6e..3afe5945 100644 --- a/lparser.c +++ b/lparser.c @@ -1,5 +1,5 @@ /* -** $Id: lparser.c,v 1.182 2002/05/13 13:09:00 roberto Exp roberto $ +** $Id: lparser.c,v 1.183 2002/05/14 17:52:22 roberto Exp roberto $ ** Lua Parser ** See Copyright Notice in lua.h */ @@ -70,7 +70,7 @@ static void lookahead (LexState *ls) { static void error_expected (LexState *ls, int token) { luaX_syntaxerror(ls, - luaO_pushstr(ls->L, "`%s' expected", luaX_token2str(ls, token))); + luaO_pushfstring(ls->L, "`%s' expected", luaX_token2str(ls, token))); } @@ -98,7 +98,7 @@ static void check_match (LexState *ls, int what, int who, int where) { if (where == ls->linenumber) error_expected(ls, what); else { - luaX_syntaxerror(ls, luaO_pushstr(ls->L, + luaX_syntaxerror(ls, luaO_pushfstring(ls->L, "`%s' expected (to close `%s' at line %d)", luaX_token2str(ls, what), luaX_token2str(ls, who), where)); } diff --git a/lua.h b/lua.h index ba2069e7..58af7a92 100644 --- a/lua.h +++ b/lua.h @@ -1,7 +1,7 @@ /* -** $Id: lua.h,v 1.131 2002/05/06 19:05:10 roberto Exp roberto $ +** $Id: lua.h,v 1.132 2002/05/07 17:36:56 roberto Exp roberto $ ** Lua - An Extensible Extension Language -** TeCGraf: Grupo de Tecnologia em Computacao Grafica, PUC-Rio, Brazil +** Tecgraf: Grupo de Tecnologia em Computacao Grafica, PUC-Rio, Brazil ** e-mail: info@lua.org ** www: http://www.lua.org ** See Copyright Notice at the end of this file @@ -21,7 +21,7 @@ #define LUA_VERSION "Lua 5.0 (alpha)" -#define LUA_COPYRIGHT "Copyright (C) 1994-2002 TeCGraf, PUC-Rio" +#define LUA_COPYRIGHT "Copyright (C) 1994-2002 Tecgraf, PUC-Rio" #define LUA_AUTHORS "W. Celes, R. Ierusalimschy & L. H. de Figueiredo" @@ -130,7 +130,7 @@ LUA_API int lua_lessthan (lua_State *L, int index1, int index2); LUA_API lua_Number lua_tonumber (lua_State *L, int index); LUA_API int lua_toboolean (lua_State *L, int index); -LUA_API const char *lua_tostring (lua_State *L, int index); +LUA_API const char *lua_tostring (lua_State *L, int index); LUA_API size_t lua_strlen (lua_State *L, int index); LUA_API lua_CFunction lua_tocfunction (lua_State *L, int index); LUA_API void *lua_touserdata (lua_State *L, int index); @@ -144,7 +144,9 @@ LUA_API void lua_pushnil (lua_State *L); LUA_API void lua_pushnumber (lua_State *L, lua_Number n); LUA_API void lua_pushlstring (lua_State *L, const char *s, size_t len); LUA_API void lua_pushstring (lua_State *L, const char *s); -LUA_API void lua_vpushstr (lua_State *L, const char *fmt, va_list argp); +LUA_API const char *lua_pushvfstring (lua_State *L, const char *fmt, + va_list argp); +LUA_API const char *lua_pushfstring (lua_State *L, const char *fmt, ...); LUA_API void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n); LUA_API void lua_pushboolean (lua_State *L, int b); LUA_API void lua_pushudataval (lua_State *L, void *p); @@ -319,7 +321,7 @@ LUA_API int lua_pushupvalues (lua_State *L); /****************************************************************************** -* Copyright (C) 1994-2001 TeCGraf, PUC-Rio. All rights reserved. +* Copyright (C) 1994-2001 Tecgraf, PUC-Rio. All rights reserved. * * Permission is hereby granted, without written agreement and without license * or royalty fees, to use, copy, modify, and distribute this software and its @@ -341,14 +343,14 @@ LUA_API int lua_pushupvalues (lua_State *L); * to, the implied warranties of merchantability and fitness for a particular * purpose. The software provided hereunder is on an "as is" basis, and the * authors have no obligation to provide maintenance, support, updates, -* enhancements, or modifications. In no event shall TeCGraf, PUC-Rio, or the +* enhancements, or modifications. In no event shall Tecgraf, PUC-Rio, or the * authors be held liable to any party for direct, indirect, special, * incidental, or consequential damages arising out of the use of this software * and its documentation. * * The Lua language and this implementation have been entirely designed and * written by Waldemar Celes Filho, Roberto Ierusalimschy and -* Luiz Henrique de Figueiredo at TeCGraf, PUC-Rio. +* Luiz Henrique de Figueiredo at Tecgraf, PUC-Rio. * * This implementation contains no third-party code. ******************************************************************************/ -- cgit v1.2.3-55-g6feb