aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib_string.c14
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
147static int writer_buf(lua_State *L, const void *p, size_t size, void *b) 147static 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