aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2015-03-05 12:21:39 +0100
committerMike Pall <mike>2015-03-05 12:21:39 +0100
commitc821e0aded3973b0c43cddf55709cd3ad42a95d1 (patch)
tree286604e059870a81ec87a514d7ad232cf60bf82c /src
parent2c0748f6914d901e402cf87fd53e998aaaef1d6f (diff)
parent8b6af89ba76ce9a245f37765a645691bdd195039 (diff)
downloadluajit-c821e0aded3973b0c43cddf55709cd3ad42a95d1.tar.gz
luajit-c821e0aded3973b0c43cddf55709cd3ad42a95d1.tar.bz2
luajit-c821e0aded3973b0c43cddf55709cd3ad42a95d1.zip
Merge branch 'master' into v2.1
Diffstat (limited to 'src')
-rw-r--r--src/lj_err.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/src/lj_err.c b/src/lj_err.c
index e67356e9..4f134941 100644
--- a/src/lj_err.c
+++ b/src/lj_err.c
@@ -720,9 +720,23 @@ LJ_NOINLINE void lj_err_arg(lua_State *L, int narg, ErrMsg em)
720/* Typecheck error for arguments. */ 720/* Typecheck error for arguments. */
721LJ_NOINLINE void lj_err_argtype(lua_State *L, int narg, const char *xname) 721LJ_NOINLINE void lj_err_argtype(lua_State *L, int narg, const char *xname)
722{ 722{
723 TValue *o = narg < 0 ? L->top + narg : L->base + narg-1; 723 const char *tname, *msg;
724 const char *tname = o < L->top ? lj_typename(o) : lj_obj_typename[0]; 724 if (narg <= LUA_REGISTRYINDEX) {
725 const char *msg = lj_strfmt_pushf(L, err2msg(LJ_ERR_BADTYPE), xname, tname); 725 if (narg >= LUA_GLOBALSINDEX) {
726 tname = lj_obj_itypename[~LJ_TTAB];
727 } else {
728 GCfunc *fn = curr_func(L);
729 int idx = LUA_GLOBALSINDEX - narg;
730 if (idx <= fn->c.nupvalues)
731 tname = lj_typename(&fn->c.upvalue[idx-1]);
732 else
733 tname = lj_obj_typename[0];
734 }
735 } else {
736 TValue *o = narg < 0 ? L->top + narg : L->base + narg-1;
737 tname = o < L->top ? lj_typename(o) : lj_obj_typename[0];
738 }
739 msg = lj_strfmt_pushf(L, err2msg(LJ_ERR_BADTYPE), xname, tname);
726 err_argmsg(L, narg, msg); 740 err_argmsg(L, narg, msg);
727} 741}
728 742