summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenta Murata <mrkn@mrkn.jp>2021-01-15 10:03:56 +0900
committerKenta Murata <mrkn@mrkn.jp>2021-01-16 00:07:48 +0900
commitf95f85b215d85dfd2c439d1a366bb6419274c7ac (patch)
tree46955dd00f515acd83a468e782571054f2c8796f
parent5307fab6619e26e05d791d68c35ceef2e923e8d5 (diff)
[ruby/bigdecimal] Use new conversion functions in BigDecimal_DoDivmod
https://github.com/ruby/bigdecimal/commit/68c20200d5
-rw-r--r--ext/bigdecimal/bigdecimal.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c
index 2191007d7a3..c93ad91e8c7 100644
--- a/ext/bigdecimal/bigdecimal.c
+++ b/ext/bigdecimal/bigdecimal.c
@@ -1426,18 +1426,25 @@ BigDecimal_DoDivmod(VALUE self, VALUE r, Real **div, Real **mod)
Real *a, *b;
size_t mx;
- GUARD_OBJ(a, GetVpValue(self, 1));
+ TypedData_Get_Struct(self, Real, &BigDecimal_data_type, a);
+ SAVE(a);
+
+ VALUE rr = Qnil;
if (RB_TYPE_P(r, T_FLOAT)) {
- b = GetVpValueWithPrec(r, 0, 1);
+ rr = rb_float_convert_to_BigDecimal(r, 0, true);
}
else if (RB_TYPE_P(r, T_RATIONAL)) {
- b = GetVpValueWithPrec(r, a->Prec*VpBaseFig(), 1);
+ rr = rb_rational_convert_to_BigDecimal(r, a->Prec*BASE_FIG, true);
}
else {
- b = GetVpValue(r, 0);
+ rr = rb_convert_to_BigDecimal(r, 0, false);
}
- if (!b) return Qfalse;
+ if (!is_kind_of_BigDecimal(rr)) {
+ return Qfalse;
+ }
+
+ TypedData_Get_Struct(rr, Real, &BigDecimal_data_type, b);
SAVE(b);
if (VpIsNaN(a) || VpIsNaN(b)) goto NaN;