Thread overview
AssertError class needs fixing
Apr 07, 2004
imr1984
Apr 07, 2004
Stewart Gordon
Apr 07, 2004
imr1984
April 07, 2004
When is the AssertError class going to be fixed? It STILL does not override the toString() member. This is a must for anyone who uses exception handling like me.


April 07, 2004
imr1984 wrote:
> When is the AssertError class going to be fixed? It STILL does not override the
> toString() member. This is a must for anyone who uses exception handling like
> me.

Here's the fix.  Yes, I did test it, but it's on my other computer so the code below is a reconstruction (so forgive me if there's a little typo).  Here's what I did:
- fixed the module name to be consistent with the filename
- made it rightfully a subclass of Error
- called super to set the message
- removed print, which consequently becomes redundant.

Stewart.

----------
module std.asserterror;

import std.string;

class AssertError : Error {
	private {
		uint linnum;
		char[] filename;
		
		this(char[] filename, uint linnum) {
			this.linnum = linnum;
			this.filename = filename;
			super("AssertError Failure " ~ filename ~ "("
			  ~ std.string.toString(linnum) ~ ")");
		}
	}
}


/********************************************
 * Called by the compiler generated module assert function.
 * Builds an AssertError exception and throws it.
 */

extern (C) static void _d_assert(char[] filename, uint line)
{
    //printf("_d_assert(%s, %d)\n", (char *)filename, line);
    AssertError a = new AssertError(filename, line);
    //printf("assertion %p created\n", a);
    throw a;
}

-- 
My e-mail is valid but not my primary mailbox.  Please keep replies on on the 'group where everyone may benefit.

April 07, 2004
yes i know how to fix it myself, but i want the official copy of phobos to be corrected so that when i get a new version of DMD i can just copy the correct one from dmd.zip

In article <c51s3k$19na$1@digitaldaemon.com>, Stewart Gordon says...
>
>imr1984 wrote:
>> When is the AssertError class going to be fixed? It STILL does not override the toString() member. This is a must for anyone who uses exception handling like me.
>
>Here's the fix.  Yes, I did test it, but it's on my other computer so
>the code below is a reconstruction (so forgive me if there's a little
>typo).  Here's what I did:
>- fixed the module name to be consistent with the filename
>- made it rightfully a subclass of Error
>- called super to set the message
>- removed print, which consequently becomes redundant.
>
>Stewart.
>
>----------
>module std.asserterror;
>
>import std.string;
>
>class AssertError : Error {
>	private {
>		uint linnum;
>		char[] filename;
>
>		this(char[] filename, uint linnum) {
>			this.linnum = linnum;
>			this.filename = filename;
>			super("AssertError Failure " ~ filename ~ "("
>			  ~ std.string.toString(linnum) ~ ")");
>		}
>	}
>}
>
>
>/********************************************
>  * Called by the compiler generated module assert function.
>  * Builds an AssertError exception and throws it.
>  */
>
>extern (C) static void _d_assert(char[] filename, uint line)
>{
>     //printf("_d_assert(%s, %d)\n", (char *)filename, line);
>     AssertError a = new AssertError(filename, line);
>     //printf("assertion %p created\n", a);
>     throw a;
>}
>
>-- 
>My e-mail is valid but not my primary mailbox.  Please keep replies on on the 'group where everyone may benefit.
>