diff --git a/ChangeLog b/ChangeLog index 917755c710..9c0d86c8e4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -12,6 +12,12 @@ Tue Jan 14 21:47:56 2003 Nobuyoshi Nakada the suffix specifiched. [ruby-dev:18702] http://moonrock.jp/~don/d/200211.html#d08_t1 +Tue Jan 14 18:36:41 2003 Yukihiro Matsumoto + + * enum.c (enum_all): now works without block. + + * enum.c (enum_any): ditto. + Tue Jan 14 01:21:32 2003 Nobuyoshi Nakada * io.c (next_argv): not always set binmode. diff --git a/enum.c b/enum.c index 24b6e9e065..f4402926cc 100644 --- a/enum.c +++ b/enum.c @@ -287,7 +287,7 @@ enum_sort_by(obj) } static VALUE -all_i(i, memo) +all_iter_i(i, memo) VALUE i; NODE *memo; { @@ -298,6 +298,18 @@ all_i(i, memo) return Qnil; } +static VALUE +all_i(i, memo) + VALUE i; + NODE *memo; +{ + if (!RTEST(i)) { + memo->u1.value = Qfalse; + rb_iter_break(); + } + return Qnil; +} + static VALUE enum_all(obj) VALUE obj; @@ -306,18 +318,30 @@ enum_all(obj) NODE *memo = rb_node_newnode(NODE_MEMO, Qnil, 0, 0); memo->u1.value = Qtrue; - rb_iterate(rb_each, obj, all_i, (VALUE)memo); + rb_iterate(rb_each, obj, rb_block_given_p() ? all_iter_i : all_i, (VALUE)memo); result = memo->u1.value; rb_gc_force_recycle((VALUE)memo); return result; } +static VALUE +any_iter_i(i, memo) + VALUE i; + NODE *memo; +{ + if (RTEST(rb_yield(i))) { + memo->u1.value = Qtrue; + rb_iter_break(); + } + return Qnil; +} + static VALUE any_i(i, memo) VALUE i; NODE *memo; { - if (RTEST(rb_yield(i))) { + if (RTEST(i)) { memo->u1.value = Qtrue; rb_iter_break(); } @@ -332,7 +356,7 @@ enum_any(obj) NODE *memo = rb_node_newnode(NODE_MEMO, Qnil, 0, 0); memo->u1.value = Qfalse; - rb_iterate(rb_each, obj, any_i, (VALUE)memo); + rb_iterate(rb_each, obj, rb_block_given_p() ? any_iter_i : any_i, (VALUE)memo); result = memo->u1.value; rb_gc_force_recycle((VALUE)memo); return result; diff --git a/eval.c b/eval.c index 5b0dfb5f14..adc04d9dea 100644 --- a/eval.c +++ b/eval.c @@ -5613,6 +5613,7 @@ rb_f_require(obj, fname) SafeStringValue(fname); ext = strrchr(RSTRING(fname)->ptr, '.'); + if (ext && strchr(ext, '/')) ext = 0; if (ext) { if (strcmp(".rb", ext) == 0) { feature = rb_str_dup(fname);