diff options
Diffstat (limited to '')
-rw-r--r-- | src/lj_buf.c | 36 |
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 | ||
112 | void 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 | ||
122 | MSize 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 | ||
113 | SBuf *lj_buf_putmem(SBuf *sb, const void *q, MSize len) | 132 | SBuf *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 | ||
121 | SBuf * LJ_FASTCALL lj_buf_putchar(SBuf *sb, int c) | 140 | #if LJ_HASJIT || LJ_HASFFI |
141 | static 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 | ||
149 | SBuf * 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 | |||
129 | SBuf * LJ_FASTCALL lj_buf_putstr(SBuf *sb, GCstr *s) | 161 | SBuf * LJ_FASTCALL lj_buf_putstr(SBuf *sb, GCstr *s) |
130 | { | 162 | { |
131 | MSize len = s->len; | 163 | MSize len = s->len; |