diff options
author | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-09-17 09:24:13 +0000 |
---|---|---|
committer | matz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2004-09-17 09:24:13 +0000 |
commit | e77ddaf0d1d421da2f655832a45f237558e23115 (patch) | |
tree | b20cb859d6ca1886f525e4b7477601bb1a5fbe31 /array.c | |
parent | 7b66963f61609fe8edea2380cba43289381a43d7 (diff) | |
download | ruby-e77ddaf0d1d421da2f655832a45f237558e23115.tar.gz |
* array.c (rb_ary_delete): element comparison might change array
size. [ruby-dev:24273]
* parse.y: make ruby parser reentrant. merge ripper parser to the
real one. this change makes ruby require bison.
* file.c (rb_file_truncate): clear stdio buffer before truncating
the file. [ruby-dev:24191]
* ext/digest/digest.c: use rb_obj_class() instead of CLASS_OF
which might return singleton class. [ruby-dev:24202]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@6919 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 39 |
1 files changed, 18 insertions, 21 deletions
@@ -1923,7 +1923,8 @@ rb_ary_delete(ary, item) return Qnil; } - RARRAY(ary)->len = i2; + if (RARRAY(ary)->len > i2) + RARRAY(ary)->len = i2; if (i2 * 2 < RARRAY(ary)->aux.capa && RARRAY(ary)->aux.capa > ARY_DEFAULT_SIZE) { REALLOC_N(RARRAY(ary)->ptr, VALUE, i2 * 2); @@ -2467,17 +2468,15 @@ VALUE rb_ary_assoc(ary, key) VALUE ary, key; { - VALUE *p, *pend; + long i; + VALUE v; - p = RARRAY(ary)->ptr; - pend = p + RARRAY(ary)->len; - - while (p < pend) { - if (TYPE(*p) == T_ARRAY && - RARRAY(*p)->len > 0 && - rb_equal(RARRAY(*p)->ptr[0], key)) - return *p; - p++; + for (i = 0; i < RARRAY(ary)->len; ++i) { + v = RARRAY(ary)->ptr[i]; + if (TYPE(v) == T_ARRAY && + RARRAY(v)->len > 0 && + rb_equal(RARRAY(v)->ptr[0], key)) + return v; } return Qnil; } @@ -2500,17 +2499,15 @@ VALUE rb_ary_rassoc(ary, value) VALUE ary, value; { - VALUE *p, *pend; - - p = RARRAY(ary)->ptr; - pend = p + RARRAY(ary)->len; + long i; + VALUE v; - while (p < pend) { - if (TYPE(*p) == T_ARRAY - && RARRAY(*p)->len > 1 - && rb_equal(RARRAY(*p)->ptr[1], value)) - return *p; - p++; + for (i = 0; i < RARRAY(ary)->len; ++i) { + v = RARRAY(ary)->ptr[i]; + if (TYPE(v) == T_ARRAY && + RARRAY(v)->len > 1 && + rb_equal(RARRAY(v)->ptr[1], value)) + return v; } return Qnil; } |