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 belowgetFuncTemplateDecl(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
