Avoid int16_t widening for pt->uv elements.
This commit is contained in:
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user