From 2149c313f4306925903eba207616d895a37f850c Mon Sep 17 00:00:00 2001 From: nobu Date: Mon, 25 Mar 2013 09:13:08 +0000 Subject: string.c: performance improvement * string.c (rb_str_rpartition): get rid of conversion from byte offset to char offset and backward, for performance improvement. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39928 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- string.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'string.c') diff --git a/string.c b/string.c index dad27cfb7a..8bbd8a4c41 100644 --- a/string.c +++ b/string.c @@ -7522,7 +7522,6 @@ rb_str_rpartition(VALUE str, VALUE sep) if (RB_TYPE_P(sep, T_REGEXP)) { pos = rb_reg_search(sep, str, pos, 1); - pos = rb_str_sublen(str, pos); regex = TRUE; } else { @@ -7543,9 +7542,13 @@ rb_str_rpartition(VALUE str, VALUE sep) if (regex) { sep = rb_reg_nth_match(0, rb_backref_get()); } - return rb_ary_new3(3, rb_str_substr(str, 0, pos), + else { + pos = rb_str_offset(str, pos); + } + return rb_ary_new3(3, rb_str_subseq(str, 0, pos), sep, - rb_str_substr(str,pos+str_strlen(sep,STR_ENC_GET(sep)),RSTRING_LEN(str))); + rb_str_subseq(str, pos+RSTRING_LEN(sep), + RSTRING_LEN(str)-pos-RSTRING_LEN(sep))); } /* -- cgit v1.2.3