diff options
author | Kenta Murata <mrkn@mrkn.jp> | 2021-01-15 10:03:56 +0900 |
---|---|---|
committer | Kenta Murata <mrkn@mrkn.jp> | 2021-01-16 00:07:48 +0900 |
commit | f95f85b215d85dfd2c439d1a366bb6419274c7ac (patch) | |
tree | 46955dd00f515acd83a468e782571054f2c8796f /ext | |
parent | 5307fab6619e26e05d791d68c35ceef2e923e8d5 (diff) |
[ruby/bigdecimal] Use new conversion functions in BigDecimal_DoDivmod
https://github.com/ruby/bigdecimal/commit/68c20200d5
Diffstat (limited to 'ext')
-rw-r--r-- | ext/bigdecimal/bigdecimal.c | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c index 2191007d7a..c93ad91e8c 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; |