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

ruby-changes:17532

From: naruse <ko1@a...>
Date: Wed, 20 Oct 2010 10:03:29 +0900 (JST)
Subject: [ruby-changes:17532] Ruby:r29537 (trunk): * vsnprintf.c (BSD_vfprintf): print floating point on "%#a".

naruse	2010-10-20 10:03:18 +0900 (Wed, 20 Oct 2010)

  New Revision: 29537

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29537

  Log:
    * vsnprintf.c (BSD_vfprintf): print floating point on "%#a".
      [ruby-dev:42431] Bug#3965

  Modified files:
    trunk/ChangeLog
    trunk/test/ruby/test_sprintf.rb
    trunk/vsnprintf.c

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 29536)
+++ ChangeLog	(revision 29537)
@@ -1,3 +1,8 @@
+Wed Oct 20 10:00:57 2010  NARUSE, Yui  <naruse@r...>
+
+	* vsnprintf.c (BSD_vfprintf): print floating point on "%#a".
+	  [ruby-dev:42431] Bug#3965
+
 Tue Oct 19 19:30:11 2010  NARUSE, Yui  <naruse@r...>
 
 	* vsnprintf.c (BSD_vfprintf): clear ALT flag for %a.
Index: vsnprintf.c
===================================================================
--- vsnprintf.c	(revision 29536)
+++ vsnprintf.c	(revision 29537)
@@ -784,7 +784,6 @@
 #ifdef FLOATING_POINT
 		case 'a':
 		case 'A':
-			flags &= ~ALT;
 			if (prec >= 0)
 				prec++;
 			goto fp_begin;
@@ -832,7 +831,7 @@
 				expsize = exponent(expstr, expt, ch + 'p' - 'a');
 				ch += 'x' - 'a';
 				size = expsize + ndig;
-				if (ndig > 1)
+				if (ndig > 1 || flags & ALT)
 					++size; /* floating point */
 			}
 			else if (ch <= 'e') {	/* 'e' or 'E' fmt */
@@ -1067,7 +1066,7 @@
 					ox[2] = *cp++;
 					ox[3] = '.';
 					PRINT(ox+2, 2);
-					PRINT(cp, ndig-1);
+					if (ndig > 0) PRINT(cp, ndig-1);
 				} else	/* XpYYY */
 					PRINT(cp, 1);
 				PRINT(expstr, expsize);
@@ -1179,8 +1178,6 @@
 				*decpt = -ndigits + 1;
 			bp += *decpt;
 		}
-		if (value == 0)	/* kludge for __dtoa irregularity */
-			rve = bp;
 		while (rve < bp)
 			*rve++ = '0';
 	}
Index: test/ruby/test_sprintf.rb
===================================================================
--- test/ruby/test_sprintf.rb	(revision 29536)
+++ test/ruby/test_sprintf.rb	(revision 29537)
@@ -221,10 +221,15 @@
     assert_equal("-0x1.08p+0", sprintf("%010a", -1.03125), bug3962)
 
     bug3964 = '[ruby-core:32848]'
-    assert_equal("0x000000000000000p+0", sprintf("%020a",  0), bug3962)
+    assert_equal("0x000000000000000p+0", sprintf("%020a",  0), bug3964)
     assert_equal("0x000000000000001p+0", sprintf("%020a", 1), bug3964)
     assert_equal("-0x00000000000001p+0", sprintf("%020a", -1), bug3964)
-    assert_equal("0x000000000000000p+0", sprintf("%#020a",  0), bug3962)
+    assert_equal("0x00000000000000.p+0", sprintf("%#020a",  0), bug3964)
+
+    bug3965 = '[ruby-dev:42431]'
+    assert_equal("0x1.p+0", sprintf("%#.0a",  1), bug3965)
+    assert_equal("0x00000000000000.p+0", sprintf("%#020a",  0), bug3965)
+    assert_equal("0x0000.0000000000p+0", sprintf("%#020.10a",  0), bug3965)
   end
 
   BSIZ = 120

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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