Lines Matching refs:Mangled

36   Demangler(std::string_view Mangled);
58 void parseMangle(OutputBuffer *Demangled, std::string_view &Mangled);
68 void decodeNumber(std::string_view &Mangled, unsigned long &Ret);
81 bool decodeBackrefPos(std::string_view &Mangled, long &Ret);
91 bool decodeBackref(std::string_view &Mangled, std::string_view &Ret);
101 void parseSymbolBackref(OutputBuffer *Demangled, std::string_view &Mangled);
110 void parseTypeBackref(std::string_view &Mangled);
119 bool isSymbolName(std::string_view Mangled);
128 void parseIdentifier(OutputBuffer *Demangled, std::string_view &Mangled);
139 void parseLName(OutputBuffer *Demangled, std::string_view &Mangled,
149 void parseQualified(OutputBuffer *Demangled, std::string_view &Mangled);
159 bool parseType(std::string_view &Mangled);
169 void Demangler::decodeNumber(std::string_view &Mangled, unsigned long &Ret) { in decodeNumber() argument
171 if (Mangled.empty()) { in decodeNumber()
172 Mangled = {}; in decodeNumber()
176 if (!std::isdigit(Mangled.front())) { in decodeNumber()
177 Mangled = {}; in decodeNumber()
184 unsigned long Digit = Mangled[0] - '0'; in decodeNumber()
188 Mangled = {}; in decodeNumber()
193 Mangled.remove_prefix(1); in decodeNumber()
194 } while (!Mangled.empty() && std::isdigit(Mangled.front())); in decodeNumber()
196 if (Mangled.empty()) { in decodeNumber()
197 Mangled = {}; in decodeNumber()
204 bool Demangler::decodeBackrefPos(std::string_view &Mangled, long &Ret) { in decodeBackrefPos() argument
206 if (Mangled.empty()) { in decodeBackrefPos()
207 Mangled = {}; in decodeBackrefPos()
222 while (!Mangled.empty() && std::isalpha(Mangled.front())) { in decodeBackrefPos()
229 if (Mangled[0] >= 'a' && Mangled[0] <= 'z') { in decodeBackrefPos()
230 Val += Mangled[0] - 'a'; in decodeBackrefPos()
234 Mangled.remove_prefix(1); in decodeBackrefPos()
238 Val += Mangled[0] - 'A'; in decodeBackrefPos()
239 Mangled.remove_prefix(1); in decodeBackrefPos()
242 Mangled = {}; in decodeBackrefPos()
246 bool Demangler::decodeBackref(std::string_view &Mangled, in decodeBackref() argument
248 assert(!Mangled.empty() && Mangled.front() == 'Q' && in decodeBackref()
253 const char *Qpos = Mangled.data(); in decodeBackref()
255 Mangled.remove_prefix(1); in decodeBackref()
257 if (!decodeBackrefPos(Mangled, RefPos)) { in decodeBackref()
258 Mangled = {}; in decodeBackref()
263 Mangled = {}; in decodeBackref()
274 std::string_view &Mangled) { in parseSymbolBackref() argument
283 if (!decodeBackref(Mangled, Backref)) { in parseSymbolBackref()
284 Mangled = {}; in parseSymbolBackref()
291 Mangled = {}; in parseSymbolBackref()
297 Mangled = {}; in parseSymbolBackref()
300 void Demangler::parseTypeBackref(std::string_view &Mangled) { in parseTypeBackref() argument
308 if (Mangled.data() - Str.data() >= LastBackref) { in parseTypeBackref()
309 Mangled = {}; in parseTypeBackref()
314 LastBackref = Mangled.data() - Str.data(); in parseTypeBackref()
318 if (!decodeBackref(Mangled, Backref)) { in parseTypeBackref()
319 Mangled = {}; in parseTypeBackref()
325 Mangled = {}; in parseTypeBackref()
331 Mangled = {}; in parseTypeBackref()
336 Mangled = {}; in parseTypeBackref()
339 bool Demangler::isSymbolName(std::string_view Mangled) { in isSymbolName() argument
341 const char *Qref = Mangled.data(); in isSymbolName()
343 if (std::isdigit(Mangled.front())) in isSymbolName()
348 if (Mangled.front() != 'Q') in isSymbolName()
351 Mangled.remove_prefix(1); in isSymbolName()
352 bool Valid = decodeBackrefPos(Mangled, Ret); in isSymbolName()
360 std::string_view &Mangled) { in parseMangle() argument
370 Mangled.remove_prefix(2); in parseMangle()
372 parseQualified(Demangled, Mangled); in parseMangle()
374 if (Mangled.empty()) { in parseMangle()
375 Mangled = {}; in parseMangle()
380 if (Mangled.front() == 'Z') { in parseMangle()
381 Mangled.remove_prefix(1); in parseMangle()
382 } else if (!parseType(Mangled)) in parseMangle()
383 Mangled = {}; in parseMangle()
387 std::string_view &Mangled) { in parseQualified() argument
406 if (!Mangled.empty() && Mangled.front() == '0') { in parseQualified()
408 Mangled.remove_prefix(1); in parseQualified()
409 while (!Mangled.empty() && Mangled.front() == '0'); in parseQualified()
418 parseIdentifier(Demangled, Mangled); in parseQualified()
419 } while (!Mangled.empty() && isSymbolName(Mangled)); in parseQualified()
423 std::string_view &Mangled) { in parseIdentifier() argument
424 if (Mangled.empty()) { in parseIdentifier()
425 Mangled = {}; in parseIdentifier()
429 if (Mangled.front() == 'Q') in parseIdentifier()
430 return parseSymbolBackref(Demangled, Mangled); in parseIdentifier()
435 decodeNumber(Mangled, Len); in parseIdentifier()
437 if (Mangled.empty()) { in parseIdentifier()
438 Mangled = {}; in parseIdentifier()
441 if (!Len || Mangled.length() < Len) { in parseIdentifier()
442 Mangled = {}; in parseIdentifier()
451 if (Len >= 4 && starts_with(Mangled, "__S")) { in parseIdentifier()
452 const size_t SuffixLen = Mangled.length() - Len; in parseIdentifier()
453 std::string_view P = Mangled.substr(3); in parseIdentifier()
458 Mangled.remove_prefix(Len); in parseIdentifier()
459 return parseIdentifier(Demangled, Mangled); in parseIdentifier()
465 parseLName(Demangled, Mangled, Len); in parseIdentifier()
468 bool Demangler::parseType(std::string_view &Mangled) { in parseType() argument
469 if (Mangled.empty()) { in parseType()
470 Mangled = {}; in parseType()
474 switch (Mangled.front()) { in parseType()
483 Mangled.remove_prefix(1); in parseType()
491 parseTypeBackref(Mangled); in parseType()
496 Mangled = {}; in parseType()
501 void Demangler::parseLName(OutputBuffer *Demangled, std::string_view &Mangled, in parseLName() argument
505 if (starts_with(Mangled, "__initZ")) { in parseLName()
509 Mangled.remove_prefix(Len); in parseLName()
512 if (starts_with(Mangled, "__vtblZ")) { in parseLName()
516 Mangled.remove_prefix(Len); in parseLName()
522 if (starts_with(Mangled, "__ClassZ")) { in parseLName()
526 Mangled.remove_prefix(Len); in parseLName()
532 if (starts_with(Mangled, "__InterfaceZ")) { in parseLName()
536 Mangled.remove_prefix(Len); in parseLName()
542 if (starts_with(Mangled, "__ModuleInfoZ")) { in parseLName()
546 Mangled.remove_prefix(Len); in parseLName()
552 *Demangled << Mangled.substr(0, Len); in parseLName()
553 Mangled.remove_prefix(Len); in parseLName()
556 Demangler::Demangler(std::string_view Mangled) in Demangler() argument
557 : Str(Mangled), LastBackref(Mangled.length()) {} in Demangler()