mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
String#split("") should split per character (byte for now)
This commit is contained in:
+16
-6
@@ -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;
|
||||
}
|
||||
|
||||
+4
-7
@@ -275,13 +275,10 @@ end
|
||||
# TODO Broken ATM
|
||||
assert('String#split', '15.2.10.5.35') do
|
||||
# without RegExp behavior is actually unspecified
|
||||
a = 'abc abc abc'.split
|
||||
b = 'a,b,c,,d'.split(',')
|
||||
c = 'abc abc abc'.split(nil)
|
||||
|
||||
a == ['abc', 'abc', 'abc'] and
|
||||
b == ["a", "b", "c", "", "d"] and
|
||||
c == ['abc', 'abc', 'abc']
|
||||
'abc abc abc'.split == ['abc', 'abc', 'abc'] and
|
||||
'a,b,c,,d'.split(',') == ["a", "b", "c", "", "d"] and
|
||||
'abc abc abc'.split(nil) == ['abc', 'abc', 'abc'] and
|
||||
'abc'.split("") == ['a', 'b', 'c']
|
||||
end
|
||||
|
||||
# TODO ATM broken assert('String#sub', '15.2.10.5.36') do
|
||||
|
||||
Reference in New Issue
Block a user