Skip to content

Commit a973f96

Browse files
author
matz
committed
* enum.c (enum_all): now works without block.
* enum.c (enum_any): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@3344 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent ed8fb08 commit a973f96

File tree

3 files changed

+35
-4
lines changed

3 files changed

+35
-4
lines changed

ChangeLog

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,12 @@ Tue Jan 14 21:47:56 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
1212
the suffix specifiched. [ruby-dev:18702]
1313
http://moonrock.jp/~don/d/200211.html#d08_t1
1414

15+
Tue Jan 14 18:36:41 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
16+
17+
* enum.c (enum_all): now works without block.
18+
19+
* enum.c (enum_any): ditto.
20+
1521
Tue Jan 14 01:21:32 2003 Nobuyoshi Nakada <nobu.nokada@softhome.net>
1622

1723
* io.c (next_argv): not always set binmode.

enum.c

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ enum_sort_by(obj)
287287
}
288288

289289
static VALUE
290-
all_i(i, memo)
290+
all_iter_i(i, memo)
291291
VALUE i;
292292
NODE *memo;
293293
{
@@ -298,6 +298,18 @@ all_i(i, memo)
298298
return Qnil;
299299
}
300300

301+
static VALUE
302+
all_i(i, memo)
303+
VALUE i;
304+
NODE *memo;
305+
{
306+
if (!RTEST(i)) {
307+
memo->u1.value = Qfalse;
308+
rb_iter_break();
309+
}
310+
return Qnil;
311+
}
312+
301313
static VALUE
302314
enum_all(obj)
303315
VALUE obj;
@@ -306,14 +318,14 @@ enum_all(obj)
306318
NODE *memo = rb_node_newnode(NODE_MEMO, Qnil, 0, 0);
307319

308320
memo->u1.value = Qtrue;
309-
rb_iterate(rb_each, obj, all_i, (VALUE)memo);
321+
rb_iterate(rb_each, obj, rb_block_given_p() ? all_iter_i : all_i, (VALUE)memo);
310322
result = memo->u1.value;
311323
rb_gc_force_recycle((VALUE)memo);
312324
return result;
313325
}
314326

315327
static VALUE
316-
any_i(i, memo)
328+
any_iter_i(i, memo)
317329
VALUE i;
318330
NODE *memo;
319331
{
@@ -324,6 +336,18 @@ any_i(i, memo)
324336
return Qnil;
325337
}
326338

339+
static VALUE
340+
any_i(i, memo)
341+
VALUE i;
342+
NODE *memo;
343+
{
344+
if (RTEST(i)) {
345+
memo->u1.value = Qtrue;
346+
rb_iter_break();
347+
}
348+
return Qnil;
349+
}
350+
327351
static VALUE
328352
enum_any(obj)
329353
VALUE obj;
@@ -332,7 +356,7 @@ enum_any(obj)
332356
NODE *memo = rb_node_newnode(NODE_MEMO, Qnil, 0, 0);
333357

334358
memo->u1.value = Qfalse;
335-
rb_iterate(rb_each, obj, any_i, (VALUE)memo);
359+
rb_iterate(rb_each, obj, rb_block_given_p() ? any_iter_i : any_i, (VALUE)memo);
336360
result = memo->u1.value;
337361
rb_gc_force_recycle((VALUE)memo);
338362
return result;

eval.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5613,6 +5613,7 @@ rb_f_require(obj, fname)
56135613

56145614
SafeStringValue(fname);
56155615
ext = strrchr(RSTRING(fname)->ptr, '.');
5616+
if (ext && strchr(ext, '/')) ext = 0;
56165617
if (ext) {
56175618
if (strcmp(".rb", ext) == 0) {
56185619
feature = rb_str_dup(fname);

0 commit comments

Comments
 (0)