diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2011-12-22 18:29:09 -0800 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2011-12-22 18:29:09 -0800 |
commit | e4e0db3b369e74bd9a619b190f710706a40a64d4 (patch) | |
tree | e705e8a3fe5ac4b3e2705bf576f63e43cce16f2d | |
parent | cd7f176ebd9de3e731d4f02223c796b6738dd217 (diff) | |
download | txr-e4e0db3b369e74bd9a619b190f710706a40a64d4.tar.gz txr-e4e0db3b369e74bd9a619b190f710706a40a64d4.tar.bz2 txr-e4e0db3b369e74bd9a619b190f710706a40a64d4.zip |
* stream.c (vformat): If width is specified for ~s or ~a, and
the object is not a string or number, then print it to a string
and treat it as a string, adjusting it within the field.
Also, do not simply abort on an unknown format directive
but throw a proper exception.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | stream.c | 8 |
2 files changed, 15 insertions, 1 deletions
@@ -1,5 +1,13 @@ 2011-12-22 Kaz Kylheku <kaz@kylheku.com> + * stream.c (vformat): If width is specified for ~s or ~a, and + the object is not a string or number, then print it to a string + and treat it as a string, adjusting it within the field. + Also, do not simply abort on an unknown format directive + but throw a proper exception. + +2011-12-22 Kaz Kylheku <kaz@kylheku.com> + * stream.c (vformat): Left-adjusted field is now specified using < rather than '-'. The +, space and leading 0 are specified on the precision, not the width. @@ -1020,6 +1020,11 @@ val vformat(val stream, val fmtstr, va_list vl) pnum = (char *) chk_malloc(nchars + 1); mp_toradix(mp(obj), (unsigned char *) pnum, 10); goto output_num; + } else if (width != 0) { + val str = format(nil, ch == 'a' ? lit("~a") : lit("~s"), obj, nao); + if (!vformat_str(stream, str, width, left, precision)) + return nil; + continue; } if (ch == 'a') obj_pprint(obj, stream); @@ -1032,7 +1037,8 @@ val vformat(val stream, val fmtstr, va_list vl) sprintf(num_buf, num_fmt->hex, value); goto output_num; default: - abort(); + uw_throwf(error_s, lit("unknown format directive character ~s\n"), + chr(ch), nao); output_num: { val res = vformat_num(stream, pnum, width, left, |