diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-11-18 01:17:11 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-11-18 01:17:11 +0000 |
commit | 2fd23f539df7d736d5a9d21324125f9cdb037760 (patch) | |
tree | a68de95c6862049b1b3ed020cf6b1753bf402d41 | |
parent | 2c575590b4651ae56ce91387584955b9a7b9b25c (diff) | |
download | ruby-2fd23f539df7d736d5a9d21324125f9cdb037760.tar.gz ruby-2fd23f539df7d736d5a9d21324125f9cdb037760.tar.xz ruby-2fd23f539df7d736d5a9d21324125f9cdb037760.zip |
* string.c (str_utf8_nth): no count_utf8_lead_bytes_with_word
optimization for short string. [ruby-core:26787]
* string.c (str_utf8_offset): str_utf8_nth never return NULL.
?\012
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@25833 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | string.c | 4 |
2 files changed, 8 insertions, 3 deletions
@@ -1,3 +1,10 @@ +Wed Nov 18 10:17:09 2009 Nobuyoshi Nakada <nobu@ruby-lang.org> + + * string.c (str_utf8_nth): no count_utf8_lead_bytes_with_word + optimization for short string. [ruby-core:26787] + + * string.c (str_utf8_offset): str_utf8_nth never return NULL. + Wed Nov 18 10:12:34 2009 Shugo Maeda <shugo@ruby-lang.org> * vm_method.c (rb_undef): should raise TypeError if klass is nil. @@ -1468,7 +1468,7 @@ rb_str_offset(VALUE str, long pos) static char * str_utf8_nth(const char *p, const char *e, long nth) { - if ((int)SIZEOF_VALUE * 2 < nth) { + if ((int)SIZEOF_VALUE < e - p && (int)SIZEOF_VALUE * 2 < nth) { const VALUE *s, *t; const VALUE lowbits = sizeof(VALUE) - 1; s = (const VALUE*)(~lowbits & ((VALUE)p + lowbits)); @@ -1483,7 +1483,6 @@ str_utf8_nth(const char *p, const char *e, long nth) } while (s < t && (int)sizeof(VALUE) <= nth); p = (char *)s; } - if (p > e) return 0; while (p < e) { if (is_utf8_lead_byte(*p)) { if (nth == 0) break; @@ -1498,7 +1497,6 @@ static long str_utf8_offset(const char *p, const char *e, long nth) { const char *pp = str_utf8_nth(p, e, nth); - if (!pp) return e - p; return pp - p; } #endif |