http://d.puremagic.com/issues/show_bug.cgi?id=3043
Summary: Template symbol arg cannot be demangled Product: D Version: 2.030 Platform: All OS/Version: All Status: NEW Keywords: patch, spec Severity: minor Priority: P2 Component: DMD AssignedTo: bugzi...@digitalmars.com ReportedBy: rsi...@gmail.com Created an attachment (id=388) --> (http://d.puremagic.com/issues/attachment.cgi?id=388) Patch (DMD 2.030) === Problem === Under the current spec, a template symbol argument is mangled to an LName: -------------------- TemplateArg: T Type // type argument V Type Value // value argument S LName // symbol argument LName: Number Name -------------------- This rule is troublesome for demangling. When Name is a QualifiedName (e.g. template symbol), which starts with a Number, then there will be contiguous Numbers in a mangled argument: "S Number Number Name Number Name ...". A demangler will not be able to demangle such input correctly. For example, this code -------------------- module test; struct Temp(alias a) {} template sym() {} pragma(msg, Temp!(sym).mangleof); -------------------- prints "4test20__T4TempS94test3symZ4Temp". Here sym is mangled to "S94test3sym"; the Number is "9" and the Name is "4test3sym". But a demangler will recognize the Number and the Name as "94" and "test3sym", respectively. === Proposal === A template symbol argument may be (a) template declaration, template instance, template mixin, package, module, (b) variable or function. (a) is mangled to a QualifiedName and (b) is mangled to a MangledName. These two groups should be treated differently. My proposal is this: -------------------- TemplateArg: S TemplateSymbolArg TemplateSymbolArg: QualifiedName // (a) qualified name M LName // (b) mangled var/func name (_D, _Z, etc.) -------------------- This grammar does not generate contiguous Numbers. The prefix "M" is necessary to avoid a same-mangled-name collision between QualifiedName and LName. The attached patch modifies DMD 2.030 so that template symbol argument is mangled with this rule. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------