[Issue 17157] New: ctRegex.matchAll doesn't set last item in Captures
    via Digitalmars-d-bugs 
    digitalmars-d-bugs at puremagic.com
       
    Wed Feb  8 01:41:45 PST 2017
    
    
  
https://issues.dlang.org/show_bug.cgi?id=17157
          Issue ID: 17157
           Summary: ctRegex.matchAll doesn't set last item in Captures
           Product: D
           Version: D2
          Hardware: x86_64
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P1
         Component: phobos
          Assignee: nobody at puremagic.com
          Reporter: crimaniak at gmail.com
Reproduce code:
int main() 
{
    import std.stdio;
    import std.regex;
//    auto r = ctRegex!"(a)|(b)|(c)|(d)"; /* // <- uncomment to switch to
ctRegex
    auto r = regex("(a)|(b)|(c)|(d)"); //*/
    auto s = "--a--b--c--d--";
    foreach(match; s.matchAll(r))
    {
    foreach(i; 0..match.length)
            write(i,":",match[i]," ");
    writeln();
    }
    return 0;
}
if line 6 commented and regex() is used then output is correct:
0:a 1:a 2: 3: 4: 
0:b 1: 2:b 3: 4: 
0:c 1: 2: 3:c 4: 
0:d 1: 2: 3: 4:d 
if comment at line 6 beginning is removed and ctRegex is used then we have
exception:
core.exception.AssertError@/usr/include/dmd/phobos/std/regex/package.d(565):
wrong match: 1..0
----------------
??:? _d_assert_msg [0x4edba6]
??:? std.regex.Captures!(immutable(char)[],
ulong).Captures.opIndex!().opIndexinout(pure nothrow @trusted
inout(immutable(char)[]) function(ulong)) [0x4e4f01]
??:? _Dmain [0x4bb73e]
??:? _D2rt6dmain211_d_run_mainUiPPaPUAAaZiZ6runAllMFZ9__lambda1MFZv [0x4ef333]
??:? void rt.dmain2._d_run_main(int, char**, extern (C) int
function(char[][])*).tryExec(scope void delegate()) [0x4ef25b]
??:? void rt.dmain2._d_run_main(int, char**, extern (C) int
function(char[][])*).runAll() [0x4ef2d8]
??:? void rt.dmain2._d_run_main(int, char**, extern (C) int
function(char[][])*).tryExec(scope void delegate()) [0x4ef25b]
??:? _d_run_main [0x4ef1c7]
??:? main [0x4eae0f]
??:? __libc_start_main [0xc012282f]
More experiments have shown: last element of match is not set and attempt to
access it leads to exception. 
Compiler: DMD64 D Compiler v2.073.0
OS: Ubuntu 16.04 LTS
--
    
    
More information about the Digitalmars-d-bugs
mailing list