Cast to subclass in the dmd compiler

Steven Schveighoffer via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Tue Jul 25 14:01:48 PDT 2017


On 7/25/17 4:36 PM, unDEFER wrote:
> Hello!
> I'm hacking dmd compiler and trying to look on members array just after 
> parse module.
> 
> for(uint i = 0; i < members.dim; i++)
> {
>       Dsymbol m = (*members)[i];
> 
> // It is good, but further:
> 
>      Import imp = cast(Import) m;
>      if (imp !is null)
>      {
>          printf("++++ import %s.%s\n", imp.packages.toChars(), 
> imp.id.toChars());
>      }
> // ...
> }
> 
> For really imports casting doing well. But for not imports it again 
> casts, imp not is null and  the compiler crashes.
> What I'm doing wrong?

I think it's likely that these are actually C++ classes, and probably 
there is no RTTI, so this is a reinterpret cast. This is a wild guess, 
but much of the compiler still needs to interface with C++ backend.

I would look elsewhere in the compiler to see how they handle this type 
of thing. Not sure of dynamic_cast support?

-Steve


More information about the Digitalmars-d-learn mailing list