diff options
-rw-r--r-- | src/lib_string.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/src/lib_string.c b/src/lib_string.c index 69b29356..ada0bf6d 100644 --- a/src/lib_string.c +++ b/src/lib_string.c | |||
@@ -144,9 +144,9 @@ LJLIB_ASM_(string_upper) | |||
144 | 144 | ||
145 | /* ------------------------------------------------------------------------ */ | 145 | /* ------------------------------------------------------------------------ */ |
146 | 146 | ||
147 | static int writer_buf(lua_State *L, const void *p, size_t size, void *b) | 147 | static int writer_buf(lua_State *L, const void *p, size_t size, void *sb) |
148 | { | 148 | { |
149 | luaL_addlstring((luaL_Buffer *)b, (const char *)p, size); | 149 | lj_buf_putmem((SBuf *)sb, p, (MSize)size); |
150 | UNUSED(L); | 150 | UNUSED(L); |
151 | return 0; | 151 | return 0; |
152 | } | 152 | } |
@@ -155,12 +155,14 @@ LJLIB_CF(string_dump) | |||
155 | { | 155 | { |
156 | GCfunc *fn = lj_lib_checkfunc(L, 1); | 156 | GCfunc *fn = lj_lib_checkfunc(L, 1); |
157 | int strip = L->base+1 < L->top && tvistruecond(L->base+1); | 157 | int strip = L->base+1 < L->top && tvistruecond(L->base+1); |
158 | luaL_Buffer b; | 158 | SBuf *sb = &G(L)->tmpbuf; /* Assumes lj_bcwrite() doesn't use tmpbuf. */ |
159 | setmref(sb->L, L); | ||
160 | lj_buf_reset(sb); | ||
159 | L->top = L->base+1; | 161 | L->top = L->base+1; |
160 | luaL_buffinit(L, &b); | 162 | if (!isluafunc(fn) || lj_bcwrite(L, funcproto(fn), writer_buf, sb, strip)) |
161 | if (!isluafunc(fn) || lj_bcwrite(L, funcproto(fn), writer_buf, &b, strip)) | ||
162 | lj_err_caller(L, LJ_ERR_STRDUMP); | 163 | lj_err_caller(L, LJ_ERR_STRDUMP); |
163 | luaL_pushresult(&b); | 164 | setstrV(L, L->top-1, lj_buf_str(L, sb)); |
165 | lj_gc_check(L); | ||
164 | return 1; | 166 | return 1; |
165 | } | 167 | } |
166 | 168 | ||