From a38bfc7bed2786506648f0eecf55e26d7c917dd1 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 12 Dec 2008 01:19:23 +0000 Subject: * 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 --- string.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) (limited to 'string.c') 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 */ -- cgit