ruby-changes:64341
From: Kenta <ko1@a...>
Date: Sat, 19 Dec 2020 22:14:41 +0900 (JST)
Subject: [ruby-changes:64341] 654f6fbf19 (master): [bigdecimal] Make BigDecimal#precs deprecated
https://git.ruby-lang.org/ruby.git/commit/?id=654f6fbf19 From 654f6fbf19c0ca2e01765a909b4d952b7f0f5baa Mon Sep 17 00:00:00 2001 From: Kenta Murata <mrkn@m...> Date: Sat, 19 Dec 2020 11:55:46 +0900 Subject: [bigdecimal] Make BigDecimal#precs deprecated https://github.com/ruby/bigdecimal/commit/7e80e6e145 https://github.com/ruby/bigdecimal/commit/0ed7846e8c diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c index ef975a0..fa00395 100644 --- a/ext/bigdecimal/bigdecimal.c +++ b/ext/bigdecimal/bigdecimal.c @@ -355,11 +355,12 @@ BigDecimal_double_fig(VALUE self) https://github.com/ruby/ruby/blob/trunk/ext/bigdecimal/bigdecimal.c#L355 /* call-seq: * big_decimal.precs -> array * - * Returns an Array of two Integer values. + * Returns an Array of two Integer values that represent platform-dependent + * internal storage properties. * - * The first value is the current number of significant digits in the - * BigDecimal. The second value is the maximum number of significant digits - * for the BigDecimal. + * This method is deprecated and will be removed in the future. + * Instead, use BigDecimal#precision for obtaining the number of decimal + * digits. * * BigDecimal('5').precs #=> [9, 18] */ @@ -371,6 +372,10 @@ BigDecimal_prec(VALUE self) https://github.com/ruby/ruby/blob/trunk/ext/bigdecimal/bigdecimal.c#L372 Real *p; VALUE obj; + rb_category_warn(RB_WARN_CATEGORY_DEPRECATED, + "BigDecimal#precs is deprecated and will be removed in the future; " + "use BigDecimal#precision instead."); + GUARD_OBJ(p, GetVpValue(self, 1)); obj = rb_assoc_new(SIZET2NUM(p->Prec*VpBaseFig()), SIZET2NUM(p->MaxPrec*VpBaseFig())); diff --git a/ext/bigdecimal/bigdecimal.h b/ext/bigdecimal/bigdecimal.h index e3eae06..28f3363 100644 --- a/ext/bigdecimal/bigdecimal.h +++ b/ext/bigdecimal/bigdecimal.h @@ -159,6 +159,10 @@ rb_sym2str(VALUE sym) https://github.com/ruby/ruby/blob/trunk/ext/bigdecimal/bigdecimal.h#L159 # define vabs llabs #endif +#if !defined(HAVE_RB_CATEGORY_WARN) || !defined(HAVE_CONST_RB_WARN_CATEGORY_DEPRECATED) +# define rb_category_warn(category, ...) rb_warn(__VA_ARGS__) +#endif + extern VALUE rb_cBigDecimal; #if 0 || SIZEOF_BDIGITS >= 16 diff --git a/ext/bigdecimal/extconf.rb b/ext/bigdecimal/extconf.rb index fc448ed..63123e2 100644 --- a/ext/bigdecimal/extconf.rb +++ b/ext/bigdecimal/extconf.rb @@ -42,6 +42,8 @@ have_func("rb_complex_imag", "ruby.h") https://github.com/ruby/ruby/blob/trunk/ext/bigdecimal/extconf.rb#L42 have_func("rb_array_const_ptr", "ruby.h") have_func("rb_sym2str", "ruby.h") have_func("rb_opts_exception_p", "ruby.h") +have_func("rb_category_warn", "ruby.h") +have_const("RB_WARN_CATEGORY_DEPRECATED", "ruby.h") if File.file?(File.expand_path('../lib/bigdecimal.rb', __FILE__)) bigdecimal_rb = "$(srcdir)/lib/bigdecimal.rb" diff --git a/test/bigdecimal/test_bigdecimal.rb b/test/bigdecimal/test_bigdecimal.rb index 59726ad..3003e44 100644 --- a/test/bigdecimal/test_bigdecimal.rb +++ b/test/bigdecimal/test_bigdecimal.rb @@ -610,12 +610,22 @@ class TestBigDecimal < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/bigdecimal/test_bigdecimal.rb#L610 assert_operator(BigDecimal((2**100).to_s), :==, d) end + def test_precs_deprecated + assert_warn(/BigDecimal#precs is deprecated and will be removed in the future/) do + BigDecimal("1").precs + end + end + def test_precs - a = BigDecimal("1").precs - assert_instance_of(Array, a) - assert_equal(2, a.size) - assert_kind_of(Integer, a[0]) - assert_kind_of(Integer, a[1]) + assert_separately(["-rbigdecimal"], "#{<<~"begin;"}\n#{<<~'end;'}") + begin; + $VERBOSE = nil + a = BigDecimal("1").precs + assert_instance_of(Array, a) + assert_equal(2, a.size) + assert_kind_of(Integer, a[0]) + assert_kind_of(Integer, a[1]) + end; end def test_hash @@ -764,7 +774,7 @@ class TestBigDecimal < Test::Unit::TestCase https://github.com/ruby/ruby/blob/trunk/test/bigdecimal/test_bigdecimal.rb#L774 assert_equal(BigDecimal("0.1"), a, '[ruby-core:34318]') a, b = BigDecimal("0.11111").coerce(1.quo(3)) - assert_equal(BigDecimal("0." + "3"*a.precs[0]), a) + assert_equal(BigDecimal("0." + "3"*a.precision), a) assert_nothing_raised(TypeError, '#7176') do BigDecimal('1') + Rational(1) -- cgit v0.10.2 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/