diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | include/ruby/ruby.h | 7 |
2 files changed, 9 insertions, 2 deletions
@@ -1,4 +1,6 @@ -Fri Oct 30 04:44:01 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> +Fri Oct 30 04:47:26 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * include/ruby/ruby.h (RSTRING_END): trivial optimization. * string.c (rb_str_sub_bang): trivial optimization. diff --git a/include/ruby/ruby.h b/include/ruby/ruby.h index 19f146e4ad..55836a8fd4 100644 --- a/include/ruby/ruby.h +++ b/include/ruby/ruby.h @@ -619,7 +619,12 @@ struct RString { (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \ RSTRING(str)->as.ary : \ RSTRING(str)->as.heap.ptr) -#define RSTRING_END(str) (RSTRING_PTR(str)+RSTRING_LEN(str)) +#define RSTRING_END(str) \ + (!(RBASIC(str)->flags & RSTRING_NOEMBED) ? \ + (RSTRING(str)->as.ary + \ + ((RBASIC(str)->flags >> RSTRING_EMBED_LEN_SHIFT) & \ + (RSTRING_EMBED_LEN_MASK >> RSTRING_EMBED_LEN_SHIFT))) : \ + (RSTRING(str)->as.heap.ptr + RSTRING(str)->as.heap.len)) #define RARRAY_EMBED_LEN_MAX 3 struct RArray { |