aboutsummaryrefslogtreecommitdiff
path: root/src/lj_strfmt.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lj_strfmt.c')
-rw-r--r--src/lj_strfmt.c31
1 files changed, 30 insertions, 1 deletions
diff --git a/src/lj_strfmt.c b/src/lj_strfmt.c
index 1fe9308d..e8fe2538 100644
--- a/src/lj_strfmt.c
+++ b/src/lj_strfmt.c
@@ -86,7 +86,7 @@ retlit:
86 return fs->len ? STRFMT_LIT : STRFMT_EOF; 86 return fs->len ? STRFMT_LIT : STRFMT_EOF;
87} 87}
88 88
89/* -- Format conversions -------------------------------------------------- */ 89/* -- Formatted conversions to buffer ------------------------------------- */
90 90
91/* Add formatted char to buffer. */ 91/* Add formatted char to buffer. */
92SBuf *lj_strfmt_putchar(SBuf *sb, SFormat sf, int32_t c) 92SBuf *lj_strfmt_putchar(SBuf *sb, SFormat sf, int32_t c)
@@ -294,6 +294,35 @@ SBuf *lj_strfmt_putnum(SBuf *sb, SFormat sf, lua_Number n)
294 return sb; 294 return sb;
295} 295}
296 296
297/* -- Conversions to strings ---------------------------------------------- */
298
299/* Raw conversion of object to string. */
300GCstr *lj_strfmt_obj(lua_State *L, cTValue *o)
301{
302 if (tvisstr(o)) {
303 return strV(o);
304 } else if (tvisnumber(o)) {
305 return lj_str_fromnumber(L, o);
306 } else if (tvisnil(o)) {
307 return lj_str_newlit(L, "nil");
308 } else if (tvisfalse(o)) {
309 return lj_str_newlit(L, "false");
310 } else if (tvistrue(o)) {
311 return lj_str_newlit(L, "true");
312 } else {
313 char buf[8+2+2+16], *p = buf;
314 p = lj_buf_wmem(p, lj_typename(o), strlen(lj_typename(o)));
315 *p++ = ':'; *p++ = ' ';
316 if (tvisfunc(o) && isffunc(funcV(o))) {
317 p = lj_buf_wmem(p, "builtin#", 8);
318 p = lj_str_bufint(p, funcV(o)->c.ffid);
319 } else {
320 p = lj_str_bufptr(p, lj_obj_ptr(o));
321 }
322 return lj_str_new(L, buf, (size_t)(p - buf));
323 }
324}
325
297/* -- Internal string formatting ------------------------------------------ */ 326/* -- Internal string formatting ------------------------------------------ */
298 327
299/* 328/*