ruby-changes:23728
From: nobu <ko1@a...>
Date: Fri, 25 May 2012 01:15:53 +0900 (JST)
Subject: [ruby-changes:23728] nobu:r35779 (trunk): sprintf.c: inspect by plus
nobu 2012-05-25 01:15:42 +0900 (Fri, 25 May 2012) New Revision: 35779 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35779 Log: sprintf.c: inspect by plus * sprintf.c (ruby__sfvextra): [EXPERIMENTAL] use inspect instead of to_s if plus flag is given. * vsnprintf.c (BSD_vfprintf): pass sign flag. Modified files: trunk/ChangeLog trunk/error.c trunk/sprintf.c trunk/vsnprintf.c Index: ChangeLog =================================================================== --- ChangeLog (revision 35778) +++ ChangeLog (revision 35779) @@ -1,3 +1,10 @@ +Fri May 25 01:15:39 2012 Nobuyoshi Nakada <nobu@r...> + + * sprintf.c (ruby__sfvextra): [EXPERIMENTAL] use inspect instead of + to_s if plus flag is given. + + * vsnprintf.c (BSD_vfprintf): pass sign flag. + Fri May 25 00:37:22 2012 Nobuyoshi Nakada <nobu@r...> * test/rubygems/test_gem_indexer.rb (setup, teardown): save @tempdir Index: vsnprintf.c =================================================================== --- vsnprintf.c (revision 35778) +++ vsnprintf.c (revision 35779) @@ -183,7 +183,7 @@ struct __sbuf _bf; /* the buffer (at least 1 byte, if !NULL) */ size_t _lbfsize; /* 0 or -_bf._size, for inline putc */ int (*vwrite)(/* struct __sFILE*, struct __suio * */); - char *(*vextra)(/* struct __sFILE*, size_t, void*, long* */); + char *(*vextra)(/* struct __sFILE*, size_t, void*, long*, int */); } FILE; @@ -811,11 +811,12 @@ FLUSH(); #if defined _HAVE_SANE_QUAD_ && SIZEOF_VOIDP == SIZEOF_LONG_LONG uqval = va_arg(ap, u_quad_t); - cp = (*fp->vextra)(fp, sizeof(uqval), &uqval, &fieldsz); + cp = (*fp->vextra)(fp, sizeof(uqval), &uqval, &fieldsz, sign); #else ulval = va_arg(ap, u_long); - cp = (*fp->vextra)(fp, sizeof(ulval), &ulval, &fieldsz); + cp = (*fp->vextra)(fp, sizeof(ulval), &ulval, &fieldsz, sign); #endif + sign = '\0'; if (!cp) goto error; if (prec < 0) goto long_len; size = fieldsz < prec ? (int)fieldsz : prec; Index: sprintf.c =================================================================== --- sprintf.c (revision 35778) +++ sprintf.c (revision 35779) @@ -1178,7 +1178,7 @@ } static char * -ruby__sfvextra(rb_printf_buffer *fp, size_t valsize, void *valp, long *sz) +ruby__sfvextra(rb_printf_buffer *fp, size_t valsize, void *valp, long *sz, int sign) { VALUE value, result = (VALUE)fp->_bf._base; rb_encoding *enc; @@ -1189,7 +1189,12 @@ if (RBASIC(result)->klass) { rb_raise(rb_eRuntimeError, "rb_vsprintf reentered"); } - value = rb_obj_as_string(value); + if (sign == '+') { + value = rb_inspect(value); + } + else { + value = rb_obj_as_string(value); + } enc = rb_enc_compatible(result, value); if (enc) { rb_enc_associate(result, enc); Index: error.c =================================================================== --- error.c (revision 35778) +++ error.c (revision 35779) @@ -1116,9 +1116,9 @@ void rb_invalid_str(const char *str, const char *type) { - VALUE s = rb_str_inspect(rb_str_new2(str)); + VALUE s = rb_str_new2(str); - rb_raise(rb_eArgError, "invalid value for %s: %"PRIsVALUE, type, s); + rb_raise(rb_eArgError, "invalid value for %s: %+"PRIsVALUE, type, s); } /* -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/