Thread overview
Which exception
Oct 30, 2006
Tom
Oct 30, 2006
Frits van Bommel
Oct 30, 2006
Tom
Oct 30, 2006
Frits van Bommel
Oct 30, 2006
Tom
October 30, 2006
Hey,

lets say I have something like the following:

try {
	// Code that throws some exception I don't know of.
} catch (Exception ex) {
	writefln(ex.classinfo.name); // works but it's not what I need
}

Is there some way to get the name of the class 'ex' is instance of (the derived class and not the base class)?

Thanks in advance,
--
Tom;
October 30, 2006
Tom wrote:
> Hey,
> 
> lets say I have something like the following:
> 
> try {
>     // Code that throws some exception I don't know of.
> } catch (Exception ex) {
>     writefln(ex.classinfo.name); // works but it's not what I need
> }
> 
> Is there some way to get the name of the class 'ex' is instance of (the derived class and not the base class)?

I'm sorry, but what *is* it that you need if not the above?

    import std.stdio;

    class DerivedException : Exception { this() { super(""); } }

    void main() {
        try {
            // Code that throws some exception.
            throw new DerivedException;
        } catch (Exception ex) {
            writefln(ex.classinfo.name); // writes "DerivedException"
        }
    }

The above code writes "DerivedException" to stdout, which is the name of the most derived class ex is an instance of.

Am I missing something?
October 30, 2006
== Quote from Frits van Bommel (fvbommel@REMwOVExCAPSs.nl)'s article
> Tom wrote:
> > Hey,
> >
> > lets say I have something like the following:
> >
> > try {
> >     // Code that throws some exception I don't know of.
> > } catch (Exception ex) {
> >     writefln(ex.classinfo.name); // works but it's not what I need
> > }
> >
> > Is there some way to get the name of the class 'ex' is instance of (the derived class and not the base class)?
> I'm sorry, but what *is* it that you need if not the above?
>      import std.stdio;
>      class DerivedException : Exception { this() { super(""); } }
>      void main() {
>          try {
>              // Code that throws some exception.
>              throw new DerivedException;
>          } catch (Exception ex) {
>              writefln(ex.classinfo.name); // writes "DerivedException"
>          }
>      }
> The above code writes "DerivedException" to stdout, which is the name of
> the most derived class ex is an instance of.
> Am I missing something?

No, you're right. It works here, on a WinXP machine. When I get home later, I'll test it on my Linux, where it didn't work. I hope it's only my mistake and not a linux-specific bug.

Regards,
--
Tom;
October 30, 2006
Tom wrote:
> == Quote from Frits van Bommel (fvbommel@REMwOVExCAPSs.nl)'s article
[...]
>> The above code writes "DerivedException" to stdout, which is the name of
>> the most derived class ex is an instance of.
>> Am I missing something?
> 
> No, you're right. It works here, on a WinXP machine. When I get home later, I'll
> test it on my Linux, where it didn't work. I hope it's only my mistake and not a
> linux-specific bug.

Just tried it in my VMWare window:

    urxae@ubuntu:~/tmp$ cat test.d
    import std.stdio;

    class DerivedException : Exception { this() { super(""); } }

    void main() {
        try {
            // Code that throws some exception.
            throw new DerivedException;
        } catch (Exception ex) {
            writefln(ex.classinfo.name); // writes "DerivedException"
        }
    }
    urxae@ubuntu:~/tmp$ dmd -run test.d
    DerivedException
    urxae@ubuntu:~/tmp$ uname -a
    Linux ubuntu 2.6.17-10-386 #2 Fri Oct 13 18:41:40 UTC 2006 i686 GNU/Linux

So that's not it either.
October 30, 2006
Frits van Bommel wrote:
> Tom wrote:
>> == Quote from Frits van Bommel (fvbommel@REMwOVExCAPSs.nl)'s article
> [...]
>>> The above code writes "DerivedException" to stdout, which is the name of
>>> the most derived class ex is an instance of.
>>> Am I missing something?
>>
>> No, you're right. It works here, on a WinXP machine. When I get home later, I'll
>> test it on my Linux, where it didn't work. I hope it's only my mistake and not a
>> linux-specific bug.
> 
> Just tried it in my VMWare window:
> 
>     urxae@ubuntu:~/tmp$ cat test.d
>     import std.stdio;
> 
>     class DerivedException : Exception { this() { super(""); } }
> 
>     void main() {
>         try {
>             // Code that throws some exception.
>             throw new DerivedException;
>         } catch (Exception ex) {
>             writefln(ex.classinfo.name); // writes "DerivedException"
>         }
>     }
>     urxae@ubuntu:~/tmp$ dmd -run test.d
>     DerivedException
>     urxae@ubuntu:~/tmp$ uname -a
>     Linux ubuntu 2.6.17-10-386 #2 Fri Oct 13 18:41:40 UTC 2006 i686 GNU/Linux
> 
> So that's not it either.

Shit! the same here. I could swear that yesterday I had code that failed to perform correctly on the topic. Today I can't reproduce it, shame on me (maybe I'm hallucinating). It'll have to be next time (hope not) :(

Thanks anyway!
--
Tom;