aboutsummaryrefslogtreecommitdiff
path: root/lapi.c
diff options
context:
space:
mode:
authorRoberto Ierusalimschy <roberto@inf.puc-rio.br>2000-08-31 11:08:27 -0300
committerRoberto Ierusalimschy <roberto@inf.puc-rio.br>2000-08-31 11:08:27 -0300
commit100bfec39a3de3029a97e645e7fe33877d7bbc2f (patch)
tree01c2c9bb63f71d3fb186b8f5be0b7577978f8a19 /lapi.c
parenta290b84c670bbf0770d76429e7282c555a80058e (diff)
downloadlua-100bfec39a3de3029a97e645e7fe33877d7bbc2f.tar.gz
lua-100bfec39a3de3029a97e645e7fe33877d7bbc2f.tar.bz2
lua-100bfec39a3de3029a97e645e7fe33877d7bbc2f.zip
new implementation for `next'
Diffstat (limited to 'lapi.c')
-rw-r--r--lapi.c35
1 files changed, 16 insertions, 19 deletions
diff --git a/lapi.c b/lapi.c
index e3d4a906..75159082 100644
--- a/lapi.c
+++ b/lapi.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lapi.c,v 1.89 2000/08/29 14:52:27 roberto Exp roberto $ 2** $Id: lapi.c,v 1.90 2000/08/29 20:43:28 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*/
@@ -327,7 +327,7 @@ int lua_ref (lua_State *L, int lock) {
327 327
328 328
329/* 329/*
330** miscelaneous functions 330** miscellaneous functions
331*/ 331*/
332 332
333 333
@@ -359,24 +359,21 @@ void lua_unref (lua_State *L, int ref) {
359} 359}
360 360
361 361
362int luaA_next (lua_State *L, const Hash *t, int i) { 362int lua_next (lua_State *L) {
363 int tsize = t->size; 363 const TObject *t = Index(L, -2);
364 for (; i<tsize; i++) { 364 Node *n;
365 Node *n = node(t, i);
366 if (ttype(val(n)) != TAG_NIL) {
367 luaA_pushobject(L, key(n));
368 luaA_pushobject(L, val(n));
369 return i+1; /* index to be used next time */
370 }
371 }
372 return 0; /* no more elements */
373}
374
375
376int lua_next (lua_State *L, int index, int i) {
377 const TObject *t = Index(L, index);
378 if (ttype(t) != TAG_TABLE) 365 if (ttype(t) != TAG_TABLE)
379 lua_error(L, "Lua API error - object is not a table in `lua_next'"); 366 lua_error(L, "Lua API error - object is not a table in `lua_next'");
380 return luaA_next(L, hvalue(t), i); 367 n = luaH_next(L, hvalue(t), Index(L, -1));
368 if (n) {
369 *(L->top-1) = *key(n);
370 *L->top = *val(n);
371 api_incr_top(L);
372 return 1;
373 }
374 else { /* no more elements */
375 L->top -= 2; /* remove key and table */
376 return 0;
377 }
381} 378}
382 379