| 160 | |
| 161 | |
| 162 | int luaH_next (lua_State *L, Table *t, StkId key) { |
| 163 | int i = findindex(L, t, key); /* find original element */ |
| 164 | for (i++; i < t->sizearray; i++) { /* try first array part */ |
| 165 | if (!ttisnil(&t->array[i])) { /* a non-nil value? */ |
| 166 | setnvalue(key, cast_num(i+1)); |
| 167 | setobj2s(L, key+1, &t->array[i]); |
| 168 | return 1; |
| 169 | } |
| 170 | } |
| 171 | for (i -= t->sizearray; i < sizenode(t); i++) { /* then hash part */ |
| 172 | if (!ttisnil(gval(gnode(t, i)))) { /* a non-nil value? */ |
| 173 | setobj2s(L, key, key2tval(gnode(t, i))); |
| 174 | setobj2s(L, key+1, gval(gnode(t, i))); |
| 175 | return 1; |
| 176 | } |
| 177 | } |
| 178 | return 0; /* no more elements */ |
| 179 | } |
| 180 | |
| 181 | |
| 182 | /* |