diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-04-08 08:32:25 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2016-04-08 08:32:25 +0000 |
commit | 45c593d89ee29253e6c98427f58f32d55ff55aa1 (patch) | |
tree | a8861ab66e4cdaed05114ce6863490c4b28bc97a | |
parent | 333034eacd1af0701b5f3d4696ea48d79034be34 (diff) |
bignum.c: radix check functions
* bignum.c (valid_radix_p, invalid_radix): extracted functions to
check radix.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54517 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | bignum.c | 42 |
1 files changed, 28 insertions, 14 deletions
@@ -3685,6 +3685,20 @@ rb_integer_unpack(const void *words, size_t numwords, size_t wordsize, size_t na #define conv_digit(c) (ruby_digit36_to_number_table[(unsigned char)(c)]) +NORETURN(static inline void invalid_radix(int base)); + +static inline int +valid_radix_p(int base) +{ + return (1 < base && base <= 36); +} + +static inline void +invalid_radix(int base) +{ + rb_raise(rb_eArgError, "invalid radix %d", base); +} + static void str2big_scan_digits(const char *s, const char *str, int base, int badcheck, size_t *num_digits_p, size_t *len_p) { @@ -4040,8 +4054,8 @@ rb_cstr_to_inum(const char *str, int base, int badcheck) str += 2; } } - if (base < 2 || 36 < base) { - rb_raise(rb_eArgError, "invalid radix %d", base); + if (!valid_radix_p(base)) { + invalid_radix(base); } if (*str == '0') { /* squeeze preceding 0s */ int us = 0; @@ -4165,8 +4179,8 @@ rb_str2big_poweroftwo(VALUE arg, int base, int badcheck) size_t len; VALUE z; - if (base < 2 || 36 < base || !POW2_P(base)) { - rb_raise(rb_eArgError, "invalid radix %d", base); + if (!valid_radix_p(base) || !POW2_P(base)) { + invalid_radix(base); } rb_must_asciicompat(arg); @@ -4201,8 +4215,8 @@ rb_str2big_normal(VALUE arg, int base, int badcheck) int digits_per_bdigits_dbl; size_t num_bdigits; - if (base < 2 || 36 < base) { - rb_raise(rb_eArgError, "invalid radix %d", base); + if (!valid_radix_p(base)) { + invalid_radix(base); } rb_must_asciicompat(arg); @@ -4240,8 +4254,8 @@ rb_str2big_karatsuba(VALUE arg, int base, int badcheck) int digits_per_bdigits_dbl; size_t num_bdigits; - if (base < 2 || 36 < base) { - rb_raise(rb_eArgError, "invalid radix %d", base); + if (!valid_radix_p(base)) { + invalid_radix(base); } rb_must_asciicompat(arg); @@ -4280,8 +4294,8 @@ rb_str2big_gmp(VALUE arg, int base, int badcheck) int digits_per_bdigits_dbl; size_t num_bdigits; - if (base < 2 || 36 < base) { - rb_raise(rb_eArgError, "invalid radix %d", base); + if (!valid_radix_p(base)) { + invalid_radix(base); } rb_must_asciicompat(arg); @@ -4813,8 +4827,8 @@ big2str_generic(VALUE x, int base) return rb_usascii_str_new2("0"); } - if (base < 2 || 36 < base) - rb_raise(rb_eArgError, "invalid radix %d", base); + if (!valid_radix_p(base)) + invalid_radix(base); if (xn >= LONG_MAX/BITSPERDIG) { rb_raise(rb_eRangeError, "bignum too big to convert into `string'"); @@ -4939,8 +4953,8 @@ rb_big2str1(VALUE x, int base) return rb_usascii_str_new2("0"); } - if (base < 2 || 36 < base) - rb_raise(rb_eArgError, "invalid radix %d", base); + if (!valid_radix_p(base)) + invalid_radix(base); if (xn >= LONG_MAX/BITSPERDIG) { rb_raise(rb_eRangeError, "bignum too big to convert into `string'"); |