aboutsummaryrefslogtreecommitdiff
path: root/src/lj_strfmt.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/lj_strfmt.c66
1 files changed, 33 insertions, 33 deletions
diff --git a/src/lj_strfmt.c b/src/lj_strfmt.c
index b1c74f88..bde3ec0e 100644
--- a/src/lj_strfmt.c
+++ b/src/lj_strfmt.c
@@ -169,7 +169,7 @@ const char *lj_strfmt_wstrnum(lua_State *L, cTValue *o, MSize *lenp)
169 return NULL; 169 return NULL;
170 } 170 }
171 *lenp = sbuflen(sb); 171 *lenp = sbuflen(sb);
172 return sbufB(sb); 172 return sb->b;
173} 173}
174 174
175/* -- Unformatted conversions to buffer ----------------------------------- */ 175/* -- Unformatted conversions to buffer ----------------------------------- */
@@ -177,7 +177,7 @@ const char *lj_strfmt_wstrnum(lua_State *L, cTValue *o, MSize *lenp)
177/* Add integer to buffer. */ 177/* Add integer to buffer. */
178SBuf * LJ_FASTCALL lj_strfmt_putint(SBuf *sb, int32_t k) 178SBuf * LJ_FASTCALL lj_strfmt_putint(SBuf *sb, int32_t k)
179{ 179{
180 setsbufP(sb, lj_strfmt_wint(lj_buf_more(sb, STRFMT_MAXBUF_INT), k)); 180 sb->w = lj_strfmt_wint(lj_buf_more(sb, STRFMT_MAXBUF_INT), k);
181 return sb; 181 return sb;
182} 182}
183 183
@@ -191,7 +191,7 @@ SBuf * LJ_FASTCALL lj_strfmt_putnum(SBuf *sb, cTValue *o)
191 191
192SBuf * LJ_FASTCALL lj_strfmt_putptr(SBuf *sb, const void *v) 192SBuf * LJ_FASTCALL lj_strfmt_putptr(SBuf *sb, const void *v)
193{ 193{
194 setsbufP(sb, lj_strfmt_wptr(lj_buf_more(sb, STRFMT_MAXBUF_PTR), v)); 194 sb->w = lj_strfmt_wptr(lj_buf_more(sb, STRFMT_MAXBUF_PTR), v);
195 return sb; 195 return sb;
196} 196}
197 197
@@ -203,23 +203,23 @@ SBuf * LJ_FASTCALL lj_strfmt_putquoted(SBuf *sb, GCstr *str)
203 lj_buf_putb(sb, '"'); 203 lj_buf_putb(sb, '"');
204 while (len--) { 204 while (len--) {
205 uint32_t c = (uint32_t)(uint8_t)*s++; 205 uint32_t c = (uint32_t)(uint8_t)*s++;
206 char *p = lj_buf_more(sb, 4); 206 char *w = lj_buf_more(sb, 4);
207 if (c == '"' || c == '\\' || c == '\n') { 207 if (c == '"' || c == '\\' || c == '\n') {
208 *p++ = '\\'; 208 *w++ = '\\';
209 } else if (lj_char_iscntrl(c)) { /* This can only be 0-31 or 127. */ 209 } else if (lj_char_iscntrl(c)) { /* This can only be 0-31 or 127. */
210 uint32_t d; 210 uint32_t d;
211 *p++ = '\\'; 211 *w++ = '\\';
212 if (c >= 100 || lj_char_isdigit((uint8_t)*s)) { 212 if (c >= 100 || lj_char_isdigit((uint8_t)*s)) {
213 *p++ = (char)('0'+(c >= 100)); if (c >= 100) c -= 100; 213 *w++ = (char)('0'+(c >= 100)); if (c >= 100) c -= 100;
214 goto tens; 214 goto tens;
215 } else if (c >= 10) { 215 } else if (c >= 10) {
216 tens: 216 tens:
217 d = (c * 205) >> 11; c -= d * 10; *p++ = (char)('0'+d); 217 d = (c * 205) >> 11; c -= d * 10; *w++ = (char)('0'+d);
218 } 218 }
219 c += '0'; 219 c += '0';
220 } 220 }
221 *p++ = (char)c; 221 *w++ = (char)c;
222 setsbufP(sb, p); 222 sb->w = w;
223 } 223 }
224 lj_buf_putb(sb, '"'); 224 lj_buf_putb(sb, '"');
225 return sb; 225 return sb;
@@ -231,11 +231,11 @@ SBuf * LJ_FASTCALL lj_strfmt_putquoted(SBuf *sb, GCstr *str)
231SBuf *lj_strfmt_putfchar(SBuf *sb, SFormat sf, int32_t c) 231SBuf *lj_strfmt_putfchar(SBuf *sb, SFormat sf, int32_t c)
232{ 232{
233 MSize width = STRFMT_WIDTH(sf); 233 MSize width = STRFMT_WIDTH(sf);
234 char *p = lj_buf_more(sb, width > 1 ? width : 1); 234 char *w = lj_buf_more(sb, width > 1 ? width : 1);
235 if ((sf & STRFMT_F_LEFT)) *p++ = (char)c; 235 if ((sf & STRFMT_F_LEFT)) *w++ = (char)c;
236 while (width-- > 1) *p++ = ' '; 236 while (width-- > 1) *w++ = ' ';
237 if (!(sf & STRFMT_F_LEFT)) *p++ = (char)c; 237 if (!(sf & STRFMT_F_LEFT)) *w++ = (char)c;
238 setsbufP(sb, p); 238 sb->w = w;
239 return sb; 239 return sb;
240} 240}
241 241
@@ -244,20 +244,20 @@ SBuf *lj_strfmt_putfstr(SBuf *sb, SFormat sf, GCstr *str)
244{ 244{
245 MSize len = str->len <= STRFMT_PREC(sf) ? str->len : STRFMT_PREC(sf); 245 MSize len = str->len <= STRFMT_PREC(sf) ? str->len : STRFMT_PREC(sf);
246 MSize width = STRFMT_WIDTH(sf); 246 MSize width = STRFMT_WIDTH(sf);
247 char *p = lj_buf_more(sb, width > len ? width : len); 247 char *w = lj_buf_more(sb, width > len ? width : len);
248 if ((sf & STRFMT_F_LEFT)) p = lj_buf_wmem(p, strdata(str), len); 248 if ((sf & STRFMT_F_LEFT)) w = lj_buf_wmem(w, strdata(str), len);
249 while (width-- > len) *p++ = ' '; 249 while (width-- > len) *w++ = ' ';
250 if (!(sf & STRFMT_F_LEFT)) p = lj_buf_wmem(p, strdata(str), len); 250 if (!(sf & STRFMT_F_LEFT)) w = lj_buf_wmem(w, strdata(str), len);
251 setsbufP(sb, p); 251 sb->w = w;
252 return sb; 252 return sb;
253} 253}
254 254
255/* Add formatted signed/unsigned integer to buffer. */ 255/* Add formatted signed/unsigned integer to buffer. */
256SBuf *lj_strfmt_putfxint(SBuf *sb, SFormat sf, uint64_t k) 256SBuf *lj_strfmt_putfxint(SBuf *sb, SFormat sf, uint64_t k)
257{ 257{
258 char buf[STRFMT_MAXBUF_XINT], *q = buf + sizeof(buf), *p; 258 char buf[STRFMT_MAXBUF_XINT], *q = buf + sizeof(buf), *w;
259#ifdef LUA_USE_ASSERT 259#ifdef LUA_USE_ASSERT
260 char *ps; 260 char *ws;
261#endif 261#endif
262 MSize prefix = 0, len, prec, pprec, width, need; 262 MSize prefix = 0, len, prec, pprec, width, need;
263 263
@@ -301,27 +301,27 @@ SBuf *lj_strfmt_putfxint(SBuf *sb, SFormat sf, uint64_t k)
301 width = STRFMT_WIDTH(sf); 301 width = STRFMT_WIDTH(sf);
302 pprec = prec + (prefix >> 8); 302 pprec = prec + (prefix >> 8);
303 need = width > pprec ? width : pprec; 303 need = width > pprec ? width : pprec;
304 p = lj_buf_more(sb, need); 304 w = lj_buf_more(sb, need);
305#ifdef LUA_USE_ASSERT 305#ifdef LUA_USE_ASSERT
306 ps = p; 306 ws = w;
307#endif 307#endif
308 308
309 /* Format number with leading/trailing whitespace and zeros. */ 309 /* Format number with leading/trailing whitespace and zeros. */
310 if ((sf & (STRFMT_F_LEFT|STRFMT_F_ZERO)) == 0) 310 if ((sf & (STRFMT_F_LEFT|STRFMT_F_ZERO)) == 0)
311 while (width-- > pprec) *p++ = ' '; 311 while (width-- > pprec) *w++ = ' ';
312 if (prefix) { 312 if (prefix) {
313 if ((char)prefix >= 'X') *p++ = '0'; 313 if ((char)prefix >= 'X') *w++ = '0';
314 *p++ = (char)prefix; 314 *w++ = (char)prefix;
315 } 315 }
316 if ((sf & (STRFMT_F_LEFT|STRFMT_F_ZERO)) == STRFMT_F_ZERO) 316 if ((sf & (STRFMT_F_LEFT|STRFMT_F_ZERO)) == STRFMT_F_ZERO)
317 while (width-- > pprec) *p++ = '0'; 317 while (width-- > pprec) *w++ = '0';
318 while (prec-- > len) *p++ = '0'; 318 while (prec-- > len) *w++ = '0';
319 while (q < buf + sizeof(buf)) *p++ = *q++; /* Add number itself. */ 319 while (q < buf + sizeof(buf)) *w++ = *q++; /* Add number itself. */
320 if ((sf & STRFMT_F_LEFT)) 320 if ((sf & STRFMT_F_LEFT))
321 while (width-- > pprec) *p++ = ' '; 321 while (width-- > pprec) *w++ = ' ';
322 322
323 lj_assertX(need == (MSize)(p - ps), "miscalculated format size"); 323 lj_assertX(need == (MSize)(w - ws), "miscalculated format size");
324 setsbufP(sb, p); 324 sb->w = w;
325 return sb; 325 return sb;
326} 326}
327 327