summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--include/ruby/ruby.h7
2 files changed, 9 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 7b4ce9af8e..cfd295c69c 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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 {