From 9910dedae4d0fab1518ff25036e339dee16f48c5 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Mon, 19 Sep 2016 21:17:58 +0200 Subject: [PATCH] Initialize uv->immutable for upvalues of loaded chunks. Thanks to Peter Cawley. --- src/lj_func.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/lj_func.c b/src/lj_func.c index 431a56d7..3f6626b3 100644 --- a/src/lj_func.c +++ b/src/lj_func.c @@ -140,7 +140,9 @@ GCfunc *lj_func_newL_empty(lua_State *L, GCproto *pt, GCtab *env) /* NOBARRIER: The GCfunc is new (marked white). */ for (i = 0; i < nuv; i++) { GCupval *uv = func_emptyuv(L); - uv->dhash = (uint32_t)(uintptr_t)pt ^ ((uint32_t)proto_uv(pt)[i] << 24); + int32_t v = proto_uv(pt)[i]; + uv->immutable = ((v / PROTO_UV_IMMUTABLE) & 1); + uv->dhash = (uint32_t)(uintptr_t)pt ^ (v << 24); setgcref(fn->l.uvptr[i], obj2gco(uv)); } fn->l.nupvalues = (uint8_t)nuv;