summaryrefslogtreecommitdiff
path: root/include/ruby
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-06-28 12:15:55 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-06-28 12:15:55 +0000
commitcd51ba0d99ef185e37f751e2a7bc65591bd8f822 (patch)
tree2e8d40a2d2d48b8333fc5fd906e87d997a9f6392 /include/ruby
parentf9afa3f03583e2e27f1cc7140281a557ce2b625f (diff)
downloadruby-cd51ba0d99ef185e37f751e2a7bc65591bd8f822.tar.gz
* include/ruby/intern.h (rb_str_new2, rb_tainted_str_new2,
rb_usascii_str_new2): use inline versions only for constant literals. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/mvm@17634 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'include/ruby')
-rw-r--r--include/ruby/intern.h23
1 files changed, 19 insertions, 4 deletions
diff --git a/include/ruby/intern.h b/include/ruby/intern.h
index f109cf75ef..734bdfa7a8 100644
--- a/include/ruby/intern.h
+++ b/include/ruby/intern.h
@@ -535,10 +535,25 @@ 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 __GNUC__ >= 4 && defined __OPTIMIZE__ && __OPTIMIZE__
-#define rb_str_new2(str) ({const char *_s = (str); rb_str_new(_s, strlen(_s));})
-#define rb_tainted_str_new2(str) ({const char *_s = (str); rb_tainted_str_new(_s, strlen(_s));})
-#define rb_usascii_str_new2(str) ({const char *_s = (str); rb_usascii_str_new(_s, strlen(_s));})
+#if defined __GNUC__
+#define rb_str_new2(str) ( \
+{ \
+ (__builtin_constant_p(str)) ? \
+ rb_str_new(str, strlen(str)) : \
+ rb_str_new2(str); \
+})
+#define rb_tainted_str_new2(str) ( \
+{ \
+ (__builtin_constant_p(str)) ? \
+ rb_tainted_str_new(str, strlen(str)) : \
+ rb_tainted_str_new2(str); \
+})
+#define rb_usascii_str_new2(str) ( \
+{ \
+ (__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);