diff options
| author | Yukihiro Matsumoto <[email protected]> | 2012-06-12 12:58:49 +0900 |
|---|---|---|
| committer | Yukihiro Matsumoto <[email protected]> | 2012-06-12 12:58:49 +0900 |
| commit | 30a062c165f31f31f8be65bd51d313a2d25f0bd9 (patch) | |
| tree | a85b6477a724d5d6ca48c7484b427d2d8f328209 /src | |
| parent | ff4925b804cc70aa8571e9aed2793114ef0223f6 (diff) | |
| download | mruby-30a062c165f31f31f8be65bd51d313a2d25f0bd9.tar.gz mruby-30a062c165f31f31f8be65bd51d313a2d25f0bd9.zip | |
String#split("") should split per character (byte for now)
Diffstat (limited to 'src')
| -rw-r--r-- | src/string.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/string.c b/src/string.c index fcd68a2f2..14041127a 100644 --- a/src/string.c +++ b/src/string.c @@ -2208,14 +2208,24 @@ mrb_str_split_m(mrb_state *mrb, mrb_value str) char *ptr = RSTRING_PTR(str); char *temp = ptr; char *eptr = RSTRING_END(str); - char *sptr = RSTRING_PTR(spat); long slen = RSTRING_LEN(spat); - while (ptr < eptr && - (end = mrb_memsearch(sptr, slen, ptr, eptr - ptr)) >= 0) { - mrb_ary_push(mrb, result, mrb_str_subseq(mrb, str, ptr - temp, end)); - ptr += end + slen; - if (lim >= 0 && lim <= ++i) break; + if (slen == 0) { + while (ptr < eptr) { + mrb_ary_push(mrb, result, mrb_str_subseq(mrb, str, ptr-temp, 1)); + ptr++; + if (lim >= 0 && lim <= ++i) break; + } + } + else { + char *sptr = RSTRING_PTR(spat); + + while (ptr < eptr && + (end = mrb_memsearch(sptr, slen, ptr, eptr - ptr)) >= 0) { + mrb_ary_push(mrb, result, mrb_str_subseq(mrb, str, ptr - temp, end)); + ptr += end + slen; + if (lim >= 0 && lim <= ++i) break; + } } beg = ptr - temp; } |
