Lines Matching refs:Mangled

35   Demangler(const char *Mangled);
59 const char *parseMangle(OutputBuffer *Demangled, const char *Mangled);
71 const char *decodeNumber(const char *Mangled, unsigned long &Ret);
84 const char *decodeBackrefPos(const char *Mangled, long &Ret);
94 const char *decodeBackref(const char *Mangled, const char *&Ret);
106 const char *parseSymbolBackref(OutputBuffer *Demangled, const char *Mangled);
117 const char *parseTypeBackref(const char *Mangled);
126 bool isSymbolName(const char *Mangled);
137 const char *parseIdentifier(OutputBuffer *Demangled, const char *Mangled);
150 const char *parseLName(OutputBuffer *Demangled, const char *Mangled,
162 const char *parseQualified(OutputBuffer *Demangled, const char *Mangled);
172 const char *parseType(const char *Mangled);
182 const char *Demangler::decodeNumber(const char *Mangled, unsigned long &Ret) { in decodeNumber() argument
184 if (Mangled == nullptr || !std::isdigit(*Mangled)) in decodeNumber()
190 unsigned long Digit = Mangled[0] - '0'; in decodeNumber()
197 ++Mangled; in decodeNumber()
198 } while (std::isdigit(*Mangled)); in decodeNumber()
200 if (*Mangled == '\0') in decodeNumber()
204 return Mangled; in decodeNumber()
207 const char *Demangler::decodeBackrefPos(const char *Mangled, long &Ret) { in decodeBackrefPos() argument
209 if (Mangled == nullptr || !std::isalpha(*Mangled)) in decodeBackrefPos()
224 while (std::isalpha(*Mangled)) { in decodeBackrefPos()
231 if (Mangled[0] >= 'a' && Mangled[0] <= 'z') { in decodeBackrefPos()
232 Val += Mangled[0] - 'a'; in decodeBackrefPos()
236 return Mangled + 1; in decodeBackrefPos()
239 Val += Mangled[0] - 'A'; in decodeBackrefPos()
240 ++Mangled; in decodeBackrefPos()
246 const char *Demangler::decodeBackref(const char *Mangled, const char *&Ret) { in decodeBackref() argument
247 assert(Mangled != nullptr && *Mangled == 'Q' && "Invalid back reference!"); in decodeBackref()
251 const char *Qpos = Mangled; in decodeBackref()
253 ++Mangled; in decodeBackref()
255 Mangled = decodeBackrefPos(Mangled, RefPos); in decodeBackref()
256 if (Mangled == nullptr) in decodeBackref()
265 return Mangled; in decodeBackref()
269 const char *Mangled) { in parseSymbolBackref() argument
278 Mangled = decodeBackref(Mangled, Backref); in parseSymbolBackref()
289 return Mangled; in parseSymbolBackref()
292 const char *Demangler::parseTypeBackref(const char *Mangled) { in parseTypeBackref() argument
301 if (Mangled - Str >= LastBackref) in parseTypeBackref()
305 LastBackref = Mangled - Str; in parseTypeBackref()
308 Mangled = decodeBackref(Mangled, Backref); in parseTypeBackref()
322 return Mangled; in parseTypeBackref()
325 bool Demangler::isSymbolName(const char *Mangled) { in isSymbolName() argument
327 const char *Qref = Mangled; in isSymbolName()
329 if (std::isdigit(*Mangled)) in isSymbolName()
334 if (*Mangled != 'Q') in isSymbolName()
337 Mangled = decodeBackrefPos(Mangled + 1, Ret); in isSymbolName()
338 if (Mangled == nullptr || Ret > Qref - Str) in isSymbolName()
345 const char *Mangled) { in parseMangle() argument
355 Mangled += 2; in parseMangle()
357 Mangled = parseQualified(Demangled, Mangled); in parseMangle()
359 if (Mangled != nullptr) { in parseMangle()
361 if (*Mangled == 'Z') in parseMangle()
362 ++Mangled; in parseMangle()
364 Mangled = parseType(Mangled); in parseMangle()
368 return Mangled; in parseMangle()
372 const char *Mangled) { in parseQualified() argument
391 if (*Mangled == '0') { in parseQualified()
393 ++Mangled; in parseQualified()
394 while (*Mangled == '0'); in parseQualified()
403 Mangled = parseIdentifier(Demangled, Mangled); in parseQualified()
405 } while (Mangled && isSymbolName(Mangled)); in parseQualified()
407 return Mangled; in parseQualified()
411 const char *Mangled) { in parseIdentifier() argument
414 if (Mangled == nullptr || *Mangled == '\0') in parseIdentifier()
417 if (*Mangled == 'Q') in parseIdentifier()
418 return parseSymbolBackref(Demangled, Mangled); in parseIdentifier()
422 const char *Endptr = decodeNumber(Mangled, Len); in parseIdentifier()
430 Mangled = Endptr; in parseIdentifier()
437 if (Len >= 4 && Mangled[0] == '_' && Mangled[1] == '_' && Mangled[2] == 'S') { in parseIdentifier()
438 const char *NumPtr = Mangled + 3; in parseIdentifier()
439 while (NumPtr < (Mangled + Len) && std::isdigit(*NumPtr)) in parseIdentifier()
442 if (Mangled + Len == NumPtr) { in parseIdentifier()
444 Mangled += Len; in parseIdentifier()
445 return parseIdentifier(Demangled, Mangled); in parseIdentifier()
451 return parseLName(Demangled, Mangled, Len); in parseIdentifier()
454 const char *Demangler::parseType(const char *Mangled) { in parseType() argument
455 if (*Mangled == '\0') in parseType()
458 switch (*Mangled) { in parseType()
467 ++Mangled; in parseType()
469 return Mangled; in parseType()
475 return parseTypeBackref(Mangled); in parseType()
482 const char *Demangler::parseLName(OutputBuffer *Demangled, const char *Mangled, in parseLName() argument
486 if (strncmp(Mangled, "__initZ", Len + 1) == 0) { in parseLName()
490 Mangled += Len; in parseLName()
491 return Mangled; in parseLName()
493 if (strncmp(Mangled, "__vtblZ", Len + 1) == 0) { in parseLName()
497 Mangled += Len; in parseLName()
498 return Mangled; in parseLName()
503 if (strncmp(Mangled, "__ClassZ", Len + 1) == 0) { in parseLName()
507 Mangled += Len; in parseLName()
508 return Mangled; in parseLName()
513 if (strncmp(Mangled, "__InterfaceZ", Len + 1) == 0) { in parseLName()
517 Mangled += Len; in parseLName()
518 return Mangled; in parseLName()
523 if (strncmp(Mangled, "__ModuleInfoZ", Len + 1) == 0) { in parseLName()
527 Mangled += Len; in parseLName()
528 return Mangled; in parseLName()
533 *Demangled << StringView(Mangled, Len); in parseLName()
534 Mangled += Len; in parseLName()
536 return Mangled; in parseLName()
539 Demangler::Demangler(const char *Mangled) in Demangler() argument
540 : Str(Mangled), LastBackref(strlen(Mangled)) {} in Demangler()