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/