From a3e1b1ce7ed7e7ffac23015fc2fde56511b30681 Mon Sep 17 00:00:00 2001 From: ko1 Date: Sun, 31 Dec 2006 15:02:22 +0000 Subject: * Merge YARV git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11439 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- range.c | 121 +++++++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 78 insertions(+), 43 deletions(-) (limited to 'range.c') diff --git a/range.c b/range.c index 8d5bae8179..4567efbf5f 100644 --- a/range.c +++ b/range.c @@ -11,7 +11,6 @@ **********************************************************************/ #include "ruby.h" -#include "env.h" VALUE rb_cRange; static ID id_cmp, id_succ, id_beg, id_end, id_excl; @@ -44,7 +43,8 @@ range_init(VALUE range, VALUE beg, VALUE end, int exclude_end) VALUE v; v = rb_rescue(range_check, (VALUE)args, range_failed, 0); - if (NIL_P(v)) range_failed(); + if (NIL_P(v)) + range_failed(); } SET_EXCL(range, exclude_end); @@ -116,7 +116,8 @@ range_exclude_end_p(VALUE range) static VALUE range_eq(VALUE range, VALUE obj) { - if (range == obj) return Qtrue; + if (range == obj) + return Qtrue; if (!rb_obj_is_instance_of(obj, rb_obj_class(range))) return Qfalse; @@ -125,7 +126,8 @@ range_eq(VALUE range, VALUE obj) if (!rb_equal(rb_ivar_get(range, id_end), rb_ivar_get(obj, id_end))) return Qfalse; - if (EXCL(range) != EXCL(obj)) return Qfalse; + if (EXCL(range) != EXCL(obj)) + return Qfalse; return Qtrue; } @@ -135,8 +137,10 @@ r_lt(VALUE a, VALUE b) { VALUE r = rb_funcall(a, id_cmp, 1, b); - if (NIL_P(r)) return Qfalse; - if (rb_cmpint(r, a, b) < 0) return Qtrue; + if (NIL_P(r)) + return Qfalse; + if (rb_cmpint(r, a, b) < 0) + return Qtrue; return Qfalse; } @@ -146,10 +150,13 @@ r_le(VALUE a, VALUE b) int c; VALUE r = rb_funcall(a, id_cmp, 1, b); - if (NIL_P(r)) return Qfalse; + if (NIL_P(r)) + return Qfalse; c = rb_cmpint(r, a, b); - if (c == 0) return INT2FIX(0); - if (c < 0) return Qtrue; + if (c == 0) + return INT2FIX(0); + if (c < 0) + return Qtrue; return Qfalse; } @@ -171,7 +178,8 @@ r_le(VALUE a, VALUE b) static VALUE range_eql(VALUE range, VALUE obj) { - if (range == obj) return Qtrue; + if (range == obj) + return Qtrue; if (!rb_obj_is_instance_of(obj, rb_obj_class(range))) return Qfalse; @@ -180,7 +188,8 @@ range_eql(VALUE range, VALUE obj) if (!rb_eql(rb_ivar_get(range, id_end), rb_ivar_get(obj, id_end))) return Qfalse; - if (EXCL(range) != EXCL(obj)) return Qfalse; + if (EXCL(range) != EXCL(obj)) + return Qfalse; return Qtrue; } @@ -218,20 +227,22 @@ str_step(VALUE arg) } static void -range_each_func(VALUE range, VALUE (*func) (VALUE, void *), VALUE v, VALUE e, void *arg) +range_each_func(VALUE range, VALUE (*func) (VALUE, void *), VALUE v, VALUE e, + void *arg) { int c; if (EXCL(range)) { while (r_lt(v, e)) { - (*func)(v, arg); + (*func) (v, arg); v = rb_funcall(v, id_succ, 0, 0); } } else { while (RTEST(c = r_le(v, e))) { - (*func)(v, arg); - if (c == INT2FIX(0)) break; + (*func) (v, arg); + if (c == INT2FIX(0)) + break; v = rb_funcall(v, id_succ, 0, 0); } } @@ -296,13 +307,15 @@ range_step(int argc, VALUE *argv, VALUE range) if (unit < 0) { rb_raise(rb_eArgError, "step can't be negative"); } - if (unit == 0) rb_raise(rb_eArgError, "step can't be 0"); + if (unit == 0) + rb_raise(rb_eArgError, "step can't be 0"); if (FIXNUM_P(b) && FIXNUM_P(e)) { /* fixnums are special */ long end = FIX2LONG(e); long i; - if (!EXCL(range)) end += 1; - for (i=FIX2LONG(b); i 0) return Qnil; + if (c > 0) + return Qnil; return b; } } @@ -490,10 +512,11 @@ range_max(VALUE range) VALUE b = rb_ivar_get(range, id_beg); int c = rb_cmpint(rb_funcall(b, id_cmp, 1, e), b, e); - if (c > 0) return Qnil; + if (c > 0) + return Qnil; if (EXCL(range)) { if (FIXNUM_P(e)) { - return INT2NUM(FIX2INT(e)-1); + return INT2NUM(FIX2INT(e) - 1); } return rb_funcall(e, '-', 1, INT2FIX(1)); } @@ -514,9 +537,11 @@ rb_range_beg_len(VALUE range, long *begp, long *lenp, long len, int err) } else { b = rb_check_to_integer(range, "begin"); - if (NIL_P(b)) return Qfalse; + if (NIL_P(b)) + return Qfalse; e = rb_check_to_integer(range, "end"); - if (NIL_P(e)) return Qfalse; + if (NIL_P(e)) + return Qfalse; excl = RTEST(rb_funcall(range, rb_intern("exclude_end?"), 0)); } beg = NUM2LONG(b); @@ -524,16 +549,22 @@ rb_range_beg_len(VALUE range, long *begp, long *lenp, long len, int err) if (beg < 0) { beg += len; - if (beg < 0) goto out_of_range; + if (beg < 0) + goto out_of_range; } if (err == 0 || err == 2) { - if (beg > len) goto out_of_range; - if (end > len) end = len; + if (beg > len) + goto out_of_range; + if (end > len) + end = len; } - if (end < 0) end += len; - if (!excl) end++; /* include end point */ + if (end < 0) + end += len; + if (!excl) + end++; /* include end point */ len = end - beg; - if (len < 0) len = 0; + if (len < 0) + len = 0; *begp = beg; *lenp = len; @@ -562,7 +593,7 @@ range_to_s(VALUE range) str = rb_obj_as_string(rb_ivar_get(range, id_beg)); str2 = rb_obj_as_string(rb_ivar_get(range, id_end)); str = rb_str_dup(str); - rb_str_cat(str, "...", EXCL(range)?3:2); + rb_str_cat(str, "...", EXCL(range) ? 3 : 2); rb_str_append(str, str2); OBJ_INFECT(str, str2); @@ -600,7 +631,7 @@ range_inspect(VALUE range) str = rb_inspect(rb_ivar_get(range, id_beg)); str2 = rb_inspect(rb_ivar_get(range, id_end)); str = rb_str_dup(str); - rb_str_cat(str, "...", EXCL(range)?3:2); + rb_str_cat(str, "...", EXCL(range) ? 3 : 2); rb_str_append(str, str2); OBJ_INFECT(str, str2); @@ -643,15 +674,17 @@ range_include(VALUE range, VALUE val) !NIL_P(rb_check_to_integer(end, "to_int"))) { if (r_le(beg, val)) { if (EXCL(range)) { - if (r_lt(val, end)) return Qtrue; + if (r_lt(val, end)) + return Qtrue; } else { - if (r_le(val, end)) return Qtrue; + if (r_le(val, end)) + return Qtrue; } } return Qfalse; } - ruby_frame->this_func = rb_intern("include?"); + // TODO: ruby_frame->this_func = rb_intern("include?"); return rb_call_super(1, &val); } @@ -677,10 +710,12 @@ range_cover(VALUE range, VALUE val) end = rb_ivar_get(range, id_end); if (r_le(beg, val)) { if (EXCL(range)) { - if (r_lt(val, end)) return Qtrue; + if (r_lt(val, end)) + return Qtrue; } else { - if (r_le(val, end)) return Qtrue; + if (r_le(val, end)) + return Qtrue; } } return Qfalse; -- cgit v1.2.3