Thread overview | ||||||
---|---|---|---|---|---|---|
|
November 17, 2016 Any AST experts n da house? | ||||
---|---|---|---|---|
| ||||
Lucia is working on https://issues.dlang.org/show_bug.cgi?id=16683 which shows good promise in cleaning the cobwebs around Typeinfo. She looked into matters and figured she needs to have TypeidExp.semantic() return the lowered expression. In the code below getFuncTemplateDecl(tidSymbol); // returns nil and the compiler crashes when it hits this line. // extern (C++) final class TypeidExp : Expression @ dmd-> expression.d override Expression semantic(Scope* sc) { auto tidIdentifierExp = new IdentifierExp(loc, new Identifier("__typeidImplT")); auto tidSymbol = new Dsymbol(new Identifier("__typeidImplT")); auto tidDeclaration = getFuncTemplateDecl(tidSymbol); auto tidExp = new TemplateExp(loc, tidDeclaration); auto callExp = new CallExp(loc, tidExp); return callExp; } Any help would be appreciated. Thanks, Andrei |
November 17, 2016 Re: Any AST experts n da house? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrei Alexandrescu | On Thursday, 17 November 2016 at 14:10:01 UTC, Andrei Alexandrescu wrote:
> Lucia is working on https://issues.dlang.org/show_bug.cgi?id=16683 which shows good promise in cleaning the cobwebs around Typeinfo. She looked into matters and figured she needs to have TypeidExp.semantic() return the lowered expression. In the code below
>
> getFuncTemplateDecl(tidSymbol); // returns nil
>
> and the compiler crashes when it hits this line.
>
> // extern (C++) final class TypeidExp : Expression @ dmd-> expression.d
>
> override Expression semantic(Scope* sc)
> {
> auto tidIdentifierExp = new IdentifierExp(loc, new Identifier("__typeidImplT"));
> auto tidSymbol = new Dsymbol(new Identifier("__typeidImplT"));
>
> auto tidDeclaration = getFuncTemplateDecl(tidSymbol);
> auto tidExp = new TemplateExp(loc, tidDeclaration);
> auto callExp = new CallExp(loc, tidExp);
>
> return callExp;
> }
>
> Any help would be appreciated.
>
>
> Thanks,
>
> Andrei
I am looking into it.
|
November 17, 2016 Re: Any AST experts n da house? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Stefan Koch | On Thursday, 17 November 2016 at 14:11:50 UTC, Stefan Koch wrote: > On Thursday, 17 November 2016 at 14:10:01 UTC, Andrei Alexandrescu wrote: auto tidSymbol = new Dsymbol(new >> Identifier("__typeidImplT")); >> >> Andrei > > I am looking into it. DSymbol is an abstract class. It is not meant to be used. |
November 17, 2016 Re: Any AST experts n da house? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrei Alexandrescu | On 2016-11-17 15:10, Andrei Alexandrescu wrote: > Lucia is working on https://issues.dlang.org/show_bug.cgi?id=16683 which > shows good promise in cleaning the cobwebs around Typeinfo. She looked > into matters and figured she needs to have TypeidExp.semantic() return > the lowered expression. In the code below > > getFuncTemplateDecl(tidSymbol); // returns nil > > and the compiler crashes when it hits this line. > > // extern (C++) final class TypeidExp : Expression @ dmd-> expression.d > > override Expression semantic(Scope* sc) > { > auto tidIdentifierExp = new IdentifierExp(loc, new > Identifier("__typeidImplT")); > auto tidSymbol = new Dsymbol(new Identifier("__typeidImplT")); > > auto tidDeclaration = getFuncTemplateDecl(tidSymbol); > auto tidExp = new TemplateExp(loc, tidDeclaration); > auto callExp = new CallExp(loc, tidExp); > > return callExp; > } > > Any help would be appreciated. Not related to the actual question. Instead of explicitly creating a new identifier, use Identifier.idPool [1], which will reuse any existing identifier or create a new one if necessary. [1] https://github.com/dlang/dmd/blob/master/src/identifier.d#L141 -- /Jacob Carlborg |
Copyright © 1999-2021 by the D Language Foundation