diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-10-01 15:56:05 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-10-01 15:56:05 +0000 |
commit | 1b4d97ddba6b3190a4aecad2c6159e6ecd63604e (patch) | |
tree | bc13d8db7a8b41ff261c473ce6501751bf98cf8b /enum.c | |
parent | 8e292f628567bad4b7e67d0fea28138785775651 (diff) | |
download | ruby-1b4d97ddba6b3190a4aecad2c6159e6ecd63604e.tar.gz |
* string.c (rb_str_sum): string may be altered. [ruby-dev:24381]
* eval.c (rb_f_eval): defer pointer retrieval to prevent unsafe
sourcefile string modification. [ruby-dev:24373]
* io.c (io_read): block string buffer modification during
rb_io_fread() by freezing it temporarily. [ruby-dev:24366]
* io.c (rb_io_s_popen): mode argument may be altered.
[ruby-dev:24375]
* file.c (rb_file_s_basename): ext argument may be altered.
[ruby-dev:24377]
* enum.c (enum_sort_by): use NODE instead of 2 element arrays.
[ruby-dev:24378]
* string.c (rb_str_chomp_bang): StringValue() may change the
receiver. [ruby-dev:24371]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6976 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'enum.c')
-rw-r--r-- | enum.c | 25 |
1 files changed, 12 insertions, 13 deletions
@@ -389,26 +389,26 @@ static VALUE sort_by_i(i, ary) VALUE i, ary; { - VALUE v, e; + VALUE v; + NODE *memo; v = rb_yield(i); - e = rb_assoc_new(v, i); - OBJ_FREEZE(e); - rb_ary_push(ary, e); + memo = rb_node_newnode(NODE_MEMO, v, i, 0); + rb_ary_push(ary, (VALUE)memo); return Qnil; } static VALUE sort_by_cmp(values, ary) - VALUE values; + VALUE values, ary; { - VALUE a = RARRAY(values)->ptr[0]; - VALUE b = RARRAY(values)->ptr[1]; + NODE *a = (NODE*)RARRAY(values)->ptr[0]; + NODE *b = (NODE*)RARRAY(values)->ptr[1]; - /* pedantic check; they must be arrays */ - Check_Type(a, T_ARRAY); - Check_Type(b, T_ARRAY); - return rb_funcall(RARRAY(a)->ptr[0], id_cmp, 1, RARRAY(b)->ptr[0]); + /* pedantic check; they must be memo nodes */ + Check_Type(a, T_NODE); + Check_Type(b, T_NODE); + return rb_funcall(a->u1.value, id_cmp, 1, b->u1.value); } /* @@ -498,8 +498,7 @@ enum_sort_by(obj) rb_iterate(rb_ary_sort_bang, ary, sort_by_cmp, ary); } for (i=0; i<RARRAY(ary)->len; i++) { - VALUE e = RARRAY(ary)->ptr[i]; - RARRAY(ary)->ptr[i] = RARRAY(e)->ptr[1]; + RARRAY(ary)->ptr[i] = RNODE(RARRAY(ary)->ptr[i])->u2.value; } return ary; } |