diff options
| author | Mike Pall <mike> | 2010-06-16 19:43:07 +0200 |
|---|---|---|
| committer | Mike Pall <mike> | 2010-06-16 19:43:07 +0200 |
| commit | cdc37a33b3b86f436359a6109a19773a31bafe4f (patch) | |
| tree | d5f4824938ac076d0a1012d882625b81af6800da /src | |
| parent | fa673eb179ed21b0f7a4951d3f498541c1d39622 (diff) | |
| download | luajit-cdc37a33b3b86f436359a6109a19773a31bafe4f.tar.gz luajit-cdc37a33b3b86f436359a6109a19773a31bafe4f.tar.bz2 luajit-cdc37a33b3b86f436359a6109a19773a31bafe4f.zip | |
Fallback to metamethod resolving for tostring in print().
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib_base.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/src/lib_base.c b/src/lib_base.c index 1f677b50..c8ac5f86 100644 --- a/src/lib_base.c +++ b/src/lib_base.c | |||
| @@ -402,8 +402,15 @@ LJLIB_CF(print) | |||
| 402 | { | 402 | { |
| 403 | ptrdiff_t i, nargs = L->top - L->base; | 403 | ptrdiff_t i, nargs = L->top - L->base; |
| 404 | cTValue *tv = lj_tab_getstr(tabref(L->env), strV(lj_lib_upvalue(L, 1))); | 404 | cTValue *tv = lj_tab_getstr(tabref(L->env), strV(lj_lib_upvalue(L, 1))); |
| 405 | int shortcut = (tv && tvisfunc(tv) && funcV(tv)->c.ffid == FF_tostring); | 405 | int shortcut; |
| 406 | copyTV(L, L->top++, tv ? tv : niltv(L)); | 406 | if (tv && !tvisnil(tv)) { |
| 407 | copyTV(L, L->top++, tv); | ||
| 408 | } else { | ||
| 409 | setstrV(L, L->top++, strV(lj_lib_upvalue(L, 1))); | ||
| 410 | lua_gettable(L, LUA_GLOBALSINDEX); | ||
| 411 | tv = L->top-1; | ||
| 412 | } | ||
| 413 | shortcut = (tvisfunc(tv) && funcV(tv)->c.ffid == FF_tostring); | ||
| 407 | for (i = 0; i < nargs; i++) { | 414 | for (i = 0; i < nargs; i++) { |
| 408 | const char *str; | 415 | const char *str; |
| 409 | size_t size; | 416 | size_t size; |
