diff options
author | Mike Pall <mike> | 2016-09-19 21:17:58 +0200 |
---|---|---|
committer | Mike Pall <mike> | 2016-09-19 21:17:58 +0200 |
commit | 9910dedae4d0fab1518ff25036e339dee16f48c5 (patch) | |
tree | 5a1fe21a5cb0f2400ed4678013c96eea2c721461 /src | |
parent | 02b9b5597679658bbd8716cdeaaa33f04b1f6a3c (diff) | |
download | luajit-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.c | 4 |
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; |