Quiz of the day: Why does this not work?
Sean Kelly
sean at invisibleduck.org
Thu Nov 6 13:03:20 PST 2008
TomD wrote:
> Hi,
> this is about dmd and DLLs.
>
> Given a simple object hierachy in myclasses.d:
> module myclasses;
> class base{ char[] toString(){ return "I am base";} }
> class c1: base{ char[] toString(){ return "I am c1";} }
> class c2: base{ char[] toString(){ return "I am c2";} }
...
> assert( cast(c1) instances[1] !is null);
> assert( cast(c2) instances[2] !is null);
>
> return 0;
> }
I think this is a bug in the runtime. Look like 116 of:
http://dsource.org/projects/tango/browser/trunk/lib/compiler/dmd/cast.d
In your example, I'm pretty sure that the DLLs ClassInfo instance of c1
will be passed into _d_isbaseof2 while the ClassInfo obtained from the
object to be cast will come from the object's memory space (ie. from the
app). Since an 'is' comparison is taking place and these are distinct
objects, the cast will fail. Try changing the 'is' comparisons at lines
105, 109, 116, 150, and 176 (I think that's all of them) to '==' and see
if that does the trick.
Sean
More information about the Digitalmars-d
mailing list