seqlua

diff seqlualib.c @ 32:3ff7cec8d3ce

Do not respect __len metamethods
author jbe
date Sun Aug 24 00:00:43 2014 +0200 (2014-08-24)
parents 4fc9090ada1d
children 332216604f83
line diff
     1.1 --- a/seqlualib.c	Sat Aug 23 23:35:10 2014 +0200
     1.2 +++ b/seqlualib.c	Sun Aug 24 00:00:43 2014 +0200
     1.3 @@ -15,12 +15,8 @@
     1.4    } else {
     1.5      if (lua_type(L, idx) == LUA_TFUNCTION) {
     1.6        iter->itertype = SEQLUA_ITERTYPE_CALL;
     1.7 -    } else if (
     1.8 -      luaL_getmetafield(L, idx, "__index") ||
     1.9 -      luaL_getmetafield(L, idx, "__len")
    1.10 -    ) {
    1.11 +    } else if (luaL_getmetafield(L, idx, "__index")) {
    1.12        lua_pop(L, 1);
    1.13 -      iter->len = luaL_len(L, idx);
    1.14        iter->itertype = SEQLUA_ITERTYPE_INDEX;
    1.15      } else {
    1.16        luaL_checktype(L, idx, LUA_TTABLE);
    1.17 @@ -56,13 +52,9 @@
    1.18      lua_call(L, 0, 1);
    1.19      break;
    1.20    case SEQLUA_ITERTYPE_INDEX:
    1.21 -    if (i > iter->len) {
    1.22 -      lua_pop(L, 3);
    1.23 -      return 0;
    1.24 -    }
    1.25      lua_pushinteger(L, i);
    1.26      lua_gettable(L, iter->idx);
    1.27 -    return 1;
    1.28 +    break;
    1.29    case SEQLUA_ITERTYPE_RAW:
    1.30      lua_rawgeti(L, iter->idx, i);
    1.31      break;

Impressum / About Us