From 69263bb7557de514f67bc5a8d27b91b4b781138a Mon Sep 17 00:00:00 2001 From: akr Date: Thu, 1 Aug 2013 14:34:59 +0000 Subject: [PATCH] * bignum.c (rb_cstr_to_inum): Use power_cache_get_power. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42309 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 4 ++++ bignum.c | 9 +++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index ab05bc93ec..40a89b8bc4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +Thu Aug 1 23:33:01 2013 Tanaka Akira + + * bignum.c (rb_cstr_to_inum): Use power_cache_get_power. + Thu Aug 1 21:02:48 2013 Tanaka Akira * bignum.c (rb_big2str1): Raise an error for too big number. diff --git a/bignum.c b/bignum.c index 1bde7dab6e..1f37209ba1 100644 --- a/bignum.c +++ b/bignum.c @@ -141,6 +141,7 @@ static inline VALUE bigtrunc(VALUE x); static VALUE bigsq(VALUE x); static void bigdivmod(VALUE x, VALUE y, volatile VALUE *divp, volatile VALUE *modp); +static VALUE power_cache_get_power(int base, int power_level, size_t *numdigits_ret); static int nlz16(uint16_t x) @@ -3833,13 +3834,12 @@ rb_cstr_to_inum(const char *str, int base, int badcheck) BDIGIT_DBL dd; BDIGIT_DBL current_base; int m; + int power_level = 0; uds = ALLOCV_N(BDIGIT, tmpuv, 2*num_bdigits); vds = uds + num_bdigits; - powerv = bignew(2, 1); - BDIGITS(powerv)[0] = BIGLO(power); - BDIGITS(powerv)[1] = (BDIGIT)BIGDN(power); + powerv = power_cache_get_power(base, power_level, NULL); i = 0; dd = 0; @@ -3879,7 +3879,8 @@ rb_cstr_to_inum(const char *str, int base, int badcheck) MEMCPY(vds+i, uds+i, BDIGIT, num_bdigits-i); } } - powerv = bigtrunc(bigsq(powerv)); + power_level++; + powerv = power_cache_get_power(base, power_level, NULL); tds = vds; vds = uds; uds = tds;