mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* object.c (Init_Object): should do exact match for Module#==.
* compar.c (cmp_eq): returns 'false' if <=> returns 'nil'. * compar.c (cmp_gt,cmp_ge,cmp_lt,cmp_le,cmp_between): ditto. * pack.c (pack_pack): should propagate taintedness. * pack.c (pack_unpack): ditto. * eval.c (rb_thread_schedule): need to preserve errno before calling rb_trap_exec(). * regex.c (calculate_must_string): a bug in charset/charset_not parsing. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@2482 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
9402cbeec5
commit
edbe98d848
9 changed files with 216 additions and 192 deletions
24
ChangeLog
24
ChangeLog
|
@ -20,6 +20,14 @@ Tue May 21 00:20:25 2002 Takaaki Tateishi <ttate@kt.jaist.ac.jp>
|
|||
|
||||
* ext/dl/lib/dl/struct.c: rename Struct#alloc to Struct#malloc.
|
||||
|
||||
Mon May 20 14:29:14 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* object.c (Init_Object): should do exact match for Module#==.
|
||||
|
||||
* compar.c (cmp_eq): returns 'false' if <=> returns 'nil'.
|
||||
|
||||
* compar.c (cmp_gt,cmp_ge,cmp_lt,cmp_le,cmp_between): ditto.
|
||||
|
||||
Mon May 20 13:28:52 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
|
||||
|
||||
* io.c (rb_io_clone): writing stream was not copied properly.
|
||||
|
@ -34,6 +42,12 @@ Sat May 18 21:18:00 2002 NAKAMURA Usaku <usa@ruby-lang.org>
|
|||
* win32/Makefile.sub (config.h): add VC++4/5 support about noreturn
|
||||
directive.
|
||||
|
||||
Sat May 18 02:16:41 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* pack.c (pack_pack): should propagate taintedness.
|
||||
|
||||
* pack.c (pack_unpack): ditto.
|
||||
|
||||
Fri May 17 16:16:19 2002 WATANABE Hirofumi <eban@ruby-lang.org>
|
||||
|
||||
* sampl/test.rb: use eval instead of './miniruby -c',
|
||||
|
@ -43,6 +57,14 @@ Thu May 16 14:46:34 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
|
|||
|
||||
* eval.c (rb_thread_select): cleanup conditional compilation.
|
||||
|
||||
Wed May 15 06:13:35 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* eval.c (rb_thread_schedule): need to preserve errno before
|
||||
calling rb_trap_exec().
|
||||
|
||||
* regex.c (calculate_must_string): a bug in charset/charset_not
|
||||
parsing.
|
||||
|
||||
Tue May 14 18:17:44 2002 Nobuyoshi Nakada <nobu.nokada@softhome.net>
|
||||
|
||||
* win32/Makefile.sub: config.h inlined. and catch up with the
|
||||
|
@ -60,7 +82,7 @@ Tue May 14 03:07:35 2002 Yukihiro Matsumoto <matz@ruby-lang.org>
|
|||
|
||||
* eval.c (rb_clear_cache_by_class): new function.
|
||||
|
||||
* eval.c (set_method_visibility): should have clear cache forq
|
||||
* eval.c (set_method_visibility): should have clear cache for
|
||||
updated visibility.
|
||||
|
||||
Mon May 13 14:38:33 2002 WATANABE Hirofumi <eban@ruby-lang.org>
|
||||
|
|
277
array.c
277
array.c
|
@ -62,14 +62,14 @@ rb_ary_modify(ary)
|
|||
VALUE *ptr;
|
||||
|
||||
rb_ary_modify_check(ary);
|
||||
if (!FL_TEST(ary, ELTS_SHARED)) return;
|
||||
ptr = ALLOC_N(VALUE, RARRAY(ary)->len);
|
||||
FL_UNSET(ary, ELTS_SHARED);
|
||||
RARRAY(ary)->aux.capa = RARRAY(ary)->len;
|
||||
MEMCPY(ptr, RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len);
|
||||
RARRAY(ary)->ptr = ptr;
|
||||
if (FL_TEST(ary, ELTS_SHARED)) {
|
||||
ptr = ALLOC_N(VALUE, RARRAY(ary)->len);
|
||||
FL_UNSET(ary, ELTS_SHARED);
|
||||
RARRAY(ary)->aux.capa = RARRAY(ary)->len;
|
||||
MEMCPY(ptr, RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len);
|
||||
RARRAY(ary)->ptr = ptr;
|
||||
}
|
||||
}
|
||||
|
||||
VALUE
|
||||
rb_ary_freeze(ary)
|
||||
VALUE ary;
|
||||
|
@ -110,7 +110,7 @@ ary_new(klass, len)
|
|||
if (len < 0) {
|
||||
rb_raise(rb_eArgError, "negative array size (or size too big)");
|
||||
}
|
||||
if (len > 0 && len*sizeof(VALUE) <= 0) {
|
||||
if (len > 0 && len * sizeof(VALUE) <= 0) {
|
||||
rb_raise(rb_eArgError, "array size too big");
|
||||
}
|
||||
if (len == 0) len++;
|
||||
|
@ -155,10 +155,7 @@ rb_ary_new3(n, va_alist)
|
|||
VALUE ary;
|
||||
long i;
|
||||
|
||||
if (n < 0) {
|
||||
rb_raise(rb_eIndexError, "negative number of items(%d)", n);
|
||||
}
|
||||
ary = rb_ary_new2(n<ARY_DEFAULT_SIZE?ARY_DEFAULT_SIZE:n);
|
||||
ary = rb_ary_new2(n);
|
||||
|
||||
va_init_list(ar, n);
|
||||
for (i=0; i<n; i++) {
|
||||
|
@ -239,12 +236,12 @@ rb_ary_initialize(argc, argv, ary)
|
|||
if (len < 0) {
|
||||
rb_raise(rb_eArgError, "negative array size");
|
||||
}
|
||||
if (len > 0 && len*sizeof(VALUE) <= 0) {
|
||||
if (len > 0 && len * sizeof(VALUE) <= 0) {
|
||||
rb_raise(rb_eArgError, "array size too big");
|
||||
}
|
||||
if (len > RARRAY(ary)->aux.capa) {
|
||||
RARRAY(ary)->aux.capa = len;
|
||||
REALLOC_N(RARRAY(ary)->ptr, VALUE, RARRAY(ary)->aux.capa);
|
||||
REALLOC_N(RARRAY(ary)->ptr, VALUE, len);
|
||||
}
|
||||
if (rb_block_given_p()) {
|
||||
long i;
|
||||
|
@ -254,7 +251,7 @@ rb_ary_initialize(argc, argv, ary)
|
|||
}
|
||||
for (i=0; i<len; i++) {
|
||||
RARRAY(ary)->ptr[i] = rb_yield(INT2NUM(i));
|
||||
RARRAY(ary)->len = i+1;
|
||||
RARRAY(ary)->len = i + 1;
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -273,7 +270,10 @@ rb_ary_s_create(argc, argv, klass)
|
|||
{
|
||||
VALUE ary = rb_obj_alloc(klass);
|
||||
|
||||
if (argc != 0) {
|
||||
if (argc < 0) {
|
||||
rb_raise(rb_eArgError, "negative number of arguments");
|
||||
}
|
||||
if (argc > 0) {
|
||||
RARRAY(ary)->ptr = ALLOC_N(VALUE, argc);
|
||||
MEMCPY(RARRAY(ary)->ptr, argv, VALUE, argc);
|
||||
}
|
||||
|
@ -293,7 +293,7 @@ rb_ary_store(ary, idx, val)
|
|||
idx += RARRAY(ary)->len;
|
||||
if (idx < 0) {
|
||||
rb_raise(rb_eIndexError, "index %d out of array",
|
||||
idx - RARRAY(ary)->len);
|
||||
idx - RARRAY(ary)->len);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -307,7 +307,7 @@ rb_ary_store(ary, idx, val)
|
|||
}
|
||||
if (idx > RARRAY(ary)->len) {
|
||||
rb_mem_clear(RARRAY(ary)->ptr+RARRAY(ary)->len,
|
||||
idx-RARRAY(ary)->len+1);
|
||||
idx-RARRAY(ary)->len + 1);
|
||||
}
|
||||
|
||||
if (idx >= RARRAY(ary)->len) {
|
||||
|
@ -331,13 +331,11 @@ rb_ary_push_m(argc, argv, ary)
|
|||
VALUE *argv;
|
||||
VALUE ary;
|
||||
{
|
||||
if (argc == 0) {
|
||||
rb_raise(rb_eArgError, "wrong number arguments(at least 1)");
|
||||
if (argc <= 0) {
|
||||
rb_raise(rb_eArgError, "wrong number arguments (at least 1)");
|
||||
}
|
||||
if (argc > 0) {
|
||||
while (argc--) {
|
||||
rb_ary_push(ary, *argv++);
|
||||
}
|
||||
while (argc--) {
|
||||
rb_ary_push(ary, *argv++);
|
||||
}
|
||||
return ary;
|
||||
}
|
||||
|
@ -349,8 +347,8 @@ rb_ary_pop(ary)
|
|||
rb_ary_modify_check(ary);
|
||||
if (RARRAY(ary)->len == 0) return Qnil;
|
||||
if (!FL_TEST(ary, ELTS_SHARED) &&
|
||||
RARRAY(ary)->len * 10 < RARRAY(ary)->aux.capa &&
|
||||
RARRAY(ary)->aux.capa > ARY_DEFAULT_SIZE) {
|
||||
RARRAY(ary)->len * 2 < RARRAY(ary)->aux.capa &&
|
||||
RARRAY(ary)->aux.capa > ARY_DEFAULT_SIZE) {
|
||||
RARRAY(ary)->aux.capa = RARRAY(ary)->len * 2;
|
||||
REALLOC_N(RARRAY(ary)->ptr, VALUE, RARRAY(ary)->aux.capa);
|
||||
}
|
||||
|
@ -361,8 +359,7 @@ static void
|
|||
ary_make_shared(ary)
|
||||
VALUE ary;
|
||||
{
|
||||
if (FL_TEST(ary, ELTS_SHARED)) return;
|
||||
else {
|
||||
if (!FL_TEST(ary, ELTS_SHARED)) {
|
||||
NEWOBJ(shared, struct RArray);
|
||||
OBJSETUP(shared, rb_cArray, T_ARRAY);
|
||||
|
||||
|
@ -400,12 +397,12 @@ rb_ary_unshift(ary, item)
|
|||
if (capa_inc < ARY_DEFAULT_SIZE) {
|
||||
capa_inc = ARY_DEFAULT_SIZE;
|
||||
}
|
||||
RARRAY(ary)->aux.capa+=capa_inc;
|
||||
RARRAY(ary)->aux.capa += capa_inc;
|
||||
REALLOC_N(RARRAY(ary)->ptr, VALUE, RARRAY(ary)->aux.capa);
|
||||
}
|
||||
|
||||
/* sliding items */
|
||||
MEMMOVE(RARRAY(ary)->ptr+1, RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len);
|
||||
MEMMOVE(RARRAY(ary)->ptr + 1, RARRAY(ary)->ptr, VALUE, RARRAY(ary)->len);
|
||||
|
||||
RARRAY(ary)->len++;
|
||||
RARRAY(ary)->ptr[0] = item;
|
||||
|
@ -419,19 +416,19 @@ rb_ary_unshift_m(argc, argv, ary)
|
|||
VALUE *argv;
|
||||
VALUE ary;
|
||||
{
|
||||
if (argc == 0) {
|
||||
rb_raise(rb_eArgError, "wrong number of arguments(at least 1)");
|
||||
long len = RARRAY(ary)->len;
|
||||
|
||||
if (argc <= 0) {
|
||||
rb_raise(rb_eArgError, "wrong number of arguments (at least 1)");
|
||||
}
|
||||
if (argc > 0) {
|
||||
long len = RARRAY(ary)->len;
|
||||
|
||||
/* make rooms by setting the last item */
|
||||
rb_ary_store(ary, len + argc - 1, Qnil);
|
||||
/* make rooms by setting the last item */
|
||||
rb_ary_store(ary, len + argc - 1, Qnil);
|
||||
|
||||
/* sliding items */
|
||||
MEMMOVE(RARRAY(ary)->ptr + argc, RARRAY(ary)->ptr, VALUE, len);
|
||||
MEMCPY(RARRAY(ary)->ptr, argv, VALUE, argc);
|
||||
}
|
||||
/* sliding items */
|
||||
MEMMOVE(RARRAY(ary)->ptr + argc, RARRAY(ary)->ptr, VALUE, len);
|
||||
MEMCPY(RARRAY(ary)->ptr, argv, VALUE, argc);
|
||||
|
||||
return ary;
|
||||
}
|
||||
|
||||
|
@ -464,16 +461,15 @@ rb_ary_subseq(ary, beg, len)
|
|||
|
||||
if (beg + len > RARRAY(ary)->len) {
|
||||
len = RARRAY(ary)->len - beg;
|
||||
}
|
||||
if (len < 0) {
|
||||
len = 0;
|
||||
if (len < 0)
|
||||
len = 0;
|
||||
}
|
||||
klass = rb_obj_class(ary);
|
||||
if (len == 0) return ary_new(klass,0);
|
||||
if (len == 0) return ary_new(klass, 0);
|
||||
|
||||
ary_make_shared(ary);
|
||||
ary2 = rb_obj_alloc(klass);
|
||||
RARRAY(ary2)->ptr = RARRAY(ary)->ptr+beg;
|
||||
RARRAY(ary2)->ptr = RARRAY(ary)->ptr + beg;
|
||||
RARRAY(ary2)->len = len;
|
||||
RARRAY(ary2)->aux.shared = RARRAY(ary)->aux.shared;
|
||||
FL_SET(ary2, ELTS_SHARED);
|
||||
|
@ -506,19 +502,17 @@ rb_ary_aref(argc, argv, ary)
|
|||
if (FIXNUM_P(arg)) {
|
||||
return rb_ary_entry(ary, FIX2LONG(arg));
|
||||
}
|
||||
else if (TYPE(arg) == T_BIGNUM) {
|
||||
if (TYPE(arg) == T_BIGNUM) {
|
||||
rb_raise(rb_eIndexError, "index too big");
|
||||
}
|
||||
else {
|
||||
/* check if idx is Range */
|
||||
switch (rb_range_beg_len(arg, &beg, &len, RARRAY(ary)->len, 0)) {
|
||||
case Qfalse:
|
||||
break;
|
||||
case Qnil:
|
||||
return Qnil;
|
||||
default:
|
||||
return rb_ary_subseq(ary, beg, len);
|
||||
}
|
||||
/* check if idx is Range */
|
||||
switch (rb_range_beg_len(arg, &beg, &len, RARRAY(ary)->len, 0)) {
|
||||
case Qfalse:
|
||||
break;
|
||||
case Qnil:
|
||||
return Qnil;
|
||||
default:
|
||||
return rb_ary_subseq(ary, beg, len);
|
||||
}
|
||||
return rb_ary_entry(ary, NUM2LONG(arg));
|
||||
}
|
||||
|
@ -585,7 +579,7 @@ rb_ary_index(ary, val)
|
|||
|
||||
for (i=0; i<RARRAY(ary)->len; i++) {
|
||||
if (rb_equal(RARRAY(ary)->ptr[i], val))
|
||||
return INT2NUM(i);
|
||||
return LONG2NUM(i);
|
||||
}
|
||||
return Qnil;
|
||||
}
|
||||
|
@ -648,13 +642,13 @@ rb_ary_update(ary, beg, len, rpl)
|
|||
rpl = rb_ary_to_ary(rpl);
|
||||
rlen = RARRAY(rpl)->len;
|
||||
|
||||
if (len < 0) rb_raise(rb_eIndexError, "negative length %d", len);
|
||||
if (len < 0) rb_raise(rb_eIndexError, "negative length (%d)", len);
|
||||
if (beg < 0) {
|
||||
beg += RARRAY(ary)->len;
|
||||
}
|
||||
if (beg < 0) {
|
||||
beg -= RARRAY(ary)->len;
|
||||
rb_raise(rb_eIndexError, "index %d out of array", beg);
|
||||
if (beg < 0) {
|
||||
beg -= RARRAY(ary)->len;
|
||||
rb_raise(rb_eIndexError, "index %d out of array", beg);
|
||||
}
|
||||
}
|
||||
if (beg + len > RARRAY(ary)->len) {
|
||||
len = RARRAY(ary)->len - beg;
|
||||
|
@ -664,11 +658,11 @@ rb_ary_update(ary, beg, len, rpl)
|
|||
if (beg >= RARRAY(ary)->len) {
|
||||
len = beg + rlen;
|
||||
if (len >= RARRAY(ary)->aux.capa) {
|
||||
RARRAY(ary)->aux.capa=len;
|
||||
REALLOC_N(RARRAY(ary)->ptr, VALUE, RARRAY(ary)->aux.capa);
|
||||
RARRAY(ary)->aux.capa = len;
|
||||
REALLOC_N(RARRAY(ary)->ptr, VALUE, len);
|
||||
}
|
||||
rb_mem_clear(RARRAY(ary)->ptr+RARRAY(ary)->len, beg-RARRAY(ary)->len);
|
||||
MEMCPY(RARRAY(ary)->ptr+beg, RARRAY(rpl)->ptr, VALUE, rlen);
|
||||
rb_mem_clear(RARRAY(ary)->ptr + RARRAY(ary)->len, beg - RARRAY(ary)->len);
|
||||
MEMCPY(RARRAY(ary)->ptr + beg, RARRAY(rpl)->ptr, VALUE, rlen);
|
||||
RARRAY(ary)->len = len;
|
||||
}
|
||||
else {
|
||||
|
@ -681,15 +675,15 @@ rb_ary_update(ary, beg, len, rpl)
|
|||
alen = RARRAY(ary)->len + rlen - len;
|
||||
if (alen >= RARRAY(ary)->aux.capa) {
|
||||
RARRAY(ary)->aux.capa = alen;
|
||||
REALLOC_N(RARRAY(ary)->ptr, VALUE, RARRAY(ary)->aux.capa);
|
||||
REALLOC_N(RARRAY(ary)->ptr, VALUE, alen);
|
||||
}
|
||||
|
||||
if (len != rlen) {
|
||||
MEMMOVE(RARRAY(ary)->ptr+beg+rlen, RARRAY(ary)->ptr+beg+len,
|
||||
VALUE, RARRAY(ary)->len-(beg+len));
|
||||
MEMMOVE(RARRAY(ary)->ptr + beg + rlen, RARRAY(ary)->ptr + beg + len,
|
||||
VALUE, RARRAY(ary)->len - (beg + len));
|
||||
RARRAY(ary)->len = alen;
|
||||
}
|
||||
MEMMOVE(RARRAY(ary)->ptr+beg, RARRAY(rpl)->ptr, VALUE, rlen);
|
||||
MEMMOVE(RARRAY(ary)->ptr + beg, RARRAY(rpl)->ptr, VALUE, rlen);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -706,23 +700,23 @@ rb_ary_aset(argc, argv, ary)
|
|||
return argv[2];
|
||||
}
|
||||
if (argc != 2) {
|
||||
rb_raise(rb_eArgError, "wrong number of arguments(%d for 2)", argc);
|
||||
rb_raise(rb_eArgError, "wrong number of arguments (%d for 2)", argc);
|
||||
}
|
||||
if (FIXNUM_P(argv[0])) {
|
||||
offset = FIX2LONG(argv[0]);
|
||||
goto fixnum;
|
||||
}
|
||||
else if (rb_range_beg_len(argv[0], &beg, &len, RARRAY(ary)->len, 1)) {
|
||||
if (TYPE(argv[0]) == T_BIGNUM) {
|
||||
rb_raise(rb_eIndexError, "index too big");
|
||||
}
|
||||
if (rb_range_beg_len(argv[0], &beg, &len, RARRAY(ary)->len, 1)) {
|
||||
/* check if idx is Range */
|
||||
rb_ary_update(ary, beg, len, argv[1]);
|
||||
return argv[1];
|
||||
}
|
||||
if (TYPE(argv[0]) == T_BIGNUM) {
|
||||
rb_raise(rb_eIndexError, "index too big");
|
||||
}
|
||||
|
||||
offset = NUM2LONG(argv[0]);
|
||||
fixnum:
|
||||
fixnum:
|
||||
rb_ary_store(ary, offset, argv[1]);
|
||||
return argv[1];
|
||||
}
|
||||
|
@ -736,7 +730,7 @@ rb_ary_insert(argc, argv, ary)
|
|||
long pos;
|
||||
|
||||
if (argc < 2) {
|
||||
rb_raise(rb_eArgError, "wrong number of arguments(at least 2)");
|
||||
rb_raise(rb_eArgError, "wrong number of arguments (at least 2)");
|
||||
}
|
||||
pos = NUM2LONG(argv[0]);
|
||||
if (pos == -1) {
|
||||
|
@ -746,7 +740,7 @@ rb_ary_insert(argc, argv, ary)
|
|||
pos++;
|
||||
}
|
||||
|
||||
rb_ary_update(ary, pos, 0, rb_ary_new4(argc-1, argv+1));
|
||||
rb_ary_update(ary, pos, 0, rb_ary_new4(argc - 1, argv + 1));
|
||||
return ary;
|
||||
}
|
||||
|
||||
|
@ -861,15 +855,13 @@ VALUE
|
|||
rb_ary_join(ary, sep)
|
||||
VALUE ary, sep;
|
||||
{
|
||||
long len, i;
|
||||
int taint = 0;
|
||||
long len = 1, i;
|
||||
int taint = Qfalse;
|
||||
VALUE result, tmp;
|
||||
|
||||
if (RARRAY(ary)->len == 0) return rb_str_new(0, 0);
|
||||
if (OBJ_TAINTED(ary)) taint = 1;
|
||||
if (OBJ_TAINTED(sep)) taint = 1;
|
||||
if (OBJ_TAINTED(ary) || OBJ_TAINTED(sep)) taint = Qtrue;
|
||||
|
||||
len = 1;
|
||||
for (i=0; i<RARRAY(ary)->len; i++) {
|
||||
if (TYPE(RARRAY(ary)->ptr[i]) == T_STRING) {
|
||||
len += RSTRING(RARRAY(ary)->ptr[i])->len;
|
||||
|
@ -906,7 +898,7 @@ rb_ary_join(ary, sep)
|
|||
if (i > 0 && !NIL_P(sep))
|
||||
rb_str_buf_append(result, sep);
|
||||
rb_str_buf_append(result, tmp);
|
||||
if (OBJ_TAINTED(tmp)) taint = 1;
|
||||
if (OBJ_TAINTED(tmp)) taint = Qtrue;
|
||||
}
|
||||
|
||||
if (taint) OBJ_TAINT(result);
|
||||
|
@ -923,6 +915,7 @@ rb_ary_join_m(argc, argv, ary)
|
|||
|
||||
rb_scan_args(argc, argv, "01", &sep);
|
||||
if (NIL_P(sep)) sep = rb_output_fs;
|
||||
|
||||
return rb_ary_join(ary, sep);
|
||||
}
|
||||
|
||||
|
@ -930,12 +923,9 @@ VALUE
|
|||
rb_ary_to_s(ary)
|
||||
VALUE ary;
|
||||
{
|
||||
VALUE str, sep;
|
||||
|
||||
if (RARRAY(ary)->len == 0) return rb_str_new(0, 0);
|
||||
sep = rb_output_fs;
|
||||
str = rb_ary_join(ary, sep);
|
||||
return str;
|
||||
|
||||
return rb_ary_join(ary, rb_output_fs);
|
||||
}
|
||||
|
||||
static ID inspect_key;
|
||||
|
@ -972,9 +962,6 @@ rb_protect_inspect(func, obj, arg)
|
|||
VALUE inspect_tbl;
|
||||
VALUE id;
|
||||
|
||||
if (!inspect_key) {
|
||||
inspect_key = rb_intern("__inspect_key__");
|
||||
}
|
||||
inspect_tbl = rb_thread_local_aref(rb_thread_current(), inspect_key);
|
||||
if (NIL_P(inspect_tbl)) {
|
||||
inspect_tbl = rb_ary_new();
|
||||
|
@ -998,9 +985,6 @@ rb_inspecting_p(obj)
|
|||
{
|
||||
VALUE inspect_tbl;
|
||||
|
||||
if (!inspect_key) {
|
||||
inspect_key = rb_intern("__inspect_key__");
|
||||
}
|
||||
inspect_tbl = rb_thread_local_aref(rb_thread_current(), inspect_key);
|
||||
if (NIL_P(inspect_tbl)) return Qfalse;
|
||||
return rb_ary_includes(inspect_tbl, rb_obj_id(obj));
|
||||
|
@ -1011,13 +995,13 @@ inspect_ary(ary)
|
|||
VALUE ary;
|
||||
{
|
||||
int tainted = OBJ_TAINTED(ary);
|
||||
long i = 0;
|
||||
long i;
|
||||
VALUE s, str;
|
||||
|
||||
str = rb_str_buf_new2("[");
|
||||
for (i=0; i<RARRAY(ary)->len; i++) {
|
||||
s = rb_inspect(RARRAY(ary)->ptr[i]);
|
||||
if (OBJ_TAINTED(s)) tainted = 1;
|
||||
if (OBJ_TAINTED(s)) tainted = Qtrue;
|
||||
if (i > 0) rb_str_buf_cat2(str, ", ");
|
||||
rb_str_buf_append(str, s);
|
||||
}
|
||||
|
@ -1049,8 +1033,8 @@ rb_ary_reverse(ary)
|
|||
VALUE *p1, *p2;
|
||||
VALUE tmp;
|
||||
|
||||
if (RARRAY(ary)->len <= 1) return ary;
|
||||
rb_ary_modify(ary);
|
||||
if (RARRAY(ary)->len <= 1) return ary;
|
||||
|
||||
p1 = RARRAY(ary)->ptr;
|
||||
p2 = p1 + RARRAY(ary)->len - 1; /* points last item */
|
||||
|
@ -1083,13 +1067,13 @@ int
|
|||
rb_cmpint(cmp)
|
||||
VALUE cmp;
|
||||
{
|
||||
if (FIXNUM_P(cmp)) return NUM2LONG(cmp);
|
||||
if (FIXNUM_P(cmp)) return FIX2INT(cmp);
|
||||
if (TYPE(cmp) == T_BIGNUM) {
|
||||
if (RBIGNUM(cmp)->sign) return 1;
|
||||
return -1;
|
||||
}
|
||||
if (rb_funcall(cmp, '>', 1, INT2FIX(0))) return 1;
|
||||
if (rb_funcall(cmp, '<', 1, INT2FIX(0))) return -1;
|
||||
if (RTEST(rb_funcall(cmp, '>', 1, INT2FIX(0)))) return 1;
|
||||
if (RTEST(rb_funcall(cmp, '<', 1, INT2FIX(0)))) return -1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1107,10 +1091,10 @@ sort_2(a, b)
|
|||
{
|
||||
VALUE retval;
|
||||
|
||||
if (FIXNUM_P(*a)) {
|
||||
if (FIXNUM_P(*b)) return *a - *b;
|
||||
if (FIXNUM_P(*a) && FIXNUM_P(*b)) {
|
||||
return *a - *b;
|
||||
}
|
||||
else if (TYPE(*a) == T_STRING && TYPE(*b) == T_STRING) {
|
||||
if (TYPE(*a) == T_STRING && TYPE(*b) == T_STRING) {
|
||||
return rb_str_cmp(*a, *b);
|
||||
}
|
||||
|
||||
|
@ -1199,7 +1183,7 @@ rb_ary_select(argc, argv, ary)
|
|||
|
||||
if (rb_block_given_p()) {
|
||||
if (argc > 0) {
|
||||
rb_raise(rb_eArgError, "wrong number arguments(%d for 0)", argc);
|
||||
rb_raise(rb_eArgError, "wrong number arguments (%d for 0)", argc);
|
||||
}
|
||||
for (i = 0; i < RARRAY(ary)->len; i++) {
|
||||
if (RTEST(rb_yield(RARRAY(ary)->ptr[i]))) {
|
||||
|
@ -1236,8 +1220,12 @@ rb_ary_delete(ary, item)
|
|||
}
|
||||
return Qnil;
|
||||
}
|
||||
else {
|
||||
RARRAY(ary)->len = i2;
|
||||
|
||||
RARRAY(ary)->len = i2;
|
||||
if (i2 * 2 < RARRAY(ary)->aux.capa &&
|
||||
RARRAY(ary)->aux.capa > ARY_DEFAULT_SIZE) {
|
||||
RARRAY(ary)->aux.capa = i2 * 2;
|
||||
REALLOC_N(RARRAY(ary)->ptr, VALUE, RARRAY(ary)->aux.capa);
|
||||
}
|
||||
|
||||
return item;
|
||||
|
@ -1249,12 +1237,14 @@ rb_ary_delete_at(ary, pos)
|
|||
long pos;
|
||||
{
|
||||
long i, len = RARRAY(ary)->len;
|
||||
VALUE del = Qnil;
|
||||
VALUE del;
|
||||
|
||||
rb_ary_modify(ary);
|
||||
if (pos >= len) return Qnil;
|
||||
if (pos < 0) pos += len;
|
||||
if (pos < 0) return Qnil;
|
||||
if (pos < 0) {
|
||||
pos += len;
|
||||
if (pos < 0) return Qnil;
|
||||
}
|
||||
|
||||
del = RARRAY(ary)->ptr[pos];
|
||||
for (i = pos + 1; i < len; i++, pos++) {
|
||||
|
@ -1279,13 +1269,13 @@ rb_ary_slice_bang(argc, argv, ary)
|
|||
VALUE ary;
|
||||
{
|
||||
VALUE arg1, arg2;
|
||||
long pos, len, i;
|
||||
long pos, len;
|
||||
|
||||
rb_ary_modify(ary);
|
||||
if (rb_scan_args(argc, argv, "11", &arg1, &arg2) == 2) {
|
||||
pos = NUM2LONG(arg1);
|
||||
len = NUM2LONG(arg2);
|
||||
delete_pos_len:
|
||||
delete_pos_len:
|
||||
if (pos < 0) {
|
||||
pos = RARRAY(ary)->len + pos;
|
||||
}
|
||||
|
@ -1298,18 +1288,7 @@ rb_ary_slice_bang(argc, argv, ary)
|
|||
goto delete_pos_len;
|
||||
}
|
||||
|
||||
pos = NUM2LONG(arg1);
|
||||
len = RARRAY(ary)->len;
|
||||
|
||||
if (pos >= len) return Qnil;
|
||||
if (pos < 0) pos += len;
|
||||
if (pos < 0) return Qnil;
|
||||
|
||||
arg2 = RARRAY(ary)->ptr[pos];
|
||||
for (i = pos + 1; i < len; i++, pos++) {
|
||||
RARRAY(ary)->ptr[pos] = RARRAY(ary)->ptr[i];
|
||||
}
|
||||
RARRAY(ary)->len = pos;
|
||||
rb_ary_delete_at(ary, NUM2LONG(arg1));
|
||||
|
||||
return arg2;
|
||||
}
|
||||
|
@ -1367,7 +1346,7 @@ rb_ary_clear(ary)
|
|||
{
|
||||
rb_ary_modify(ary);
|
||||
RARRAY(ary)->len = 0;
|
||||
if (ARY_DEFAULT_SIZE*3 < RARRAY(ary)->aux.capa) {
|
||||
if (ARY_DEFAULT_SIZE * 2 < RARRAY(ary)->aux.capa) {
|
||||
RARRAY(ary)->aux.capa = ARY_DEFAULT_SIZE * 2;
|
||||
REALLOC_N(RARRAY(ary)->ptr, VALUE, RARRAY(ary)->aux.capa);
|
||||
}
|
||||
|
@ -1404,12 +1383,12 @@ rb_ary_fill(argc, argv, ary)
|
|||
}
|
||||
/* fall through */
|
||||
case 3:
|
||||
beg = NIL_P(arg1)?0:NUM2LONG(arg1);
|
||||
beg = NIL_P(arg1) ? 0 : NUM2LONG(arg1);
|
||||
if (beg < 0) {
|
||||
beg = RARRAY(ary)->len + beg;
|
||||
if (beg < 0) beg = 0;
|
||||
}
|
||||
len = NIL_P(arg2)?RARRAY(ary)->len - beg:NUM2LONG(arg2);
|
||||
len = NIL_P(arg2) ? RARRAY(ary)->len - beg : NUM2LONG(arg2);
|
||||
break;
|
||||
}
|
||||
rb_ary_modify(ary);
|
||||
|
@ -1417,19 +1396,19 @@ rb_ary_fill(argc, argv, ary)
|
|||
if (end > RARRAY(ary)->len) {
|
||||
if (end >= RARRAY(ary)->aux.capa) {
|
||||
RARRAY(ary)->aux.capa = end;
|
||||
REALLOC_N(RARRAY(ary)->ptr, VALUE, RARRAY(ary)->aux.capa);
|
||||
REALLOC_N(RARRAY(ary)->ptr, VALUE, end);
|
||||
}
|
||||
if (beg > RARRAY(ary)->len) {
|
||||
rb_mem_clear(RARRAY(ary)->ptr+RARRAY(ary)->len,end-RARRAY(ary)->len);
|
||||
rb_mem_clear(RARRAY(ary)->ptr + RARRAY(ary)->len, end - RARRAY(ary)->len);
|
||||
}
|
||||
RARRAY(ary)->len = end;
|
||||
}
|
||||
p = RARRAY(ary)->ptr + beg; pend = p + len;
|
||||
p = RARRAY(ary)->ptr + beg;
|
||||
pend = p + len;
|
||||
|
||||
if (block_p) {
|
||||
while (p < pend) {
|
||||
*p++ = rb_yield(INT2NUM(beg));
|
||||
beg++;
|
||||
*p++ = rb_yield(INT2NUM(beg++));
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -1445,12 +1424,14 @@ rb_ary_plus(x, y)
|
|||
VALUE x, y;
|
||||
{
|
||||
VALUE z;
|
||||
long len;
|
||||
|
||||
y = to_ary(y);
|
||||
z = rb_ary_new2(RARRAY(x)->len + RARRAY(y)->len);
|
||||
len = RARRAY(x)->len + RARRAY(y)->len;
|
||||
z = rb_ary_new2(len);
|
||||
MEMCPY(RARRAY(z)->ptr, RARRAY(x)->ptr, VALUE, RARRAY(x)->len);
|
||||
MEMCPY(RARRAY(z)->ptr+RARRAY(x)->len, RARRAY(y)->ptr, VALUE, RARRAY(y)->len);
|
||||
RARRAY(z)->len = RARRAY(x)->len + RARRAY(y)->len;
|
||||
MEMCPY(RARRAY(z)->ptr + RARRAY(x)->len, RARRAY(y)->ptr, VALUE, RARRAY(y)->len);
|
||||
RARRAY(z)->len = len;
|
||||
return z;
|
||||
}
|
||||
|
||||
|
@ -1496,16 +1477,17 @@ rb_ary_times(ary, times)
|
|||
|
||||
VALUE
|
||||
rb_ary_assoc(ary, key)
|
||||
VALUE ary;
|
||||
VALUE key;
|
||||
VALUE ary, key;
|
||||
{
|
||||
VALUE *p, *pend;
|
||||
|
||||
p = RARRAY(ary)->ptr; pend = p + RARRAY(ary)->len;
|
||||
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))
|
||||
if (TYPE(*p) == T_ARRAY &&
|
||||
RARRAY(*p)->len > 0 &&
|
||||
rb_equal(RARRAY(*p)->ptr[0], key))
|
||||
return *p;
|
||||
p++;
|
||||
}
|
||||
|
@ -1519,7 +1501,9 @@ rb_ary_rassoc(ary, value)
|
|||
{
|
||||
VALUE *p, *pend;
|
||||
|
||||
p = RARRAY(ary)->ptr; pend = p + RARRAY(ary)->len;
|
||||
p = RARRAY(ary)->ptr;
|
||||
pend = p + RARRAY(ary)->len;
|
||||
|
||||
while (p < pend) {
|
||||
if (TYPE(*p) == T_ARRAY
|
||||
&& RARRAY(*p)->len > 1
|
||||
|
@ -1571,11 +1555,11 @@ rb_ary_hash(ary)
|
|||
|
||||
h = RARRAY(ary)->len;
|
||||
for (i=0; i<RARRAY(ary)->len; i++) {
|
||||
h = (h<<1) | (h<0 ? 1 : 0);
|
||||
h = (h << 1) | (h<0 ? 1 : 0);
|
||||
n = rb_hash(RARRAY(ary)->ptr[i]);
|
||||
h ^= NUM2LONG(n);
|
||||
}
|
||||
return INT2FIX(h);
|
||||
return LONG2FIX(h);
|
||||
}
|
||||
|
||||
VALUE
|
||||
|
@ -1746,6 +1730,7 @@ rb_ary_compact_bang(ary)
|
|||
rb_ary_modify(ary);
|
||||
p = t = RARRAY(ary)->ptr;
|
||||
end = p + RARRAY(ary)->len;
|
||||
|
||||
while (t < end) {
|
||||
if (NIL_P(*t)) t++;
|
||||
else *p++ = *t++;
|
||||
|
@ -1777,6 +1762,7 @@ rb_ary_nitems(ary)
|
|||
|
||||
p = RARRAY(ary)->ptr;
|
||||
pend = p + RARRAY(ary)->len;
|
||||
|
||||
while (p < pend) {
|
||||
if (!NIL_P(*p)) n++;
|
||||
p++;
|
||||
|
@ -1784,7 +1770,7 @@ rb_ary_nitems(ary)
|
|||
return INT2NUM(n);
|
||||
}
|
||||
|
||||
static int
|
||||
static long
|
||||
flatten(ary, idx, ary2, memo)
|
||||
VALUE ary;
|
||||
long idx;
|
||||
|
@ -1934,4 +1920,5 @@ Init_Array()
|
|||
rb_define_method(rb_cArray, "nitems", rb_ary_nitems, 0);
|
||||
|
||||
id_cmp = rb_intern("<=>");
|
||||
inspect_key = rb_intern("__inspect_key__");
|
||||
}
|
||||
|
|
51
compar.c
51
compar.c
|
@ -16,33 +16,15 @@ VALUE rb_mComparable;
|
|||
|
||||
static ID cmp;
|
||||
|
||||
static VALUE
|
||||
cmp_eq(a)
|
||||
VALUE *a;
|
||||
{
|
||||
VALUE c = rb_funcall(a[0], cmp, 1, a[1]);
|
||||
int t = NUM2INT(c);
|
||||
|
||||
if (t == 0) return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
cmp_failed()
|
||||
{
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
cmp_equal(x, y)
|
||||
VALUE x, y;
|
||||
{
|
||||
VALUE a[2];
|
||||
VALUE c = rb_funcall(x, cmp, 1, y);
|
||||
|
||||
if (x == y) return Qtrue;
|
||||
|
||||
a[0] = x; a[1] = y;
|
||||
return rb_rescue(cmp_eq, (VALUE)a, cmp_failed, 0);
|
||||
if (NIL_P(c)) return Qnil;
|
||||
if (NUM2LONG(c) == 0) return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -50,9 +32,9 @@ cmp_gt(x, y)
|
|||
VALUE x, y;
|
||||
{
|
||||
VALUE c = rb_funcall(x, cmp, 1, y);
|
||||
int t = NUM2INT(c);
|
||||
|
||||
if (t > 0) return Qtrue;
|
||||
if (NIL_P(c)) return Qfalse;
|
||||
if (NUM2LONG(c) > 0) return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
|
@ -61,9 +43,9 @@ cmp_ge(x, y)
|
|||
VALUE x, y;
|
||||
{
|
||||
VALUE c = rb_funcall(x, cmp, 1, y);
|
||||
int t = NUM2INT(c);
|
||||
|
||||
if (t >= 0) return Qtrue;
|
||||
if (NIL_P(c)) return Qfalse;
|
||||
if (NUM2LONG(c) >= 0) return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
|
@ -72,9 +54,9 @@ cmp_lt(x, y)
|
|||
VALUE x, y;
|
||||
{
|
||||
VALUE c = rb_funcall(x, cmp, 1, y);
|
||||
int t = NUM2INT(c);
|
||||
|
||||
if (t < 0) return Qtrue;
|
||||
if (NIL_P(c)) return Qfalse;
|
||||
if (NUM2LONG(c) < 0) return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
|
@ -83,9 +65,9 @@ cmp_le(x, y)
|
|||
VALUE x, y;
|
||||
{
|
||||
VALUE c = rb_funcall(x, cmp, 1, y);
|
||||
int t = NUM2INT(c);
|
||||
|
||||
if (t <= 0) return Qtrue;
|
||||
if (NIL_P(c)) return Qfalse;
|
||||
if (NUM2LONG(c) <= 0) return Qtrue;
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
|
@ -94,12 +76,13 @@ cmp_between(x, min, max)
|
|||
VALUE x, min, max;
|
||||
{
|
||||
VALUE c = rb_funcall(x, cmp, 1, min);
|
||||
long t = NUM2LONG(c);
|
||||
if (t < 0) return Qfalse;
|
||||
|
||||
if (NIL_P(c)) return Qfalse;
|
||||
if (NUM2LONG(c) < 0) return Qfalse;
|
||||
|
||||
c = rb_funcall(x, cmp, 1, max);
|
||||
t = NUM2LONG(c);
|
||||
if (t > 0) return Qfalse;
|
||||
if (NIL_P(c)) return Qfalse;
|
||||
if (NUM2LONG(c) > 0) return Qfalse;
|
||||
return Qtrue;
|
||||
}
|
||||
|
||||
|
|
7
eval.c
7
eval.c
|
@ -7813,8 +7813,13 @@ rb_thread_schedule()
|
|||
|
||||
n = select(max+1, &readfds, &writefds, &exceptfds, delay_ptr);
|
||||
if (n < 0) {
|
||||
int e = errno;
|
||||
|
||||
if (rb_trap_pending) rb_trap_exec();
|
||||
if (errno == EINTR) goto again;
|
||||
if (e == EINTR) goto again;
|
||||
#ifdef ERESTART
|
||||
if (e == ERESTART) goto again;
|
||||
#endif
|
||||
FOREACH_THREAD_FROM(curr, th) {
|
||||
if (th->wait_for & WAIT_SELECT) {
|
||||
int v = 0;
|
||||
|
|
13
hash.c
13
hash.c
|
@ -55,6 +55,19 @@ eql(args)
|
|||
return (VALUE)rb_eql(args[0], args[1]);
|
||||
}
|
||||
|
||||
static VALUE
|
||||
eql_failed()
|
||||
{
|
||||
return Qfalse;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
any_eql(args)
|
||||
VALUE *args;
|
||||
{
|
||||
return rb_rescue(eql, (VALUE)args, eql_failed, 0);
|
||||
}
|
||||
|
||||
static int
|
||||
rb_any_cmp(a, b)
|
||||
VALUE a, b;
|
||||
|
|
4
object.c
4
object.c
|
@ -604,8 +604,7 @@ rb_mod_cmp(mod, arg)
|
|||
return INT2FIX(1);
|
||||
arg = RCLASS(arg)->super;
|
||||
}
|
||||
rb_raise(rb_eArgError, "non related class/module");
|
||||
return Qnil; /* not reached */
|
||||
return Qnil;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
|
@ -1308,6 +1307,7 @@ Init_Object()
|
|||
rb_define_method(rb_cSymbol, "intern", sym_intern, 0);
|
||||
|
||||
rb_define_method(rb_cModule, "===", rb_mod_eqq, 1);
|
||||
rb_define_method(rb_cModule, "==", rb_obj_equal, 1);
|
||||
rb_define_method(rb_cModule, "<=>", rb_mod_cmp, 1);
|
||||
rb_define_method(rb_cModule, "<", rb_mod_lt, 1);
|
||||
rb_define_method(rb_cModule, "<=", rb_mod_le, 1);
|
||||
|
|
26
pack.c
26
pack.c
|
@ -406,6 +406,7 @@ pack_pack(ary, fmt)
|
|||
StringValue(from);
|
||||
ptr = RSTRING(from)->ptr;
|
||||
plen = RSTRING(from)->len;
|
||||
OBJ_INFECT(res, from);
|
||||
}
|
||||
|
||||
if (p[-1] == '*')
|
||||
|
@ -1052,6 +1053,18 @@ hex2num(c)
|
|||
|
||||
#define PACK_ITEM_ADJUST() while (tmp--) rb_ary_push(ary, Qnil)
|
||||
|
||||
static VALUE
|
||||
infected_str_new(ptr, len, str)
|
||||
const char *ptr;
|
||||
long len;
|
||||
VALUE str;
|
||||
{
|
||||
VALUE s = rb_str_new(ptr, len);
|
||||
|
||||
OBJ_INFECT(s, str);
|
||||
return s;
|
||||
}
|
||||
|
||||
static VALUE
|
||||
pack_unpack(str, fmt)
|
||||
VALUE str, fmt;
|
||||
|
@ -1130,7 +1143,7 @@ pack_unpack(str, fmt)
|
|||
if (*t != ' ' && *t != '\0') break;
|
||||
t--; len--;
|
||||
}
|
||||
rb_ary_push(ary, rb_str_new(s, len));
|
||||
rb_ary_push(ary, infected_str_new(s, len, str));
|
||||
s += end;
|
||||
}
|
||||
break;
|
||||
|
@ -1145,14 +1158,14 @@ pack_unpack(str, fmt)
|
|||
if (*t) break;
|
||||
t--; len--;
|
||||
}
|
||||
rb_ary_push(ary, rb_str_new(s, len));
|
||||
rb_ary_push(ary, infected_str_new(s, len, str));
|
||||
s += end;
|
||||
}
|
||||
break;
|
||||
|
||||
case 'a':
|
||||
if (len > send - s) len = send - s;
|
||||
rb_ary_push(ary, rb_str_new(s, len));
|
||||
rb_ary_push(ary, infected_str_new(s, len, str));
|
||||
s += len;
|
||||
break;
|
||||
|
||||
|
@ -1478,7 +1491,7 @@ pack_unpack(str, fmt)
|
|||
|
||||
case 'u':
|
||||
{
|
||||
VALUE str = rb_str_new(0, (send - s)*3/4);
|
||||
VALUE str = infected_str_new(0, (send - s)*3/4, str);
|
||||
char *ptr = RSTRING(str)->ptr;
|
||||
int total = 0;
|
||||
|
||||
|
@ -1534,7 +1547,7 @@ pack_unpack(str, fmt)
|
|||
|
||||
case 'm':
|
||||
{
|
||||
VALUE str = rb_str_new(0, (send - s)*3/4);
|
||||
VALUE str = infected_str_new(0, (send - s)*3/4, str);
|
||||
char *ptr = RSTRING(str)->ptr;
|
||||
int a,b,c,d;
|
||||
static int first = 1;
|
||||
|
@ -1577,7 +1590,7 @@ pack_unpack(str, fmt)
|
|||
|
||||
case 'M':
|
||||
{
|
||||
VALUE str = rb_str_new(0, send - s);
|
||||
VALUE str = infected_str_new(0, send - s, str);
|
||||
char *ptr = RSTRING(str)->ptr;
|
||||
int c1, c2;
|
||||
|
||||
|
@ -1686,6 +1699,7 @@ pack_unpack(str, fmt)
|
|||
rb_raise(rb_eArgError, "non associated pointer");
|
||||
}
|
||||
tmp = rb_str_new2(t);
|
||||
OBJ_INFECT(tmp, str);
|
||||
}
|
||||
else {
|
||||
tmp = Qnil;
|
||||
|
|
2
regex.c
2
regex.c
|
@ -1050,7 +1050,7 @@ calculate_must_string(start, end)
|
|||
p += mcnt;
|
||||
mcnt = EXTRACT_UNSIGNED_AND_INCR(p);
|
||||
while (mcnt--) {
|
||||
p += 4;
|
||||
p += 8;
|
||||
}
|
||||
break;
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
#define RUBY_VERSION "1.7.2"
|
||||
#define RUBY_RELEASE_DATE "2002-05-20"
|
||||
#define RUBY_RELEASE_DATE "2002-05-21"
|
||||
#define RUBY_VERSION_CODE 172
|
||||
#define RUBY_RELEASE_CODE 20020520
|
||||
#define RUBY_RELEASE_CODE 20020521
|
||||
|
|
Loading…
Reference in a new issue