diff --git a/3rd/lua/lapi.c b/3rd/lua/lapi.c index e2415d62..7500bc79 100644 --- a/3rd/lua/lapi.c +++ b/3rd/lua/lapi.c @@ -1018,13 +1018,8 @@ LUA_API int lua_load (lua_State *L, lua_Reader reader, void *data, LUA_API void lua_clonefunction (lua_State *L, const void * fp) { LClosure *cl; LClosure *f = cast(LClosure *, fp); + api_check(L, isshared(gcvalue(f->p)), "Not a shared proto"); lua_lock(L); - if (f->p->l_G == G(L)) { - setclLvalue(L,L->top,f); - api_incr_top(L); - lua_unlock(L); - return; - } cl = luaF_newLclosure(L,f->nupvalues); setclLvalue(L,L->top,cl); api_incr_top(L); diff --git a/3rd/lua/lfunc.c b/3rd/lua/lfunc.c index 0141f98a..2cc9a6ce 100644 --- a/3rd/lua/lfunc.c +++ b/3rd/lua/lfunc.c @@ -117,7 +117,6 @@ Proto *luaF_newproto (lua_State *L) { f->linedefined = 0; f->lastlinedefined = 0; f->source = NULL; - f->l_G = G(L); return f; } diff --git a/3rd/lua/lgc.c b/3rd/lua/lgc.c index a3cd6654..757dbd53 100644 --- a/3rd/lua/lgc.c +++ b/3rd/lua/lgc.c @@ -496,8 +496,6 @@ static lu_mem traversetable (global_State *g, Table *h) { */ static int traverseproto (global_State *g, Proto *f) { int i; - if (g != f->l_G) - return 0; markobjectN(g, f->source); for (i = 0; i < f->sizek; i++) /* mark literals */ markvalue(g, &f->k[i]); diff --git a/3rd/lua/lobject.h b/3rd/lua/lobject.h index c99e0f63..71f55b26 100644 --- a/3rd/lua/lobject.h +++ b/3rd/lua/lobject.h @@ -425,7 +425,6 @@ typedef struct Proto { Upvaldesc *upvalues; /* upvalue information */ TString *source; /* used for debug information */ GCObject *gclist; - void *l_G; /* global state belongs to */ } Proto;