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

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/

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