summaryrefslogtreecommitdiffstats
path: root/string.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-12-12 01:19:23 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2008-12-12 01:19:23 +0000
commita38bfc7bed2786506648f0eecf55e26d7c917dd1 (patch)
tree03f1ff6808e0ad7e0cee8b6fd031ec8d8b3cf115 /string.c
parent8cbb1aab5cdc5d8099500f315cb9015fe4481183 (diff)
downloadruby-a38bfc7bed2786506648f0eecf55e26d7c917dd1.tar.gz
ruby-a38bfc7bed2786506648f0eecf55e26d7c917dd1.tar.xz
ruby-a38bfc7bed2786506648f0eecf55e26d7c917dd1.zip
* string.c (rb_string_value_ptr, rb_to_id): do not use a side
effect expression in RSTRING_PTR. * string.c (rb_str_split_m): simplified the argument of RSTRING_LEN. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@20651 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'string.c')
-rw-r--r--string.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/string.c b/string.c
index b46c69b64..6de7b28c6 100644
--- a/string.c
+++ b/string.c
@@ -1240,7 +1240,8 @@ rb_string_value(volatile VALUE *ptr)
char *
rb_string_value_ptr(volatile VALUE *ptr)
{
- return RSTRING_PTR(rb_string_value(ptr));
+ VALUE str = rb_string_value(ptr);
+ return RSTRING_PTR(str);
}
char *
@@ -5433,8 +5434,9 @@ rb_str_split_m(int argc, VALUE *argv, VALUE str)
rb_ary_push(result, tmp);
}
if (NIL_P(limit) && lim == 0) {
- while (RARRAY_LEN(result) > 0 &&
- RSTRING_LEN(RARRAY_PTR(result)[RARRAY_LEN(result)-1]) == 0)
+ long len;
+ while ((len = RARRAY_LEN(result)) > 0 &&
+ (tmp = RARRAY_PTR(result)[len-1], RSTRING_LEN(tmp) == 0))
rb_ary_pop(result);
}
@@ -7030,8 +7032,9 @@ rb_to_id(VALUE name)
default:
tmp = rb_check_string_type(name);
if (NIL_P(tmp)) {
+ tmp = rb_inspect(name);
rb_raise(rb_eTypeError, "%s is not a symbol",
- RSTRING_PTR(rb_inspect(name)));
+ RSTRING_PTR(tmp));
}
name = tmp;
/* fall through */