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); |