September 15, 2004
Using DMD 0.100, Windows 98SE.

I've just noticed that SwitchError's giving me the same troubles as AssertError was before 0.89.  Same bug, same basic fix.

BTW, while debugging this fix I discovered that the eccentric 'length' syntactic sugar of 0.99 has broken a bit of the Phobos code, at least in ArrayBoundsError.

(I thought about using std.string.format, but then realised that if that one day throws a SwitchError halfway between versions then it'll recurse forever....)

Also corrected the left over comment....

Stewart.

----------
module std.switcherr;

import std.c.stdio;

class SwitchError : Error
{
    private
    {
        uint linnum;
        char[] filename;

        this(char[] filename, uint linnum)
        {
            this.linnum = linnum;
            this.filename = filename;

            char[] buffer
              = new char[17 + filename.length + linnum.sizeof * 3 + 1];
            int count = sprintf(buffer, "Switch Default %.*s(%u)",
                filename, linnum);

            super(buffer[0..count]);
        }
    }
}

/********************************************
 * Called by the compiler-generated default statement in a switch block.
 * Builds a SwitchError and throws it.
 */

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

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