From d2e2d320ab2a679c66edefbaed2c3a785956349e Mon Sep 17 00:00:00 2001 From: matz Date: Wed, 7 Dec 2005 08:41:59 +0000 Subject: * sprintf.c (rb_f_sprintf): [ruby-dev:27967] * range.c (range_include): use discrete membership for non Numeric values, for example, String. * numeric.c (num_scalar_p): new method. [ruby-dev:27936] * lib/complex.rb (Complex#scalar?): ditto. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@9654 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- range.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) (limited to 'range.c') diff --git a/range.c b/range.c index 12ea69daa..d18b4efe0 100644 --- a/range.c +++ b/range.c @@ -618,19 +618,28 @@ range_inspect(VALUE range) static VALUE range_include(VALUE range, VALUE val) { - VALUE beg, end; - - beg = rb_ivar_get(range, id_beg); - end = rb_ivar_get(range, id_end); - if (r_le(beg, val)) { - if (EXCL(range)) { - if (r_lt(val, end)) return Qtrue; - } - else { - if (r_le(val, end)) return Qtrue; + VALUE beg = rb_ivar_get(range, id_beg); + VALUE end = rb_ivar_get(range, id_end); + VALUE tmp; + int nv = FIXNUM_P(beg) || FIXNUM_P(end) || + rb_obj_is_kind_of(beg, rb_cNumeric) || + rb_obj_is_kind_of(end, rb_cNumeric); + + if (nv) { + numeric_range: + if (r_le(beg, val)) { + if (EXCL(range)) { + if (r_lt(val, end)) return Qtrue; + } + else { + if (r_le(val, end)) return Qtrue; + } } } - return Qfalse; + if (!NIL_P(rb_check_to_integer(beg, "to_int")) || + !NIL_P(rb_check_to_integer(end, "to_int"))) + goto numeric_range; + return rb_call_super(1, &val); } -- cgit