lua

A copy of the Lua development repository
Log | Files | Refs | README

commit d5feffdb607e4376bcea32c3642131962aa6857f
parent bb5627f3a4c9c8bf25b836f07708067b1170dde5
Author: Roberto Ierusalimschy <roberto@inf.puc-rio.br>
Date:   Mon, 22 Feb 1999 16:12:50 -0300

new function lua_nextvar

Diffstat:
Mlapi.c | 30++++++++++++++++++++++++++++--
Mlapi.h | 3++-
Mlbuiltin.c | 12++++--------
Mlua.h | 3++-
4 files changed, 36 insertions(+), 12 deletions(-)

diff --git a/lapi.c b/lapi.c @@ -1,5 +1,5 @@ /* -** $Id: lapi.c,v 1.35 1999/02/08 17:07:59 roberto Exp roberto $ +** $Id: lapi.c,v 1.36 1999/02/12 19:23:02 roberto Exp roberto $ ** Lua API ** See Copyright Notice in lua.h */ @@ -426,10 +426,36 @@ void lua_settag (int tag) } +TaggedString *luaA_nextvar (TaggedString *g) { + if (g == NULL) + g = (TaggedString *)L->rootglobal.next; /* first variable */ + else { + /* check whether name is in global var list */ + luaL_arg_check((GCnode *)g != g->head.next, 1, "variable name expected"); + g = (TaggedString *)g->head.next; /* get next */ + } + while (g && g->u.s.globalval.ttype == LUA_T_NIL) /* skip globals with nil */ + g = (TaggedString *)g->head.next; + return g; +} + + +char *lua_nextvar (char *varname) { + TaggedString *g = (varname == NULL) ? NULL : luaS_new(varname); + g = luaA_nextvar(g); + if (g) { + luaA_pushobject(&g->u.s.globalval); + return g->str; + } + else + return NULL; +} + + /* ** {====================================================== -** To manipulate the implementation global variables +** To manipulate some state information ** ======================================================= */ diff --git a/lapi.h b/lapi.h @@ -1,5 +1,5 @@ /* -** $Id: lapi.h,v 1.1 1997/09/16 19:25:59 roberto Exp roberto $ +** $Id: lapi.h,v 1.2 1998/06/19 16:14:09 roberto Exp roberto $ ** Auxiliary functions from Lua API ** See Copyright Notice in lua.h */ @@ -16,5 +16,6 @@ TObject *luaA_Address (lua_Object o); void luaA_pushobject (TObject *o); void luaA_packresults (void); int luaA_passresults (void); +TaggedString *luaA_nextvar (TaggedString *g); #endif diff --git a/lbuiltin.c b/lbuiltin.c @@ -1,5 +1,5 @@ /* -** $Id: lbuiltin.c,v 1.51 1999/02/12 19:23:02 roberto Exp roberto $ +** $Id: lbuiltin.c,v 1.52 1999/02/22 14:17:24 roberto Exp roberto $ ** Built-in functions ** See Copyright Notice in lua.h */ @@ -517,16 +517,12 @@ static void luaB_nextvar (void) { TObject *o = luaA_Address(luaL_nonnullarg(1)); TaggedString *g; if (ttype(o) == LUA_T_NIL) - g = (TaggedString *)L->rootglobal.next; /* first variable */ + g = NULL; else { luaL_arg_check(ttype(o) == LUA_T_STRING, 1, "variable name expected"); - g = tsvalue(o); /* find given variable name */ - /* check whether name is in global var list */ - luaL_arg_check((GCnode *)g != g->head.next, 1, "variable name expected"); - g = (TaggedString *)g->head.next; /* get next */ + g = tsvalue(o); } - while (g && g->u.s.globalval.ttype == LUA_T_NIL) /* skip globals with nil */ - g = (TaggedString *)g->head.next; + g = luaA_nextvar(g); if (g) { pushtagstring(g); luaA_pushobject(&g->u.s.globalval); diff --git a/lua.h b/lua.h @@ -1,5 +1,5 @@ /* -** $Id: lua.h,v 1.26 1999/01/26 15:31:17 roberto Exp roberto $ +** $Id: lua.h,v 1.27 1999/02/09 15:59:22 roberto Exp roberto $ ** Lua - An Extensible Extension Language ** TeCGraf: Grupo de Tecnologia em Computacao Grafica, PUC-Rio, Brazil ** e-mail: lua@tecgraf.puc-rio.br @@ -89,6 +89,7 @@ lua_Object lua_rawgettable (void); /* In: table, index */ int lua_tag (lua_Object object); +char *lua_nextvar (char *varname); /* Out: value */ int lua_ref (int lock); /* In: value */ lua_Object lua_getref (int ref);