Avoid int16_t widening for pt->uv elements.

This commit is contained in:
Mike Pall
2010-01-09 22:41:08 +01:00
parent a33204ae5e
commit 2cc554db0c
4 changed files with 13 additions and 8 deletions

View File

@@ -51,7 +51,7 @@ void LJ_FASTCALL lj_func_freeproto(global_State *g, GCproto *pt)
pt->sizekn*(MSize)sizeof(lua_Number);
lj_mem_free(g, pt->k.gc - nkgc, sizek);
lj_mem_freevec(g, pt->bc, pt->sizebc, BCIns);
lj_mem_freevec(g, pt->uv, pt->sizeuv, int16_t);
lj_mem_freevec(g, pt->uv, pt->sizeuv, uint16_t);
lj_mem_freevec(g, pt->lineinfo, pt->sizelineinfo, int32_t);
lj_mem_freevec(g, pt->varinfo, pt->sizevarinfo, struct VarInfo);
lj_mem_freevec(g, pt->uvname, pt->sizeuvname, GCstr *);
@@ -170,7 +170,12 @@ GCfunc *lj_func_newL_gc(lua_State *L, GCproto *pt, GCfuncL *parent)
base = L->base;
for (i = 0; i < nuv; i++) {
ptrdiff_t v = pt->uv[i];
GCupval *uv = v < 0 ? &gcref(puv[~v])->uv : func_finduv(L, base + v);
GCupval *uv;
if ((v & 0x8000)) {
uv = func_finduv(L, base + (v & 0xff));
} else {
uv = &gcref(puv[v])->uv;
}
setgcref(fn->l.uvptr[i], obj2gco(uv));
}
return fn;