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