fix support for file/line

This commit is contained in:
Walter Bright 2008-10-13 21:39:33 +00:00
parent 4b405b1432
commit a8ed90f6e1
2 changed files with 31 additions and 2 deletions

View file

@ -241,7 +241,7 @@ extern (C) int main(int argc, char **argv)
if (e.file)
{
// fprintf(stderr, "%.*s(%u): %.*s\n", e.file, e.line, e.msg);
console (e.classinfo.name)("@")(e.file)("(")(e.line)("): ")(e.toString)("\n");
console (e.classinfo.name)("@")(e.file)("(")(e.line)("): ")(e.msg)("\n");
}
else
{

View file

@ -1064,6 +1064,7 @@ class Exception : Object
size_t line;
TraceInfo info;
Exception next;
char[] buffer;
this( string msg, Exception next = null )
{
@ -1082,7 +1083,35 @@ class Exception : Object
override string toString()
{
return msg;
if (file.length == 0 && line == 0)
return msg;
if (buffer.length == 0)
{
// Write into buffer[] the following: "file(line): msg"
buffer.length = 4 + file.length + line.sizeof * 3 + msg.length;
auto i = file.length;
buffer[0 .. i] = file[];
buffer[i] = '(';
i++;
auto n = line;
auto j = i;
do
{
buffer[i] = cast(char)((n % 10) + '0');
n /= 10;
i++;
} while (n);
buffer[j .. i].reverse;
buffer[i..i+3] = "): "[];
i += 3;
buffer[i .. i + msg.length] = msg[];
i += msg.length;
buffer = buffer[0 .. i];
}
return cast(invariant)buffer;
}
}