mirror of
https://github.com/LuaJIT/LuaJIT.git
synced 2025-02-07 23:24:09 +00:00
Use string buffer for string.dump().
This commit is contained in:
parent
d38d10a3dd
commit
fecde1b222
@ -144,9 +144,9 @@ LJLIB_ASM_(string_upper)
|
|||||||
|
|
||||||
/* ------------------------------------------------------------------------ */
|
/* ------------------------------------------------------------------------ */
|
||||||
|
|
||||||
static int writer_buf(lua_State *L, const void *p, size_t size, void *b)
|
static int writer_buf(lua_State *L, const void *p, size_t size, void *sb)
|
||||||
{
|
{
|
||||||
luaL_addlstring((luaL_Buffer *)b, (const char *)p, size);
|
lj_buf_putmem((SBuf *)sb, p, (MSize)size);
|
||||||
UNUSED(L);
|
UNUSED(L);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -155,12 +155,14 @@ LJLIB_CF(string_dump)
|
|||||||
{
|
{
|
||||||
GCfunc *fn = lj_lib_checkfunc(L, 1);
|
GCfunc *fn = lj_lib_checkfunc(L, 1);
|
||||||
int strip = L->base+1 < L->top && tvistruecond(L->base+1);
|
int strip = L->base+1 < L->top && tvistruecond(L->base+1);
|
||||||
luaL_Buffer b;
|
SBuf *sb = &G(L)->tmpbuf; /* Assumes lj_bcwrite() doesn't use tmpbuf. */
|
||||||
|
setmref(sb->L, L);
|
||||||
|
lj_buf_reset(sb);
|
||||||
L->top = L->base+1;
|
L->top = L->base+1;
|
||||||
luaL_buffinit(L, &b);
|
if (!isluafunc(fn) || lj_bcwrite(L, funcproto(fn), writer_buf, sb, strip))
|
||||||
if (!isluafunc(fn) || lj_bcwrite(L, funcproto(fn), writer_buf, &b, strip))
|
|
||||||
lj_err_caller(L, LJ_ERR_STRDUMP);
|
lj_err_caller(L, LJ_ERR_STRDUMP);
|
||||||
luaL_pushresult(&b);
|
setstrV(L, L->top-1, lj_buf_str(L, sb));
|
||||||
|
lj_gc_check(L);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user