digitalmars.D.bugs - [Issue 3043] New: Template symbol arg cannot be demangled
- d-bugmail puremagic.com (62/62) Jun 01 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3043
- d-bugmail puremagic.com (14/14) Jul 16 2009 http://d.puremagic.com/issues/show_bug.cgi?id=3043
- d-bugmail puremagic.com (12/12) Nov 09 2010 http://d.puremagic.com/issues/show_bug.cgi?id=3043
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: bugzilla digitalmars.com
ReportedBy: rsinfu 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: -------
Jun 01 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3043
Don <clugdbug yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |clugdbug yahoo.com.au
I don't think problems can ever happen. I solved this ages ago in my
compile-time demangler. The demangler knows the length of the string,
("S94test3sym") so it can tell that "94" is impossible as the length;
therefore, it must be "9".
I think this bug is probably invalid.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Jul 16 2009
http://d.puremagic.com/issues/show_bug.cgi?id=3043
Walter Bright <bugzilla digitalmars.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
Resolution| |WONTFIX
22:57:21 PST ---
http://www.dsource.org/projects/dmd/changeset/745
Fixing this would break binary compatibility and all the existing demanglers.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 09 2010









d-bugmail puremagic.com 