diff --git a/src/lib_base.c b/src/lib_base.c index 44817187..1665faee 100644 --- a/src/lib_base.c +++ b/src/lib_base.c @@ -619,9 +619,10 @@ static void setpc_wrap_aux(lua_State *L, GCfunc *fn); LJLIB_CF(coroutine_wrap) { + GCfunc *fn; lj_cf_coroutine_create(L); - lj_lib_pushcc(L, lj_ffh_coroutine_wrap_aux, FF_coroutine_wrap_aux, 1); - setpc_wrap_aux(L, funcV(L->top-1)); + fn = lj_lib_pushcc(L, lj_ffh_coroutine_wrap_aux, FF_coroutine_wrap_aux, 1); + setpc_wrap_aux(L, fn); return 1; } diff --git a/src/lj_lib.h b/src/lj_lib.h index 2dd45adb..463bfb60 100644 --- a/src/lj_lib.h +++ b/src/lj_lib.h @@ -60,14 +60,15 @@ LJ_FUNC int lj_lib_checkopt(lua_State *L, int narg, int def, const char *lst); #endif /* Push internal function on the stack. */ -static LJ_AINLINE void lj_lib_pushcc(lua_State *L, lua_CFunction f, - int id, int n) +static LJ_AINLINE GCfunc *lj_lib_pushcc(lua_State *L, lua_CFunction f, + int id, int n) { GCfunc *fn; lua_pushcclosure(L, f, n); fn = funcV(L->top-1); fn->c.ffid = (uint8_t)id; setmref(fn->c.pc, &G(L)->bc_cfunc_int); + return fn; } #define lj_lib_pushcf(L, fn, id) (lj_lib_pushcc(L, (fn), (id), 0))