Skip to content

Commit e323502

Browse files
committed
* enum.c (enum_find): catch a value before recycle.
* enum.c (enum_all): ditto. * enum.c (enum_any): ditto. * enum.c (enum_min): ditto. * enum.c (enum_max): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2216 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
1 parent cecb9ca commit e323502

File tree

2 files changed

+28
-7
lines changed

2 files changed

+28
-7
lines changed

ChangeLog

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
1+
Mon Mar 18 10:31:20 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
2+
3+
* enum.c (enum_find): catch a value before recycle.
4+
5+
* enum.c (enum_all): ditto.
6+
7+
* enum.c (enum_any): ditto.
8+
9+
* enum.c (enum_min): ditto.
10+
11+
* enum.c (enum_max): ditto.
12+
113
Sun Mar 17 20:08:04 2002 Nobuyoshi Nakada <nobu.nakada@nifty.ne.jp>
214

315
* ext/iconv/depend: added.

enum.c

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -85,8 +85,9 @@ enum_find(argc, argv, obj)
8585
rb_scan_args(argc, argv, "01", &if_none);
8686
rb_iterate(rb_each, obj, find_i, (VALUE)memo);
8787
if (memo->u2.value) {
88+
VALUE result = memo->u1.value;
8889
rb_gc_force_recycle((VALUE)memo);
89-
return memo->u1.value;
90+
return result;
9091
}
9192
rb_gc_force_recycle((VALUE)memo);
9293
if (!NIL_P(if_none)) {
@@ -188,8 +189,9 @@ inject_i(i, memo)
188189
memo->u2.value = Qfalse;
189190
memo->u1.value = i;
190191
}
191-
else
192+
else {
192193
memo->u1.value = rb_yield(rb_assoc_new(memo->u1.value, i));
194+
}
193195

194196
return Qnil;
195197
}
@@ -278,12 +280,14 @@ static VALUE
278280
enum_all(obj)
279281
VALUE obj;
280282
{
283+
VALUE result;
281284
NODE *memo = rb_node_newnode(NODE_MEMO, Qnil, 0, 0);
282285

283286
memo->u1.value = Qtrue;
284287
rb_iterate(rb_each, obj, all_i, (VALUE)memo);
288+
result = memo->u1.value;
285289
rb_gc_force_recycle((VALUE)memo);
286-
return memo->u1.value;
290+
return result;
287291
}
288292

289293
static VALUE
@@ -302,12 +306,14 @@ static VALUE
302306
enum_any(obj)
303307
VALUE obj;
304308
{
309+
VALUE result;
305310
NODE *memo = rb_node_newnode(NODE_MEMO, Qnil, 0, 0);
306311

307312
memo->u1.value = Qfalse;
308313
rb_iterate(rb_each, obj, any_i, (VALUE)memo);
314+
result = memo->u1.value;
309315
rb_gc_force_recycle((VALUE)memo);
310-
return memo->u1.value;
316+
return result;
311317
}
312318

313319
static VALUE
@@ -348,11 +354,13 @@ static VALUE
348354
enum_min(obj)
349355
VALUE obj;
350356
{
357+
VALUE result;
351358
NODE *memo = rb_node_newnode(NODE_MEMO, Qnil, 0, 0);
352359

353360
rb_iterate(rb_each, obj, rb_block_given_p()?min_ii:min_i, (VALUE)memo);
361+
result = memo->u1.value;
354362
rb_gc_force_recycle((VALUE)memo);
355-
return memo->u1.value;
363+
return result;
356364
}
357365

358366
static VALUE
@@ -393,11 +401,13 @@ static VALUE
393401
enum_max(obj)
394402
VALUE obj;
395403
{
404+
VALUE result;
396405
NODE *memo = rb_node_newnode(NODE_MEMO, Qnil, 0, 0);
397406

398407
rb_iterate(rb_each, obj, rb_block_given_p()?max_ii:max_i, (VALUE)memo);
408+
result = memo->u1.value;
399409
rb_gc_force_recycle((VALUE)memo);
400-
return memo->u1.value;
410+
return result;
401411
}
402412

403413
static VALUE
@@ -417,7 +427,6 @@ enum_member(obj, val)
417427
VALUE obj, val;
418428
{
419429
VALUE result;
420-
421430
NODE *memo = rb_node_newnode(NODE_MEMO, val, Qfalse, 0);
422431

423432
rb_iterate(rb_each, obj, member_i, (VALUE)memo);

0 commit comments

Comments
 (0)