www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - What kind of mangling has the LDC2 -X JsonFile "deco" field?

reply realhet <real_het hotmail.com> writes:
Hello,

I'm trying to get information from the JsonFile produced by LDC2, 
but having no clue how to decode this:

For example:
header: KeywordCat kwCatOf(int k)
   "deco" : "FAyaZE3het8keywords10KeywordCat",

The "deco" field contains the full name of the return type 
het.keywords.KeywordCat, but in front of that I don't know how to 
decode that "FAyaZE".

Also this is how a string return type is encoded: "FiZAya"

I tried std.demangle and and online GCC demangler, but no luck.

Anyone can help me telling how to decode these please?

Thank you in advance!
Sep 16 2020
next sibling parent Adam D. Ruppe <destructionator gmail.com> writes:
On Thursday, 17 September 2020 at 03:06:45 UTC, realhet wrote:
 I'm trying to get information from the JsonFile produced by 
 LDC2, but having no clue how to decode this:

 For example:
 header: KeywordCat kwCatOf(int k)
   "deco" : "FAyaZE3het8keywords10KeywordCat",
That's a D mangle but just of one individual variable, without an attached name. std.demangle looks for the _D prefix and the name so it prolly can't read it. https://dlang.org/spec/abi.html#name_mangling But from eyeball it is a extern(D) function taking a string argument and returning a KeywordCat enum.. The "F" means extern(D). After this are the argument list. "Aya" you'll get to recognize as "string", but formally it means "Array (A) of immutable (y) chars (a)". Then "Z" means non-variadic function and this ends the argument list, so the next thing is the return type. "E" means enum, then the name comes with a count of chars in this name piece, then the chars.
Sep 16 2020
prev sibling parent reply Adam D. Ruppe <destructionator gmail.com> writes:
On Thursday, 17 September 2020 at 03:06:45 UTC, realhet wrote:
 Anyone can help me telling how to decode these please?
so here's a cool trick to get hte other demanglers to help. Just prepend _D4name to the string. so like: $ ./ddemangle _D4nameFAyaZE3het8keywords10KeywordCat het.keywords.KeywordCat name(immutable(char)[]) so then the demangler will recognize it and use your placeholder name while spitting out the rest. of course you can change that 4name to whatever you want.
Sep 16 2020
parent realhet <real_het hotmail.com> writes:
On Thursday, 17 September 2020 at 04:01:11 UTC, Adam D. Ruppe 
wrote:
 On Thursday, 17 September 2020 at 03:06:45 UTC, realhet wrote:
 Anyone can help me telling how to decode these please?
Just prepend _D4name
Thank you very much!
Sep 17 2020