diff options
Diffstat (limited to 'ltable.c')
-rw-r--r-- | ltable.c | 18 |
1 files changed, 8 insertions, 10 deletions
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | ** $Id: ltable.c,v 1.62 2000/12/28 12:55:41 roberto Exp roberto $ | 2 | ** $Id: ltable.c,v 1.63 2001/01/10 18:56:11 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 | */ |
@@ -143,8 +143,7 @@ void luaH_remove (Hash *t, TObject *key) { | |||
143 | return; /* give up; (to avoid overflow) */ | 143 | return; /* give up; (to avoid overflow) */ |
144 | n += t->size; | 144 | n += t->size; |
145 | } | 145 | } |
146 | ttype(key) = LUA_TNUMBER; | 146 | setnvalue(key, n); |
147 | nvalue(key) = n; | ||
148 | LUA_ASSERT(luaH_mainposition(t, key) == mp, "cannot change hash"); | 147 | LUA_ASSERT(luaH_mainposition(t, key) == mp, "cannot change hash"); |
149 | } | 148 | } |
150 | } | 149 | } |
@@ -156,7 +155,8 @@ static void setnodevector (lua_State *L, Hash *t, luint32 size) { | |||
156 | lua_error(L, "table overflow"); | 155 | lua_error(L, "table overflow"); |
157 | t->node = luaM_newvector(L, size, Node); | 156 | t->node = luaM_newvector(L, size, Node); |
158 | for (i=0; i<(int)size; i++) { | 157 | for (i=0; i<(int)size; i++) { |
159 | ttype(&t->node[i].key) = ttype(&t->node[i].val) = LUA_TNIL; | 158 | setnilvalue(&t->node[i].key); |
159 | setnilvalue(&t->node[i].val); | ||
160 | t->node[i].next = NULL; | 160 | t->node[i].next = NULL; |
161 | } | 161 | } |
162 | t->size = size; | 162 | t->size = size; |
@@ -212,7 +212,7 @@ static void rehash (lua_State *L, Hash *t) { | |||
212 | for (i=0; i<oldsize; i++) { | 212 | for (i=0; i<oldsize; i++) { |
213 | Node *old = nold+i; | 213 | Node *old = nold+i; |
214 | if (ttype(&old->val) != LUA_TNIL) | 214 | if (ttype(&old->val) != LUA_TNIL) |
215 | *luaH_set(L, t, &old->key) = old->val; | 215 | setobj(luaH_set(L, t, &old->key), &old->val); |
216 | } | 216 | } |
217 | luaM_freearray(L, nold, oldsize, Node); /* free old array */ | 217 | luaM_freearray(L, nold, oldsize, Node); /* free old array */ |
218 | } | 218 | } |
@@ -243,7 +243,7 @@ static TObject *newkey (lua_State *L, Hash *t, Node *mp, const TObject *key) { | |||
243 | mp = n; | 243 | mp = n; |
244 | } | 244 | } |
245 | } | 245 | } |
246 | mp->key = *key; | 246 | setobj(&mp->key, key); |
247 | for (;;) { /* correct `firstfree' */ | 247 | for (;;) { /* correct `firstfree' */ |
248 | if (ttype(&t->firstfree->key) == LUA_TNIL) | 248 | if (ttype(&t->firstfree->key) == LUA_TNIL) |
249 | return &mp->val; /* OK; table still has a free place */ | 249 | return &mp->val; /* OK; table still has a free place */ |
@@ -279,8 +279,7 @@ TObject *luaH_setnum (lua_State *L, Hash *t, lua_Number key) { | |||
279 | else n = n->next; | 279 | else n = n->next; |
280 | } while (n); | 280 | } while (n); |
281 | /* `key' not found; must insert it */ | 281 | /* `key' not found; must insert it */ |
282 | ttype(&kobj) = LUA_TNUMBER; | 282 | setnvalue(&kobj, key); |
283 | nvalue(&kobj) = key; | ||
284 | return newkey(L, t, mp, &kobj); | 283 | return newkey(L, t, mp, &kobj); |
285 | } | 284 | } |
286 | 285 | ||
@@ -295,8 +294,7 @@ TObject *luaH_setstr (lua_State *L, Hash *t, TString *key) { | |||
295 | else n = n->next; | 294 | else n = n->next; |
296 | } while (n); | 295 | } while (n); |
297 | /* `key' not found; must insert it */ | 296 | /* `key' not found; must insert it */ |
298 | ttype(&kobj) = LUA_TSTRING; | 297 | setsvalue(&kobj, key); |
299 | tsvalue(&kobj) = key; | ||
300 | return newkey(L, t, mp, &kobj); | 298 | return newkey(L, t, mp, &kobj); |
301 | } | 299 | } |
302 | 300 | ||