www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 17302] New: [SPEC] QualifiedName mangling does not match

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 Well... there's *already* a grammar ambiguity as #14591 is somewhat related. --
Apr 07