From 3c9d999424520c809e05bee11d81788b488434f6 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Fri, 3 Mar 2000 11:58:26 -0300 Subject: many details (most by lhf). --- lbuiltin.c | 53 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 21 deletions(-) (limited to 'lbuiltin.c') diff --git a/lbuiltin.c b/lbuiltin.c index 7e0c832c..3a57e814 100644 --- a/lbuiltin.c +++ b/lbuiltin.c @@ -1,10 +1,19 @@ /* -** $Id: lbuiltin.c,v 1.92 2000/01/19 16:50:30 roberto Exp roberto $ +** $Id: lbuiltin.c,v 1.93 2000/02/22 18:12:46 roberto Exp roberto $ ** Built-in functions ** See Copyright Notice in lua.h */ +/* +** ========================================================================= +** All built-in functions are public (i.e. not static) and are named luaB_f, +** where f is the function name in Lua. So, if you do not need all these +** functions, you may register manually only the ones that you need. +** ========================================================================= +*/ + + #include #include #include @@ -91,7 +100,7 @@ static Hash *gettable (lua_State *L, int arg) { /* -** If your system does not support "stderr", redefine this function, or +** If your system does not support `stderr', redefine this function, or ** redefine _ERRORMESSAGE so that it won't need _ALERT. */ void luaB__ALERT (lua_State *L) { @@ -116,9 +125,9 @@ void luaB__ERRORMESSAGE (lua_State *L) { /* -** 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 -** model but changing "fputs" to put the strings at a proper place +** 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 +** model but changing `fputs' to put the strings at a proper place ** (a console window or a log file, for instance). */ #ifndef MAXPRINT @@ -174,17 +183,17 @@ void luaB_error (lua_State *L) { } void luaB_setglobal (lua_State *L) { - const char *n = luaL_check_string(L, 1); + const char *name = luaL_check_string(L, 1); lua_Object value = luaL_nonnullarg(L, 2); lua_pushobject(L, value); - lua_setglobal(L, n); + lua_setglobal(L, name); } void luaB_rawsetglobal (lua_State *L) { - const char *n = luaL_check_string(L, 1); + const char *name = luaL_check_string(L, 1); lua_Object value = luaL_nonnullarg(L, 2); lua_pushobject(L, value); - lua_rawsetglobal(L, n); + lua_rawsetglobal(L, name); } void luaB_getglobal (lua_State *L) { @@ -236,7 +245,7 @@ void luaB_settagmethod (lua_State *L) { "function or nil expected"); #ifndef LUA_COMPAT_GC if (strcmp(event, "gc") == 0 && tag != LUA_T_NIL) - lua_error(L, "cannot set this tag method from Lua"); + lua_error(L, "cannot set this `gc' tag method from Lua"); #endif lua_pushobject(L, nf); lua_pushobject(L, lua_settagmethod(L, tag, event)); @@ -325,7 +334,7 @@ void luaB_call (lua_State *L) { return; /* return nil to signal the error */ } else - lua_error(L, NULL); + lua_error(L, NULL); /* propagate error without additional messages */ } else { /* no errors */ if (strchr(options, 'p')) { /* pack results? */ @@ -340,14 +349,14 @@ void luaB_call (lua_State *L) { void luaB_nextvar (lua_State *L) { lua_Object o = luaL_nonnullarg(L, 1); - TaggedString *g; + TaggedString *name; if (ttype(o) == LUA_T_NIL) - g = NULL; + name = NULL; else { luaL_arg_check(L, ttype(o) == LUA_T_STRING, 1, "variable name expected"); - g = tsvalue(o); + name = tsvalue(o); } - if (!luaA_nextvar(L, g)) + if (!luaA_nextvar(L, name)) lua_pushnil(L); } @@ -355,7 +364,7 @@ void luaB_nextvar (lua_State *L) { void luaB_next (lua_State *L) { const Hash *a = gettable(L, 1); lua_Object k = luaL_nonnullarg(L, 2); - int i; /* will get first element after `i' */ + int i; /* `luaA_next' gets first element after `i' */ if (ttype(k) == LUA_T_NIL) i = 0; /* get first */ else { @@ -390,7 +399,8 @@ void luaB_tostring (lua_State *L) { sprintf(buff, "function: %p", o->value.f); break; case LUA_T_USERDATA: - sprintf(buff, "userdata: %p", o->value.ts->u.d.value); + sprintf(buff, "userdata: %p(%d)", o->value.ts->u.d.value, + o->value.ts->u.d.tag); break; case LUA_T_NIL: lua_pushstring(L, "nil"); @@ -435,7 +445,7 @@ void luaB_foreachi (lua_State *L) { luaD_call(L, L->top-3, 1); if (ttype(L->top-1) != LUA_T_NIL) return; - L->top--; + L->top--; /* remove nil result */ } } @@ -499,7 +509,7 @@ void luaB_tinsert (lua_State *L) { pos = n+1; } luaV_setn(L, a, n+1); /* a.n = n+1 */ - for ( ;n>=pos; n--) + for (; n>=pos; n--) luaH_move(L, a, n, n+1); /* a[n+1] = a[n] */ luaH_setint(L, a, pos, v); /* a[pos] = v */ } @@ -521,6 +531,7 @@ void luaB_tremove (lua_State *L) { /* ** {====================================================== ** Quicksort +** (based on `Algorithms in MODULA-3', Robert Sedgewick; Addison-Wesley, 1993.) */ static void swap (lua_State *L, Hash *a, int i, int j) { @@ -602,7 +613,7 @@ void luaB_sort (lua_State *L) { lua_Object func = lua_getparam(L, 2); luaL_arg_check(L, func == LUA_NOOBJECT || lua_isfunction(L, func), 2, "function expected"); - luaD_checkstack(L, 4); /* for Pivot, f, a, b (sort_comp) */ + luaD_checkstack(L, 4); /* for pivot, f, a, b (sort_comp) */ auxsort(L, a, 1, n, func); lua_pushobject(L, t); } @@ -640,7 +651,7 @@ static const struct luaL_reg builtin_funcs[] = { {"tonumber", luaB_tonumber}, {"tostring", luaB_tostring}, {"type", luaB_type}, - /* "Extra" functions */ +/* "Extra" functions */ {"assert", luaB_assert}, {"foreach", luaB_foreach}, {"foreachi", luaB_foreachi}, -- cgit v1.2.3-55-g6feb