seqlua

changeset 6:7b05ca6ef925

Allow seqlua_iterinit to modify the value on stack instead of storing an extra element on stack
author jbe
date Wed Aug 20 01:52:35 2014 +0200 (2014-08-20)
parents e29e2d7b73a5
children 2cb22d01fdd0
files README seqlualib.c
line diff
     1.1 --- a/README	Wed Aug 20 01:45:04 2014 +0200
     1.2 +++ b/README	Wed Aug 20 01:52:35 2014 +0200
     1.3 @@ -133,9 +133,9 @@
     1.4  
     1.5      printcsv{"a", "b", "c"}  -- prints: a,b,c
     1.6  
     1.7 -NOTE: ``seqlua_iterinit`` will store one extra element on the stack during
     1.8 -iteration. When ``seqlua_iternext`` returns 0, this extra element is popped
     1.9 -from the stack automatically.
    1.10 +NOTE: If the index passed to ``seqlua_iterinit`` points to a value that has a
    1.11 +``__call`` metamethod, then the value at the stack position will be replaced by
    1.12 +that metamethod.
    1.13  
    1.14  Additionally, ``seqlualib`` includes a function ``seqlua_iterclosure(L, idx)``,
    1.15  which converts a table at a given stack index into a function closure (stored
     2.1 --- a/seqlualib.c	Wed Aug 20 01:45:04 2014 +0200
     2.2 +++ b/seqlualib.c	Wed Aug 20 01:52:35 2014 +0200
     2.3 @@ -11,9 +11,9 @@
     2.4    iter->L = L;
     2.5    if (luaL_getmetafield(L, idx, "__call")) {
     2.6      if (lua_type(L, -1) != LUA_TFUNCTION) luaL_error(L, "__call is not a function");
     2.7 +    lua_replace(L, idx);
     2.8      iter->itertype = SEQLUA_ITERTYPE_FUNC;
     2.9    } else if (lua_type(L, idx) == LUA_TFUNCTION) {
    2.10 -    lua_pushvalue(L, idx);
    2.11      iter->itertype = SEQLUA_ITERTYPE_FUNC;
    2.12    } else {
    2.13      if (luaL_getmetafield(L, idx, "__index")) {
    2.14 @@ -23,7 +23,6 @@
    2.15        luaL_checktype(L, idx, LUA_TTABLE);
    2.16        iter->itertype = SEQLUA_ITERTYPE_RAW;
    2.17      }
    2.18 -    lua_pushvalue(L, idx);
    2.19    }
    2.20    iter->i = 0;
    2.21  }
    2.22 @@ -44,7 +43,7 @@
    2.23      lua_rawgeti(L, -1, i);
    2.24    }
    2.25    if (lua_isnil(L, -1)) {
    2.26 -    lua_pop(L, 2);
    2.27 +    lua_pop(L, 1);
    2.28      return 0;
    2.29    }
    2.30    return 1;

Impressum / About Us