diff options
| -rw-r--r-- | lapi.c | 30 | ||||
| -rw-r--r-- | lapi.h | 3 | ||||
| -rw-r--r-- | lbuiltin.c | 12 | ||||
| -rw-r--r-- | lua.h | 3 |
4 files changed, 36 insertions, 12 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lapi.c,v 1.35 1999/02/08 17:07:59 roberto Exp roberto $ | 2 | ** $Id: lapi.c,v 1.36 1999/02/12 19:23:02 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 | */ |
| @@ -426,10 +426,36 @@ void lua_settag (int tag) | |||
| 426 | } | 426 | } |
| 427 | 427 | ||
| 428 | 428 | ||
| 429 | TaggedString *luaA_nextvar (TaggedString *g) { | ||
| 430 | if (g == NULL) | ||
| 431 | g = (TaggedString *)L->rootglobal.next; /* first variable */ | ||
| 432 | else { | ||
| 433 | /* check whether name is in global var list */ | ||
| 434 | luaL_arg_check((GCnode *)g != g->head.next, 1, "variable name expected"); | ||
| 435 | g = (TaggedString *)g->head.next; /* get next */ | ||
| 436 | } | ||
| 437 | while (g && g->u.s.globalval.ttype == LUA_T_NIL) /* skip globals with nil */ | ||
| 438 | g = (TaggedString *)g->head.next; | ||
| 439 | return g; | ||
| 440 | } | ||
| 441 | |||
| 442 | |||
| 443 | char *lua_nextvar (char *varname) { | ||
| 444 | TaggedString *g = (varname == NULL) ? NULL : luaS_new(varname); | ||
| 445 | g = luaA_nextvar(g); | ||
| 446 | if (g) { | ||
| 447 | luaA_pushobject(&g->u.s.globalval); | ||
| 448 | return g->str; | ||
| 449 | } | ||
| 450 | else | ||
| 451 | return NULL; | ||
| 452 | } | ||
| 453 | |||
| 454 | |||
| 429 | 455 | ||
| 430 | /* | 456 | /* |
| 431 | ** {====================================================== | 457 | ** {====================================================== |
| 432 | ** To manipulate the implementation global variables | 458 | ** To manipulate some state information |
| 433 | ** ======================================================= | 459 | ** ======================================================= |
| 434 | */ | 460 | */ |
| 435 | 461 | ||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lapi.h,v 1.1 1997/09/16 19:25:59 roberto Exp roberto $ | 2 | ** $Id: lapi.h,v 1.2 1998/06/19 16:14:09 roberto Exp roberto $ |
| 3 | ** Auxiliary functions from Lua API | 3 | ** Auxiliary functions from Lua API |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -16,5 +16,6 @@ TObject *luaA_Address (lua_Object o); | |||
| 16 | void luaA_pushobject (TObject *o); | 16 | void luaA_pushobject (TObject *o); |
| 17 | void luaA_packresults (void); | 17 | void luaA_packresults (void); |
| 18 | int luaA_passresults (void); | 18 | int luaA_passresults (void); |
| 19 | TaggedString *luaA_nextvar (TaggedString *g); | ||
| 19 | 20 | ||
| 20 | #endif | 21 | #endif |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lbuiltin.c,v 1.51 1999/02/12 19:23:02 roberto Exp roberto $ | 2 | ** $Id: lbuiltin.c,v 1.52 1999/02/22 14:17:24 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 | */ |
| @@ -517,16 +517,12 @@ static void luaB_nextvar (void) { | |||
| 517 | TObject *o = luaA_Address(luaL_nonnullarg(1)); | 517 | TObject *o = luaA_Address(luaL_nonnullarg(1)); |
| 518 | TaggedString *g; | 518 | TaggedString *g; |
| 519 | if (ttype(o) == LUA_T_NIL) | 519 | if (ttype(o) == LUA_T_NIL) |
| 520 | g = (TaggedString *)L->rootglobal.next; /* first variable */ | 520 | g = NULL; |
| 521 | else { | 521 | else { |
| 522 | luaL_arg_check(ttype(o) == LUA_T_STRING, 1, "variable name expected"); | 522 | luaL_arg_check(ttype(o) == LUA_T_STRING, 1, "variable name expected"); |
| 523 | g = tsvalue(o); /* find given variable name */ | 523 | g = tsvalue(o); |
| 524 | /* check whether name is in global var list */ | ||
| 525 | luaL_arg_check((GCnode *)g != g->head.next, 1, "variable name expected"); | ||
| 526 | g = (TaggedString *)g->head.next; /* get next */ | ||
| 527 | } | 524 | } |
| 528 | while (g && g->u.s.globalval.ttype == LUA_T_NIL) /* skip globals with nil */ | 525 | g = luaA_nextvar(g); |
| 529 | g = (TaggedString *)g->head.next; | ||
| 530 | if (g) { | 526 | if (g) { |
| 531 | pushtagstring(g); | 527 | pushtagstring(g); |
| 532 | luaA_pushobject(&g->u.s.globalval); | 528 | luaA_pushobject(&g->u.s.globalval); |
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: lua.h,v 1.26 1999/01/26 15:31:17 roberto Exp roberto $ | 2 | ** $Id: lua.h,v 1.27 1999/02/09 15:59:22 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: lua@tecgraf.puc-rio.br | 5 | ** e-mail: lua@tecgraf.puc-rio.br |
| @@ -89,6 +89,7 @@ lua_Object lua_rawgettable (void); /* In: table, index */ | |||
| 89 | 89 | ||
| 90 | int lua_tag (lua_Object object); | 90 | int lua_tag (lua_Object object); |
| 91 | 91 | ||
| 92 | char *lua_nextvar (char *varname); /* Out: value */ | ||
| 92 | 93 | ||
| 93 | int lua_ref (int lock); /* In: value */ | 94 | int lua_ref (int lock); /* In: value */ |
| 94 | lua_Object lua_getref (int ref); | 95 | lua_Object lua_getref (int ref); |
