aboutsummaryrefslogtreecommitdiff
path: root/src/lj_buf.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lj_buf.c36
1 files changed, 34 insertions, 2 deletions
diff --git a/src/lj_buf.c b/src/lj_buf.c
index 889ccbca..d31bd99e 100644
--- a/src/lj_buf.c
+++ b/src/lj_buf.c
@@ -108,6 +108,25 @@ char * LJ_FASTCALL lj_buf_tmp(lua_State *L, MSize sz)
108 return lj_buf_need(sb, sz); 108 return lj_buf_need(sb, sz);
109} 109}
110 110
111#if LJ_HASBUFFER && LJ_HASJIT
112void lj_bufx_set(SBufExt *sbx, const char *p, MSize len, GCobj *ref)
113{
114 lua_State *L = sbufL(sbx);
115 lj_bufx_free(L, sbx);
116 lj_bufx_set_cow(L, sbx, p, len);
117 setgcref(sbx->cowref, ref);
118 lj_gc_objbarrier(L, (GCudata *)sbx - 1, ref);
119}
120
121#if LJ_HASFFI
122MSize LJ_FASTCALL lj_bufx_more(SBufExt *sbx, MSize sz)
123{
124 lj_buf_more((SBuf *)sbx, sz);
125 return sbufleft(sbx);
126}
127#endif
128#endif
129
111/* -- Low-level buffer put operations ------------------------------------- */ 130/* -- Low-level buffer put operations ------------------------------------- */
112 131
113SBuf *lj_buf_putmem(SBuf *sb, const void *q, MSize len) 132SBuf *lj_buf_putmem(SBuf *sb, const void *q, MSize len)
@@ -118,14 +137,27 @@ SBuf *lj_buf_putmem(SBuf *sb, const void *q, MSize len)
118 return sb; 137 return sb;
119} 138}
120 139
121SBuf * LJ_FASTCALL lj_buf_putchar(SBuf *sb, int c) 140#if LJ_HASJIT || LJ_HASFFI
141static LJ_NOINLINE SBuf * LJ_FASTCALL lj_buf_putchar2(SBuf *sb, int c)
122{ 142{
123 char *w = lj_buf_more(sb, 1); 143 char *w = lj_buf_more2(sb, 1);
124 *w++ = (char)c; 144 *w++ = (char)c;
125 sb->w = w; 145 sb->w = w;
126 return sb; 146 return sb;
127} 147}
128 148
149SBuf * LJ_FASTCALL lj_buf_putchar(SBuf *sb, int c)
150{
151 char *w = sb->w;
152 if (LJ_LIKELY(w < sb->e)) {
153 *w++ = (char)c;
154 sb->w = w;
155 return sb;
156 }
157 return lj_buf_putchar2(sb, c);
158}
159#endif
160
129SBuf * LJ_FASTCALL lj_buf_putstr(SBuf *sb, GCstr *s) 161SBuf * LJ_FASTCALL lj_buf_putstr(SBuf *sb, GCstr *s)
130{ 162{
131 MSize len = s->len; 163 MSize len = s->len;