digitalmars.D.bugs - [Issue 17302] New: [SPEC] QualifiedName mangling does not match
- via Digitalmars-d-bugs (50/51) Apr 07 2017 https://issues.dlang.org/show_bug.cgi?id=17302
https://issues.dlang.org/show_bug.cgi?id=17302 Issue ID: 17302 Summary: [SPEC] QualifiedName mangling does not match compiler. Product: D Version: D2 Hardware: All OS: All Status: NEW Severity: normal Priority: P1 Component: dmd Assignee: nobody puremagic.com Reporter: ibuclaw gdcproject.org I think I saw this somewhere, but couldn't find the bug report. Nested functions have their parent's parameters encoded into the mangle symbol. --- void foo() { void bar() { } pragma(msg, bar.mangleof); } --- _D4test3fooFZ3barMFNaNbNiNfZv Where 'FZ' is inserted between 3foo and 3bar. This is contrary to the spec (removed irrelevant bits that match template and internal symbols): --- MangledName: _D QualifiedName M Type QualifiedName: SymbolName SymbolName QualifiedName SymbolName: LName LName: Number Name ---From the spec, I can only infer that the symbol should be:_D4test3foo3barMFNaNbNiNfZv Otherwise a special rule needs to be added to handle functions in SymbolName as well as TemplateInstanceName. But that will just cause grammar ambiguities with LName. SymbolName: FunctionName LName FunctionName: Number Name Type LName: Number Name --
Apr 07 2017