From: walter Date: Mon, 13 Oct 2008 21:39:33 +0000 (+0000) Subject: fix support for file/line X-Git-Url: https://git.llucax.com/software/druntime.git/commitdiff_plain/471a1a23753606871f4d85eb951f615e5310792e fix support for file/line git-svn-id: http://svn.dsource.org/projects/druntime/trunk@28 4a9d5153-6564-4b3f-b5e1-7e8e9dac548f --- diff --git a/src/compiler/dmd/dmain2.d b/src/compiler/dmd/dmain2.d index ec42e66..8c22052 100644 --- a/src/compiler/dmd/dmain2.d +++ b/src/compiler/dmd/dmain2.d @@ -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 { diff --git a/src/compiler/dmd/object_.d b/src/compiler/dmd/object_.d index 4e78220..8c5115f 100644 --- a/src/compiler/dmd/object_.d +++ b/src/compiler/dmd/object_.d @@ -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; } }