diff options
author | Mike Pall <mike> | 2013-03-20 16:56:09 +0100 |
---|---|---|
committer | Mike Pall <mike> | 2013-03-20 16:56:09 +0100 |
commit | fecde1b22254339dc76376e95ccc9f05de1efb39 (patch) | |
tree | 33e1e4ed0f492687c77a89faee4071fe5bb1e11e | |
parent | d38d10a3dd1d01941b320d6c0715dc871abba35a (diff) | |
download | luajit-fecde1b22254339dc76376e95ccc9f05de1efb39.tar.gz luajit-fecde1b22254339dc76376e95ccc9f05de1efb39.tar.bz2 luajit-fecde1b22254339dc76376e95ccc9f05de1efb39.zip |
Use string buffer for string.dump().
Diffstat (limited to '')
-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 | ||