On 04/30/2010 07:25 AM, Steve Schveighoffer wrote:
This is not important.  A library to print out the last unit test failure is 
really easy.  printf is not required, write will be sufficient.  All it needs 
is a little compiler help.

At the beginning of every unit test, the compiler should insert the following 
code:

unittest {    __unittestFile = __FILE__;    __unittestLine = __LINE__;
     ...
}

Then, during unittest, the runtime inserts a signal handler for SEGV:

__gshared string __unittestFile = "";
__gshared uint __unittestLine = 0;
__gshared string msg = "unittest SEGV: ";

extern(C) void unittestSegv(int sig)
{
    char[11] lineno;
    int linenostart = 0;
    do
    {
       lineno[$-1-linenolength] = '0' + __unittestLine  % 10;
       __unittestLine /= 10;
       --linenostart;
    } while(__unittestLine>  0);

    write(2, msg.ptr, msg.length);
    write(2, __unittestFile.ptr, __unittestFile.length);
    write(2, "@", 1);
    write(2, lineno.ptr + linenostart, lineno.length - linenostart);
    write(2, "\n", 1);
    exit(1);
}

Walter, if this code does work, please do insert it in the compiler. Actually Steve, please bugzillize this so it doesn't get forgotten.

It's an important matter.


Andrei
_______________________________________________
dmd-internals mailing list
[email protected]
http://lists.puremagic.com/mailman/listinfo/dmd-internals

Reply via email to