aboutsummaryrefslogtreecommitdiff
path: root/src/lj_buf.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lj_buf.h12
1 files changed, 11 insertions, 1 deletions
diff --git a/src/lj_buf.h b/src/lj_buf.h
index b97d55ef..4ace2685 100644
--- a/src/lj_buf.h
+++ b/src/lj_buf.h
@@ -55,6 +55,7 @@ typedef struct SBufExt {
55#define sbufisext(sb) (sbufflag((sb)) & SBUF_FLAG_EXT) 55#define sbufisext(sb) (sbufflag((sb)) & SBUF_FLAG_EXT)
56#define sbufiscow(sb) (sbufflag((sb)) & SBUF_FLAG_COW) 56#define sbufiscow(sb) (sbufflag((sb)) & SBUF_FLAG_COW)
57#define sbufisborrow(sb) (sbufflag((sb)) & SBUF_FLAG_BORROW) 57#define sbufisborrow(sb) (sbufflag((sb)) & SBUF_FLAG_BORROW)
58#define sbufiscoworborrow(sb) (sbufflag((sb)) & (SBUF_FLAG_COW|SBUF_FLAG_BORROW))
58#define sbufX(sb) \ 59#define sbufX(sb) \
59 (lj_assertG_(G(sbufL(sb)), sbufisext(sb), "not an SBufExt"), (SBufExt *)(sb)) 60 (lj_assertG_(G(sbufL(sb)), sbufisext(sb), "not an SBufExt"), (SBufExt *)(sb))
60#define setsbufflag(sb, flag) (setmrefu((sb)->L, (flag))) 61#define setsbufflag(sb, flag) (setmrefu((sb)->L, (flag)))
@@ -143,15 +144,24 @@ static LJ_AINLINE void lj_bufx_reset(SBufExt *sbx)
143 144
144static LJ_AINLINE void lj_bufx_free(lua_State *L, SBufExt *sbx) 145static LJ_AINLINE void lj_bufx_free(lua_State *L, SBufExt *sbx)
145{ 146{
146 if (!sbufiscow(sbx)) lj_mem_free(G(L), sbx->b, sbufsz(sbx)); 147 if (!sbufiscoworborrow(sbx)) lj_mem_free(G(L), sbx->b, sbufsz(sbx));
147 setsbufXL(sbx, L, SBUF_FLAG_EXT); 148 setsbufXL(sbx, L, SBUF_FLAG_EXT);
148 setgcrefnull(sbx->cowref); 149 setgcrefnull(sbx->cowref);
149 sbx->r = sbx->w = sbx->b = sbx->e = NULL; 150 sbx->r = sbx->w = sbx->b = sbx->e = NULL;
150} 151}
151 152
153#if LJ_HASBUFFER && LJ_HASJIT
154LJ_FUNC void lj_bufx_set(SBufExt *sbx, const char *p, MSize len, GCobj *o);
155#if LJ_HASFFI
156LJ_FUNC MSize LJ_FASTCALL lj_bufx_more(SBufExt *sbx, MSize sz);
157#endif
158#endif
159
152/* Low-level buffer put operations */ 160/* Low-level buffer put operations */
153LJ_FUNC SBuf *lj_buf_putmem(SBuf *sb, const void *q, MSize len); 161LJ_FUNC SBuf *lj_buf_putmem(SBuf *sb, const void *q, MSize len);
162#if LJ_HASJIT || LJ_HASFFI
154LJ_FUNC SBuf * LJ_FASTCALL lj_buf_putchar(SBuf *sb, int c); 163LJ_FUNC SBuf * LJ_FASTCALL lj_buf_putchar(SBuf *sb, int c);
164#endif
155LJ_FUNC SBuf * LJ_FASTCALL lj_buf_putstr(SBuf *sb, GCstr *s); 165LJ_FUNC SBuf * LJ_FASTCALL lj_buf_putstr(SBuf *sb, GCstr *s);
156 166
157static LJ_AINLINE char *lj_buf_wmem(char *p, const void *q, MSize len) 167static LJ_AINLINE char *lj_buf_wmem(char *p, const void *q, MSize len)