aboutsummaryrefslogtreecommitdiff
path: root/lbuiltin.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 /lbuiltin.c
parenta290b84c670bbf0770d76429e7282c555a80058e (diff)
downloadlua-100bfec39a3de3029a97e645e7fe33877d7bbc2f.tar.gz
lua-100bfec39a3de3029a97e645e7fe33877d7bbc2f.tar.bz2
lua-100bfec39a3de3029a97e645e7fe33877d7bbc2f.zip
new implementation for `next'
Diffstat (limited to 'lbuiltin.c')
-rw-r--r--lbuiltin.c31
1 files changed, 13 insertions, 18 deletions
diff --git a/lbuiltin.c b/lbuiltin.c
index b0399941..10dd13af 100644
--- a/lbuiltin.c
+++ b/lbuiltin.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lbuiltin.c,v 1.123 2000/08/29 14:33:31 roberto Exp roberto $ 2** $Id: lbuiltin.c,v 1.124 2000/08/29 14:41:56 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*/
@@ -267,6 +267,18 @@ int luaB_type (lua_State *L) {
267 return 1; 267 return 1;
268} 268}
269 269
270
271int luaB_next (lua_State *L) {
272 luaL_checktype(L, 1, "table");
273 lua_settop(L, 2); /* create a 2nd argument if there isn't one */
274 if (lua_next(L))
275 return 2;
276 else {
277 lua_pushnil(L);
278 return 1;
279 }
280}
281
270/* }====================================================== */ 282/* }====================================================== */
271 283
272 284
@@ -355,23 +367,6 @@ int luaB_call (lua_State *L) {
355} 367}
356 368
357 369
358int luaB_next (lua_State *L) {
359 const Hash *a = gettable(L, 1);
360 int i; /* `luaA_next' gets first element after `i' */
361 if (lua_isnull(L, 2) || lua_isnil(L, 2)) /* no index or nil index? */
362 i = 0; /* get first */
363 else {
364 i = luaH_pos(L, a, luaA_index(L, 2))+1;
365 luaL_arg_check(L, i != 0, 2, "key not found");
366 }
367 if (luaA_next(L, a, i) != 0)
368 return 2; /* `luaA_next' left them on the stack */
369 else {
370 lua_pushnil(L);
371 return 1;
372 }
373}
374
375 370
376int luaB_tostring (lua_State *L) { 371int luaB_tostring (lua_State *L) {
377 char buff[64]; 372 char buff[64];