Merge pull request #6522 from BBasile/issue-18470

fix issue 18470 - std.algorithm.splitter has frame access problems for custom preds
merged-on-behalf-of: Jack Stouffer <jack@jackstouffer.com>
This commit is contained in:
The Dlang Bot 2018-06-05 20:25:20 +02:00 committed by GitHub
commit a6bf2b6c47
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -3796,7 +3796,7 @@ if (is(typeof(binaryFun!pred(r.front, s)) : bool)
import std.algorithm.searching : find; import std.algorithm.searching : find;
import std.conv : unsigned; import std.conv : unsigned;
static struct Result struct Result
{ {
private: private:
Range _input; Range _input;
@ -3817,7 +3817,7 @@ if (is(typeof(binaryFun!pred(r.front, s)) : bool)
static if (isBidirectionalRange!Range) static if (isBidirectionalRange!Range)
{ {
static size_t lastIndexOf(Range haystack, Separator needle) size_t lastIndexOf(Range haystack, Separator needle)
{ {
import std.range : retro; import std.range : retro;
auto r = haystack.retro().find!pred(needle); auto r = haystack.retro().find!pred(needle);
@ -4142,6 +4142,23 @@ if (is(typeof(binaryFun!pred(r.front, s)) : bool)
assert(s.empty); assert(s.empty);
} }
@safe unittest // issue 18470
{
import std.algorithm.comparison : equal;
const w = [[0], [1], [2]];
assert(w.splitter!((a, b) => a.front() == b)(1).equal([[[0]], [[2]]]));
}
@safe unittest // issue 18470
{
import std.algorithm.comparison : equal;
import std.ascii : toLower;
assert("abXcdxef".splitter!"a.toLower == b"('x').equal(["ab", "cd", "ef"]));
assert("abXcdxef".splitter!((a, b) => a.toLower == b)('x').equal(["ab", "cd", "ef"]));
}
/// ditto /// ditto
auto splitter(alias pred = "a == b", Range, Separator)(Range r, Separator s) auto splitter(alias pred = "a == b", Range, Separator)(Range r, Separator s)
if (is(typeof(binaryFun!pred(r.front, s.front)) : bool) if (is(typeof(binaryFun!pred(r.front, s.front)) : bool)