ruby-changes:25493
From: usa <ko1@a...>
Date: Thu, 8 Nov 2012 14:09:50 +0900 (JST)
Subject: [ruby-changes:25493] usa:r37550 (ruby_1_9_3): merge revision(s) 37406: [Backport #7176]
usa 2012-11-08 14:09:39 +0900 (Thu, 08 Nov 2012) New Revision: 37550 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37550 Log: merge revision(s) 37406: [Backport #7176] * ext/bigdecimal/bigdecimal.c (BigDecimal_add), test/bigdecimal/test_bigdecimal.rb: need to specify precision for converting Rational and Float. [ruby-core:48045] [Bug #7176] Modified directories: branches/ruby_1_9_3/ Modified files: branches/ruby_1_9_3/ChangeLog branches/ruby_1_9_3/ext/bigdecimal/bigdecimal.c branches/ruby_1_9_3/test/bigdecimal/test_bigdecimal.rb branches/ruby_1_9_3/version.h Index: ruby_1_9_3/ChangeLog =================================================================== --- ruby_1_9_3/ChangeLog (revision 37549) +++ ruby_1_9_3/ChangeLog (revision 37550) @@ -1,3 +1,10 @@ +Thu Nov 8 14:09:18 2012 Kenta Murata <mrkn@m...> + + * ext/bigdecimal/bigdecimal.c (BigDecimal_add), + test/bigdecimal/test_bigdecimal.rb: + need to specify precision for converting Rational and Float. + [ruby-core:48045] [Bug #7176] + Thu Nov 8 14:05:31 2012 NAKAMURA Usaku <usa@r...> * win32/win32.c (has_redirection): should use shell (cmd.exe) when Index: ruby_1_9_3/ext/bigdecimal/bigdecimal.c =================================================================== --- ruby_1_9_3/ext/bigdecimal/bigdecimal.c (revision 37549) +++ ruby_1_9_3/ext/bigdecimal/bigdecimal.c (revision 37550) @@ -808,24 +808,38 @@ ENTER(5); Real *c, *a, *b; size_t mx; - GUARD_OBJ(a,GetVpValue(self,1)); - b = GetVpValue(r,0); - if(!b) return DoSomeOne(self,r,'+'); + + GUARD_OBJ(a, GetVpValue(self, 1)); + if (TYPE(r) == T_FLOAT) { + b = GetVpValueWithPrec(r, DBL_DIG+1, 1); + } + else if (TYPE(r) == T_RATIONAL) { + b = GetVpValueWithPrec(r, a->Prec*VpBaseFig(), 1); + } + else { + b = GetVpValue(r,0); + } + + if (!b) return DoSomeOne(self,r,'+'); SAVE(b); - if(VpIsNaN(b)) return b->obj; - if(VpIsNaN(a)) return a->obj; - mx = GetAddSubPrec(a,b); + + if (VpIsNaN(b)) return b->obj; + if (VpIsNaN(a)) return a->obj; + + mx = GetAddSubPrec(a, b); if (mx == (size_t)-1L) { - GUARD_OBJ(c,VpCreateRbObject(VpBaseFig() + 1, "0")); - VpAddSub(c, a, b, 1); - } else { - GUARD_OBJ(c,VpCreateRbObject(mx *(VpBaseFig() + 1), "0")); - if(!mx) { - VpSetInf(c,VpGetSign(a)); - } else { - VpAddSub(c, a, b, 1); - } + GUARD_OBJ(c,VpCreateRbObject(VpBaseFig() + 1, "0")); + VpAddSub(c, a, b, 1); } + else { + GUARD_OBJ(c, VpCreateRbObject(mx * (VpBaseFig() + 1), "0")); + if(!mx) { + VpSetInf(c, VpGetSign(a)); + } + else { + VpAddSub(c, a, b, 1); + } + } return ToValue(c); } Index: ruby_1_9_3/version.h =================================================================== --- ruby_1_9_3/version.h (revision 37549) +++ ruby_1_9_3/version.h (revision 37550) @@ -1,5 +1,5 @@ #define RUBY_VERSION "1.9.3" -#define RUBY_PATCHLEVEL 306 +#define RUBY_PATCHLEVEL 307 #define RUBY_RELEASE_DATE "2012-11-08" #define RUBY_RELEASE_YEAR 2012 Index: ruby_1_9_3/test/bigdecimal/test_bigdecimal.rb =================================================================== --- ruby_1_9_3/test/bigdecimal/test_bigdecimal.rb (revision 37549) +++ ruby_1_9_3/test/bigdecimal/test_bigdecimal.rb (revision 37550) @@ -558,6 +558,10 @@ a, b = BigDecimal("0.11111").coerce(1.quo(3)) assert_equal(BigDecimal("0." + "3"*a.precs[0]), a) + + assert_nothing_raised(TypeError, '#7176') do + BigDecimal.new('1') + Rational(1) + end end def test_uplus Property changes on: ruby_1_9_3 ___________________________________________________________________ Modified: svn:mergeinfo Merged /trunk:r37406 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/