diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | include/ruby/intern.h | 1 | ||||
-rw-r--r-- | insns.def | 8 | ||||
-rw-r--r-- | string.c | 2 |
4 files changed, 12 insertions, 5 deletions
@@ -1,3 +1,9 @@ +Sat Aug 25 17:52:06 2007 Koichi Sasada <ko1@atdot.net> + + * string.c, include/ruby/intern.h: export rb_str_length(). + + * insns.def: use rb_str_lengt() in opt_length. + Sat Aug 25 17:48:51 2007 Koichi Sasada <ko1@atdot.net> * cont.c: rename FIBER_STACK_SIZE to FIBER_VM_STACK_SIZE. diff --git a/include/ruby/intern.h b/include/ruby/intern.h index ae231c7d91..ed16c73d97 100644 --- a/include/ruby/intern.h +++ b/include/ruby/intern.h @@ -520,6 +520,7 @@ VALUE rb_str_associated(VALUE); void rb_str_setter(VALUE, ID, VALUE*); VALUE rb_str_intern(VALUE); VALUE rb_sym_to_s(VALUE); +VALUE rb_str_length(VALUE); /* struct.c */ VALUE rb_struct_new(VALUE, ...); VALUE rb_struct_define(const char*, ...); @@ -1951,11 +1951,11 @@ opt_length { if (!SPECIAL_CONST_P(recv) && BASIC_OP_UNREDEFINED_P(BOP_LENGTH)) { - if (HEAP_CLASS_OF(recv) == rb_cArray) { - val = LONG2NUM(RARRAY_LEN(recv)); + if (HEAP_CLASS_OF(recv) == rb_cString) { + val = rb_str_length(recv); } - else if (HEAP_CLASS_OF(recv) == rb_cString) { - val = LONG2NUM(RSTRING_LEN(recv)); + else if (HEAP_CLASS_OF(recv) == rb_cArray) { + val = LONG2NUM(RARRAY_LEN(recv)); } else if (HEAP_CLASS_OF(recv) == rb_cHash) { val = INT2FIX(RHASH(recv)->tbl->num_entries); @@ -421,7 +421,7 @@ str_strlen(VALUE str, rb_encoding *enc) * Returns the character length of <i>str</i>. */ -static VALUE +VALUE rb_str_length(VALUE str) { int len; |