From f00efef30ad6eca30e5674493dacbd25b425a4eb Mon Sep 17 00:00:00 2001 From: Kenta Murata Date: Wed, 9 Oct 2019 10:27:08 +0900 Subject: [ruby/bigdecimal] Support a Complex in Kernel.BigDecimal() https://github.com/ruby/bigdecimal/commit/00795cb01f --- ext/bigdecimal/bigdecimal.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'ext/bigdecimal') diff --git a/ext/bigdecimal/bigdecimal.c b/ext/bigdecimal/bigdecimal.c index 23851eea58..3a46bd1c01 100644 --- a/ext/bigdecimal/bigdecimal.c +++ b/ext/bigdecimal/bigdecimal.c @@ -2629,6 +2629,7 @@ VpNewVarArg(int argc, VALUE *argv) } } + retry: switch (TYPE(iniValue)) { case T_DATA: if (is_kind_of_BigDecimal(iniValue)) { @@ -2666,6 +2667,18 @@ VpNewVarArg(int argc, VALUE *argv) } return GetVpValueWithPrec(iniValue, mf, 1); + case T_COMPLEX: + { + VALUE im; + im = rb_complex_imag(iniValue); + if (!is_zero(im)) { + rb_raise(rb_eArgError, + "Unable to make a BigDecimal from non-zero imaginary number"); + } + iniValue = rb_complex_real(iniValue); + goto retry; + } + case T_STRING: /* fall through */ default: -- cgit v1.2.3