From 067db30d715c999c3a5f6cb2da3cc7e863732603 Mon Sep 17 00:00:00 2001 From: Roberto Ierusalimschy Date: Mon, 7 Jul 1997 13:44:26 -0300 Subject: [PATCH] "next" & "nextvar" check if argument is a result of previous calls --- hash.c | 11 ++++++++--- table.c | 11 +++++------ 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/hash.c b/hash.c index 5ff64c84..64b9b313 100644 --- a/hash.c +++ b/hash.c @@ -3,7 +3,7 @@ ** hash manager for lua */ -char *rcs_hash="$Id: hash.c,v 2.42 1997/05/08 20:43:30 roberto Exp roberto $"; +char *rcs_hash="$Id: hash.c,v 2.43 1997/05/14 18:38:29 roberto Exp roberto $"; #include "luamem.h" @@ -327,6 +327,11 @@ void lua_next (void) t = avalue(luaI_Address(o)); if (lua_isnil(r)) hashnext(t, 0); - else - hashnext(t, present(t, luaI_Address(r))+1); + else { + int i = present(t, luaI_Address(r)); + Node *n = node(t, i); + luaL_arg_check(ttype(ref(n))!=LUA_T_NIL && ttype(val(n))!=LUA_T_NIL, + 2, "key not found"); + hashnext(t, i+1); + } } diff --git a/table.c b/table.c index 1ca0b0ec..47ecd2e2 100644 --- a/table.c +++ b/table.c @@ -3,7 +3,7 @@ ** Module to control static tables */ -char *rcs_table="$Id: table.c,v 2.71 1997/06/09 17:28:14 roberto Exp roberto $"; +char *rcs_table="$Id: table.c,v 2.72 1997/06/17 18:09:31 roberto Exp roberto $"; #include "luamem.h" #include "auxlib.h" @@ -224,11 +224,10 @@ void lua_pack (void) */ void luaI_nextvar (void) { - Word next; - if (lua_isnil(lua_getparam(1))) - next = 0; - else - next = luaI_findsymbolbyname(luaL_check_string(1)) + 1; + Word next = lua_isnil(lua_getparam(1)) ? 0 : + luaI_findsymbolbyname(luaL_check_string(1))+1; + if (next != 0) + luaL_arg_check(s_ttype(next-1)!=LUA_T_NIL, 1, "undefined global name"); while (next < lua_ntable && s_ttype(next) == LUA_T_NIL) next++; if (next < lua_ntable) {