static int call_init(lua_State *L, GCfunc *fn)
{
if (isluafunc(fn)) {
- int numparams = funcproto(fn)->numparams;
+ GCproto *pt = funcproto(fn);
+ int numparams = pt->numparams;
int gotparams = (int)(L->top - L->base);
- lj_state_checkstack(L, (MSize)numparams);
+ int need = pt->framesize;
+ if ((pt->flags & PROTO_IS_VARARG)) need += 1+gotparams;
+ lj_state_checkstack(L, (MSize)need);
numparams -= gotparams;
return numparams >= 0 ? numparams : 0;
} else {