summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--include/ruby/intern.h52
-rw-r--r--string.c2
3 files changed, 39 insertions, 20 deletions
diff --git a/ChangeLog b/ChangeLog
index 253d08be80..c5be9facf6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+Tue Jul 22 02:51:46 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
+
+ * include/ruby/intern.h (rb_str_buf_cat2, rb_str_cat2): optimization
+ for literals.
+
Tue Jul 22 02:50:47 2008 Nobuyoshi Nakada <nobu@ruby-lang.org>
* README.EXT, README.EXT.ja (1.5 Manipulating Ruby data): fix the
diff --git a/include/ruby/intern.h b/include/ruby/intern.h
index b009384d9f..29fa2c2a2c 100644
--- a/include/ruby/intern.h
+++ b/include/ruby/intern.h
@@ -537,26 +537,6 @@ VALUE rb_str_buf_new2(const char*);
VALUE rb_str_tmp_new(long);
VALUE rb_usascii_str_new(const char*, long);
VALUE rb_usascii_str_new2(const char*);
-#if defined __GNUC__
-#define rb_str_new2(str) __extension__ ( \
-{ \
- (__builtin_constant_p(str)) ? \
- rb_str_new(str, strlen(str)) : \
- rb_str_new2(str); \
-})
-#define rb_tainted_str_new2(str) __extension__ ( \
-{ \
- (__builtin_constant_p(str)) ? \
- rb_tainted_str_new(str, strlen(str)) : \
- rb_tainted_str_new2(str); \
-})
-#define rb_usascii_str_new2(str) __extension__ ( \
-{ \
- (__builtin_constant_p(str)) ? \
- rb_usascii_str_new(str, strlen(str)) : \
- rb_usascii_str_new2(str); \
-})
-#endif
void rb_str_free(VALUE);
void rb_str_shared_replace(VALUE, VALUE);
VALUE rb_str_buf_append(VALUE, VALUE);
@@ -598,6 +578,38 @@ void rb_str_setter(VALUE, ID, VALUE*);
VALUE rb_str_intern(VALUE);
VALUE rb_sym_to_s(VALUE);
VALUE rb_str_length(VALUE);
+#if defined __GNUC__
+#define rb_str_new2(str) __extension__ ( \
+{ \
+ (__builtin_constant_p(str)) ? \
+ rb_str_new(str, strlen(str)) : \
+ rb_str_new2(str); \
+})
+#define rb_tainted_str_new2(str) __extension__ ( \
+{ \
+ (__builtin_constant_p(str)) ? \
+ rb_tainted_str_new(str, strlen(str)) : \
+ rb_tainted_str_new2(str); \
+})
+#define rb_usascii_str_new2(str) __extension__ ( \
+{ \
+ (__builtin_constant_p(str)) ? \
+ rb_usascii_str_new(str, strlen(str)) : \
+ rb_usascii_str_new2(str); \
+})
+#define rb_str_buf_cat2(str, ptr) __extension__ ( \
+{ \
+ (__builtin_constant_p(ptr)) ? \
+ rb_str_buf_cat(str, ptr, strlen(ptr)) : \
+ rb_str_buf_cat2(str, ptr); \
+})
+#define rb_str_cat2(str, ptr) __extension__ ( \
+{ \
+ (__builtin_constant_p(ptr)) ? \
+ rb_str_cat(str, ptr, strlen(ptr)) : \
+ rb_str_cat2(str, ptr); \
+})
+#endif
/* struct.c */
VALUE rb_struct_new(VALUE, ...);
VALUE rb_struct_define(const char*, ...);
diff --git a/string.c b/string.c
index e1bb65599e..13c98ad332 100644
--- a/string.c
+++ b/string.c
@@ -28,6 +28,8 @@
#undef rb_str_new2
#undef rb_tainted_str_new2
#undef rb_usascii_str_new2
+#undef rb_str_buf_cat2
+#undef rb_str_cat2
VALUE rb_cString;
VALUE rb_cSymbol;