diff --git a/lib/fnc.c b/lib/fnc.c index 1c2138f2..2222d7af 100644 --- a/lib/fnc.c +++ b/lib/fnc.c @@ -1009,7 +1009,7 @@ static int fnc_split (hawk_rtx_t* rtx, const hawk_fnc_info_t* fi, int use_array) /*t2 = hawk_rtx_makestrvalwithoocs(rtx, &tok);*/ /*t2 = hawk_rtx_makenstrvalwithoocs(rtx, &tok); */ t2 = is_byte_str? hawk_rtx_makenumormbsvalwithbchars(rtx, (hawk_bch_t*)tok.ptr, tok.len): - hawk_rtx_makenumorstrvalwithoochars(rtx, tok.ptr, tok.len); + hawk_rtx_makenumorstrvalwithoochars(rtx, tok.ptr, tok.len); if (HAWK_UNLIKELY(!t2)) goto oops; if (use_array) diff --git a/t/h-002.hawk b/t/h-002.hawk index 7ac90299..8e6bd863 100644 --- a/t/h-002.hawk +++ b/t/h-002.hawk @@ -486,6 +486,14 @@ function main() tap_ensure (a[3] === @b"So]me", 1, @SCRIPTNAME, @SCRIPTLINE); tap_ensure (a[4] === @b"Da:ta", 1, @SCRIPTNAME, @SCRIPTLINE); + ## the splitter begins with a question mark and contains 4 characters + ## (separator, escaper, left-quote, right-qoute) after it. + tap_ensure (split(@b"sea of people, brandy, coke, dark\\,age", a, "?,\\\"\""), 4, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[1] === @b"sea of people", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[2] === @b"brandy", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[3] === @b"coke", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[4] === @b"dark,age", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (split("Here===Is=Some=====Data", a, ""), 23, @SCRIPTNAME, @SCRIPTLINE); tap_ensure (hawk::typename(a), "map", @SCRIPTNAME, @SCRIPTLINE); tap_ensure (str::splita("Here===Is=Some=====Data", a, ""), 23, @SCRIPTNAME, @SCRIPTLINE); @@ -512,25 +520,25 @@ function main() tap_ensure (a[4], "b\t\tc", @SCRIPTNAME, @SCRIPTLINE); tap_ensure (a[5], "d", @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (str::split('a', a, /a/), 2, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[1] === "", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[2] === "", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (str::split('a', a, /a/), 2, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[1] === "", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[2] === "", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (str::split('a', a, 'a'), 2, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[1] === "", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[2] === "", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (str::split('a', a, 'a'), 2, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[1] === "", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[2] === "", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (str::split('a', a, @b'a'), 2, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[1] === "", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[2] === "", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (str::split('a', a, @b'a'), 2, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[1] === "", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[2] === "", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (str::split(@b'a', a, /a/), 2, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[1] === @b"", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[2] === @b"", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (str::split(@b'a', a, /a/), 2, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[1] === @b"", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[2] === @b"", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (str::split(@b'a', a, @b'a'), 2, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[1] === @b"", 1, @SCRIPTNAME, @SCRIPTLINE); - tap_ensure (a[2] === @b"", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (str::split(@b'a', a, @b'a'), 2, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[1] === @b"", 1, @SCRIPTNAME, @SCRIPTLINE); + tap_ensure (a[2] === @b"", 1, @SCRIPTNAME, @SCRIPTLINE); }