aboutsummaryrefslogtreecommitdiff
path: root/lcode.c
diff options
context:
space:
mode:
Diffstat (limited to 'lcode.c')
-rw-r--r--lcode.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/lcode.c b/lcode.c
index af96d4f8..63f48292 100644
--- a/lcode.c
+++ b/lcode.c
@@ -1,5 +1,5 @@
1/* 1/*
2** $Id: lcode.c,v 1.120 2003/11/19 19:59:18 roberto Exp roberto $ 2** $Id: lcode.c,v 1.121 2003/12/09 16:56:11 roberto Exp roberto $
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,8 +207,9 @@ static void freeexp (FuncState *fs, expdesc *e) {
207} 207}
208 208
209 209
210static int addk (FuncState *fs, TObject *k, TObject *v) { 210static int addk (FuncState *fs, TValue *k, TValue *v) {
211 TObject *idx = luaH_set(fs->L, fs->h, k); 211 lua_State *L = fs->L;
212 TValue *idx = luaH_set(L, fs->h, k);
212 Proto *f = fs->f; 213 Proto *f = fs->f;
213 int oldsize = f->sizek; 214 int oldsize = f->sizek;
214 if (ttisnumber(idx)) { 215 if (ttisnumber(idx)) {
@@ -217,34 +218,35 @@ static int addk (FuncState *fs, TObject *k, TObject *v) {
217 } 218 }
218 else { /* constant not found; create a new entry */ 219 else { /* constant not found; create a new entry */
219 setnvalue(idx, cast(lua_Number, fs->nk)); 220 setnvalue(idx, cast(lua_Number, fs->nk));
220 luaM_growvector(fs->L, f->k, fs->nk, f->sizek, TObject, 221 luaM_growvector(L, f->k, fs->nk, f->sizek, TValue,
221 MAXARG_Bx, "constant table overflow"); 222 MAXARG_Bx, "constant table overflow");
222 while (oldsize < f->sizek) setnilvalue(&f->k[oldsize++]); 223 while (oldsize < f->sizek) setnilvalue(&f->k[oldsize++]);
223 setobj(&f->k[fs->nk], v); 224 setobj(L, &f->k[fs->nk], v);
224 luaC_barrier(fs->L, f, v); 225 luaC_barrier(L, f, v);
225 return fs->nk++; 226 return fs->nk++;
226 } 227 }
227} 228}
228 229
229 230
230int luaK_stringK (FuncState *fs, TString *s) { 231int luaK_stringK (FuncState *fs, TString *s) {
231 TObject o; 232 TValue o;
232 setsvalue(&o, s); 233 setsvalue(fs->L, &o, s);
233 return addk(fs, &o, &o); 234 return addk(fs, &o, &o);
234} 235}
235 236
236 237
237int luaK_numberK (FuncState *fs, lua_Number r) { 238int luaK_numberK (FuncState *fs, lua_Number r) {
238 TObject o; 239 TValue o;
239 setnvalue(&o, r); 240 setnvalue(&o, r);
240 return addk(fs, &o, &o); 241 return addk(fs, &o, &o);
241} 242}
242 243
243 244
244static int nil_constant (FuncState *fs) { 245static int nil_constant (FuncState *fs) {
245 TObject k, v; 246 TValue k, v;
246 setnilvalue(&v); 247 setnilvalue(&v);
247 sethvalue(&k, fs->h); /* cannot use nil as key; instead use table itself */ 248 /* cannot use nil as key; instead use table itself to represent nil */
249 sethvalue(fs->L, &k, fs->h);
248 return addk(fs, &k, &v); 250 return addk(fs, &k, &v);
249} 251}
250 252