diff options
Diffstat (limited to 'ltable.c')
| -rw-r--r-- | ltable.c | 10 |
1 files changed, 6 insertions, 4 deletions
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | ** $Id: ltable.c,v 1.49 2000/06/28 17:03:56 roberto Exp roberto $ | 2 | ** $Id: ltable.c,v 1.50 2000/06/30 14:35:17 roberto Exp roberto $ |
| 3 | ** Lua tables (hash) | 3 | ** Lua tables (hash) |
| 4 | ** See Copyright Notice in lua.h | 4 | ** See Copyright Notice in lua.h |
| 5 | */ | 5 | */ |
| @@ -154,19 +154,22 @@ static void setnodevector (lua_State *L, Hash *t, lint32 size) { | |||
| 154 | ttype(&t->node[i].key) = ttype(&t->node[i].val) = TAG_NIL; | 154 | ttype(&t->node[i].key) = ttype(&t->node[i].val) = TAG_NIL; |
| 155 | t->node[i].next = NULL; | 155 | t->node[i].next = NULL; |
| 156 | } | 156 | } |
| 157 | L->nblocks += gcsize(L, size) - gcsize(L, t->size); | ||
| 157 | t->size = size; | 158 | t->size = size; |
| 158 | t->firstfree = &t->node[size-1]; /* first free position to be used */ | 159 | t->firstfree = &t->node[size-1]; /* first free position to be used */ |
| 159 | L->nblocks += gcsize(L, size); | ||
| 160 | } | 160 | } |
| 161 | 161 | ||
| 162 | 162 | ||
| 163 | Hash *luaH_new (lua_State *L, int size) { | 163 | Hash *luaH_new (lua_State *L, int size) { |
| 164 | Hash *t = luaM_new(L, Hash); | 164 | Hash *t = luaM_new(L, Hash); |
| 165 | setnodevector(L, t, luaO_power2(size)); | ||
| 166 | t->htag = TagDefault; | 165 | t->htag = TagDefault; |
| 167 | t->next = L->roottable; | 166 | t->next = L->roottable; |
| 168 | L->roottable = t; | 167 | L->roottable = t; |
| 169 | t->marked = 0; | 168 | t->marked = 0; |
| 169 | t->size = 0; | ||
| 170 | L->nblocks += gcsize(L, 0); | ||
| 171 | t->node = NULL; | ||
| 172 | setnodevector(L, t, luaO_power2(size)); | ||
| 170 | return t; | 173 | return t; |
| 171 | } | 174 | } |
| 172 | 175 | ||
| @@ -204,7 +207,6 @@ static void rehash (lua_State *L, Hash *t) { | |||
| 204 | setnodevector(L, t, oldsize/2); | 207 | setnodevector(L, t, oldsize/2); |
| 205 | else | 208 | else |
| 206 | setnodevector(L, t, oldsize); | 209 | setnodevector(L, t, oldsize); |
| 207 | L->nblocks -= gcsize(L, oldsize); | ||
| 208 | for (i=0; i<oldsize; i++) { | 210 | for (i=0; i<oldsize; i++) { |
| 209 | Node *old = nold+i; | 211 | Node *old = nold+i; |
| 210 | if (ttype(&old->val) != TAG_NIL) | 212 | if (ttype(&old->val) != TAG_NIL) |
