[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]