Merge branch 'master' into v2.1

This commit is contained in:
Mike Pall 2015-03-05 12:21:39 +01:00
commit c821e0aded

View File

@ -720,9 +720,23 @@ LJ_NOINLINE void lj_err_arg(lua_State *L, int narg, ErrMsg em)
/* Typecheck error for arguments. */ /* Typecheck error for arguments. */
LJ_NOINLINE void lj_err_argtype(lua_State *L, int narg, const char *xname) LJ_NOINLINE void lj_err_argtype(lua_State *L, int narg, const char *xname)
{ {
TValue *o = narg < 0 ? L->top + narg : L->base + narg-1; const char *tname, *msg;
const char *tname = o < L->top ? lj_typename(o) : lj_obj_typename[0]; if (narg <= LUA_REGISTRYINDEX) {
const char *msg = lj_strfmt_pushf(L, err2msg(LJ_ERR_BADTYPE), xname, tname); if (narg >= LUA_GLOBALSINDEX) {
tname = lj_obj_itypename[~LJ_TTAB];
} else {
GCfunc *fn = curr_func(L);
int idx = LUA_GLOBALSINDEX - narg;
if (idx <= fn->c.nupvalues)
tname = lj_typename(&fn->c.upvalue[idx-1]);
else
tname = lj_obj_typename[0];
}
} else {
TValue *o = narg < 0 ? L->top + narg : L->base + narg-1;
tname = o < L->top ? lj_typename(o) : lj_obj_typename[0];
}
msg = lj_strfmt_pushf(L, err2msg(LJ_ERR_BADTYPE), xname, tname);
err_argmsg(L, narg, msg); err_argmsg(L, narg, msg);
} }