aboutsummaryrefslogtreecommitdiff
path: root/src/lib_base.c
diff options
context:
space:
mode:
authorMike Pall <mike>2010-06-16 19:43:07 +0200
committerMike Pall <mike>2010-06-16 19:43:07 +0200
commitcdc37a33b3b86f436359a6109a19773a31bafe4f (patch)
treed5f4824938ac076d0a1012d882625b81af6800da /src/lib_base.c
parentfa673eb179ed21b0f7a4951d3f498541c1d39622 (diff)
downloadluajit-cdc37a33b3b86f436359a6109a19773a31bafe4f.tar.gz
luajit-cdc37a33b3b86f436359a6109a19773a31bafe4f.tar.bz2
luajit-cdc37a33b3b86f436359a6109a19773a31bafe4f.zip
Fallback to metamethod resolving for tostring in print().
Diffstat (limited to 'src/lib_base.c')
-rw-r--r--src/lib_base.c11
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;