From f67f196b1d89753af958249ffe7458aa2e3f42b6 Mon Sep 17 00:00:00 2001 From: matz Date: Wed, 2 Apr 2008 13:31:42 +0000 Subject: * rational.c (nurat_int_check): function for DRY integer check. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@15886 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- rational.c | 73 ++++++++++++++++---------------------------------------------- 1 file changed, 19 insertions(+), 54 deletions(-) (limited to 'rational.c') diff --git a/rational.c b/rational.c index 3451fc65e5..dd5cd1046c 100644 --- a/rational.c +++ b/rational.c @@ -427,6 +427,18 @@ f_rational_new_bang2(VALUE klass, VALUE x, VALUE y) #define f_unify_p(klass) rb_const_defined(klass, id_Unify) +static inline void +nurat_int_check(VALUE num) +{ + switch (TYPE(num)) { + case T_FIXNUM: + case T_BIGNUM: + break; + default: + rb_raise(rb_eArgError, "not an integer"); + } +} + inline static VALUE nurat_s_canonicalize_internal(VALUE klass, VALUE num, VALUE den) { @@ -487,21 +499,8 @@ nurat_s_canonicalize(int argc, VALUE *argv, VALUE klass) break; } - switch (TYPE(num)) { - case T_FIXNUM: - case T_BIGNUM: - break; - default: - rb_raise(rb_eArgError, "not an integer"); - } - - switch (TYPE(den)) { - case T_FIXNUM: - case T_BIGNUM: - break; - default: - rb_raise(rb_eArgError, "not an integer"); - } + nurat_int_check(num); + nurat_int_check(den); return nurat_s_canonicalize_internal(klass, num, den); } @@ -518,21 +517,8 @@ nurat_s_new(int argc, VALUE *argv, VALUE klass) break; } - switch (TYPE(num)) { - case T_FIXNUM: - case T_BIGNUM: - break; - default: - rb_raise(rb_eArgError, "not an integer"); - } - - switch (TYPE(den)) { - case T_FIXNUM: - case T_BIGNUM: - break; - default: - rb_raise(rb_eArgError, "not an integer"); - } + nurat_int_check(num); + nurat_int_check(den); return nurat_s_canonicalize_internal(klass, num, den); } @@ -1223,42 +1209,21 @@ nurat_marshal_load(VALUE self, VALUE a) VALUE rb_gcd(VALUE self, VALUE other) { - switch (TYPE(other)) { - case T_FIXNUM: - case T_BIGNUM: - break; - default: - rb_raise(rb_eArgError, "not an integer"); - } - + nurat_int_check(other); return f_gcd(self, other); } VALUE rb_lcm(VALUE self, VALUE other) { - switch (TYPE(other)) { - case T_FIXNUM: - case T_BIGNUM: - break; - default: - rb_raise(rb_eArgError, "not an integer"); - } - + nurat_int_check(other); return f_lcm(self, other); } VALUE rb_gcdlcm(VALUE self, VALUE other) { - switch (TYPE(other)) { - case T_FIXNUM: - case T_BIGNUM: - break; - default: - rb_raise(rb_eArgError, "not an integer"); - } - + nurat_int_check(other); return rb_assoc_new(f_gcd(self, other), f_lcm(self, other)); } -- cgit v1.2.3