aboutsummaryrefslogtreecommitdiff
path: root/lcode.c
diff options
context:
space:
mode:
Diffstat (limited to 'lcode.c')
-rw-r--r--lcode.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/lcode.c b/lcode.c
index bb15a1cd..1f63a0d0 100644
--- a/lcode.c
+++ b/lcode.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lcode.c,v 1.117 2003/04/03 13:35:34 roberto Exp roberto $ 2** $Id: lcode.c,v 1.119 2003/08/27 20:58:52 roberto Exp $
3** Code generator for Lua 3** Code generator for Lua
4** See Copyright Notice in lua.h 4** See Copyright Notice in lua.h
5*/ 5*/
@@ -207,17 +207,19 @@ static void freeexp (FuncState *fs, expdesc *e) {
207 207
208 208
209static int addk (FuncState *fs, TObject *k, TObject *v) { 209static int addk (FuncState *fs, TObject *k, TObject *v) {
210 const TObject *idx = luaH_get(fs->h, k); 210 TObject *idx = luaH_set(fs->L, fs->h, k);
211 Proto *f = fs->f;
212 int oldsize = f->sizek;
211 if (ttisnumber(idx)) { 213 if (ttisnumber(idx)) {
212 lua_assert(luaO_rawequalObj(&fs->f->k[cast(int, nvalue(idx))], v)); 214 lua_assert(luaO_rawequalObj(&fs->f->k[cast(int, nvalue(idx))], v));
213 return cast(int, nvalue(idx)); 215 return cast(int, nvalue(idx));
214 } 216 }
215 else { /* constant not found; create a new entry */ 217 else { /* constant not found; create a new entry */
216 Proto *f = fs->f; 218 setnvalue(idx, cast(lua_Number, fs->nk));
217 luaM_growvector(fs->L, f->k, fs->nk, f->sizek, TObject, 219 luaM_growvector(fs->L, f->k, fs->nk, f->sizek, TObject,
218 MAXARG_Bx, "constant table overflow"); 220 MAXARG_Bx, "constant table overflow");
219 setobj2n(&f->k[fs->nk], v); 221 while (oldsize < f->sizek) setnilvalue(&f->k[oldsize++]);
220 setnvalue(luaH_set(fs->L, fs->h, k), cast(lua_Number, fs->nk)); 222 setobj(&f->k[fs->nk], v); /* write barrier */
221 return fs->nk++; 223 return fs->nk++;
222 } 224 }
223} 225}