diff options
author | Mike Pall <mike> | 2015-03-05 12:21:39 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2015-03-05 12:21:39 +0100 |
commit | c821e0aded3973b0c43cddf55709cd3ad42a95d1 (patch) | |
tree | 286604e059870a81ec87a514d7ad232cf60bf82c /src | |
parent | 2c0748f6914d901e402cf87fd53e998aaaef1d6f (diff) | |
parent | 8b6af89ba76ce9a245f37765a645691bdd195039 (diff) | |
download | luajit-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.c | 20 |
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. */ |
721 | LJ_NOINLINE void lj_err_argtype(lua_State *L, int narg, const char *xname) | 721 | LJ_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 | ||