www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 17157] New: ctRegex.matchAll doesn't set last item in Captures

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 puremagic.com
          Reporter: crimaniak 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

--
Feb 08