Re: Cast to subclass in the dmd compiler

2017-07-26 Thread unDEFER via Digitalmars-d-learn

On Wednesday, 26 July 2017 at 06:50:21 UTC, Jacob Carlborg wrote:
For Expression, there's a field called "op" that indicates what 
kind of expression it is, which can used in combination with a 
cast.


Thank you for hint!


Re: Cast to subclass in the dmd compiler

2017-07-26 Thread Jacob Carlborg via Digitalmars-d-learn

On 2017-07-25 23:06, unDEFER wrote:

I have found the answer in the code.
Right code is:

Import imp = m.isImport();
if (imp !is null)

Thank you.


That's the correct solution. For Expression, there's a field called "op" 
that indicates what kind of expression it is, which can used in 
combination with a cast.


--
/Jacob Carlborg


Re: Cast to subclass in the dmd compiler

2017-07-25 Thread Nicholas Wilson via Digitalmars-d-learn

On Tuesday, 25 July 2017 at 21:06:25 UTC, unDEFER wrote:

I have found the answer in the code.
Right code is:

Import imp = m.isImport();
if (imp !is null)

Thank you.


grep for kluge in code, you'll find all the places it does its 
own RTTI.


Re: Cast to subclass in the dmd compiler

2017-07-25 Thread unDEFER via Digitalmars-d-learn

I have found the answer in the code.
Right code is:

Import imp = m.isImport();
if (imp !is null)

Thank you.


Re: Cast to subclass in the dmd compiler

2017-07-25 Thread Steven Schveighoffer via Digitalmars-d-learn

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


Cast to subclass in the dmd compiler

2017-07-25 Thread unDEFER via Digitalmars-d-learn

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?