aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2016-09-19 21:17:58 +0200
committerMike Pall <mike>2016-09-19 21:17:58 +0200
commit9910dedae4d0fab1518ff25036e339dee16f48c5 (patch)
tree5a1fe21a5cb0f2400ed4678013c96eea2c721461 /src
parent02b9b5597679658bbd8716cdeaaa33f04b1f6a3c (diff)
downloadluajit-9910dedae4d0fab1518ff25036e339dee16f48c5.tar.gz
luajit-9910dedae4d0fab1518ff25036e339dee16f48c5.tar.bz2
luajit-9910dedae4d0fab1518ff25036e339dee16f48c5.zip
Initialize uv->immutable for upvalues of loaded chunks.
Thanks to Peter Cawley.
Diffstat (limited to 'src')
-rw-r--r--src/lj_func.c4
1 files changed, 3 insertions, 1 deletions
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)
140 /* NOBARRIER: The GCfunc is new (marked white). */ 140 /* NOBARRIER: The GCfunc is new (marked white). */
141 for (i = 0; i < nuv; i++) { 141 for (i = 0; i < nuv; i++) {
142 GCupval *uv = func_emptyuv(L); 142 GCupval *uv = func_emptyuv(L);
143 uv->dhash = (uint32_t)(uintptr_t)pt ^ ((uint32_t)proto_uv(pt)[i] << 24); 143 int32_t v = proto_uv(pt)[i];
144 uv->immutable = ((v / PROTO_UV_IMMUTABLE) & 1);
145 uv->dhash = (uint32_t)(uintptr_t)pt ^ (v << 24);
144 setgcref(fn->l.uvptr[i], obj2gco(uv)); 146 setgcref(fn->l.uvptr[i], obj2gco(uv));
145 } 147 }
146 fn->l.nupvalues = (uint8_t)nuv; 148 fn->l.nupvalues = (uint8_t)nuv;