Lines Matching refs:MangledName

56 static bool isMemberPointer(std::string_view MangledName, bool &Error) {  in isMemberPointer()  argument
58 const char F = MangledName.front(); in isMemberPointer()
59 MangledName.remove_prefix(1); in isMemberPointer()
84 if (startsWithDigit(MangledName)) { in isMemberPointer()
85 if (MangledName[0] != '6' && MangledName[0] != '8') { in isMemberPointer()
89 return (MangledName[0] == '8'); in isMemberPointer()
94 consumeFront(MangledName, 'E'); // 64-bit in isMemberPointer()
95 consumeFront(MangledName, 'I'); // restrict in isMemberPointer()
96 consumeFront(MangledName, 'F'); // unaligned in isMemberPointer()
98 if (MangledName.empty()) { in isMemberPointer()
104 switch (MangledName.front()) { in isMemberPointer()
122 consumeSpecialIntrinsicKind(std::string_view &MangledName) { in consumeSpecialIntrinsicKind() argument
123 if (consumeFront(MangledName, "?_7")) in consumeSpecialIntrinsicKind()
125 if (consumeFront(MangledName, "?_8")) in consumeSpecialIntrinsicKind()
127 if (consumeFront(MangledName, "?_9")) in consumeSpecialIntrinsicKind()
129 if (consumeFront(MangledName, "?_A")) in consumeSpecialIntrinsicKind()
131 if (consumeFront(MangledName, "?_B")) in consumeSpecialIntrinsicKind()
133 if (consumeFront(MangledName, "?_C")) in consumeSpecialIntrinsicKind()
135 if (consumeFront(MangledName, "?_P")) in consumeSpecialIntrinsicKind()
137 if (consumeFront(MangledName, "?_R0")) in consumeSpecialIntrinsicKind()
139 if (consumeFront(MangledName, "?_R1")) in consumeSpecialIntrinsicKind()
141 if (consumeFront(MangledName, "?_R2")) in consumeSpecialIntrinsicKind()
143 if (consumeFront(MangledName, "?_R3")) in consumeSpecialIntrinsicKind()
145 if (consumeFront(MangledName, "?_R4")) in consumeSpecialIntrinsicKind()
147 if (consumeFront(MangledName, "?_S")) in consumeSpecialIntrinsicKind()
149 if (consumeFront(MangledName, "?__E")) in consumeSpecialIntrinsicKind()
151 if (consumeFront(MangledName, "?__F")) in consumeSpecialIntrinsicKind()
153 if (consumeFront(MangledName, "?__J")) in consumeSpecialIntrinsicKind()
233 demangleFunctionRefQualifier(std::string_view &MangledName) { in demangleFunctionRefQualifier() argument
234 if (consumeFront(MangledName, 'G')) in demangleFunctionRefQualifier()
236 else if (consumeFront(MangledName, 'H')) in demangleFunctionRefQualifier()
242 demanglePointerCVQualifiers(std::string_view &MangledName) { in demanglePointerCVQualifiers() argument
243 if (consumeFront(MangledName, "$$Q")) in demanglePointerCVQualifiers()
246 const char F = MangledName.front(); in demanglePointerCVQualifiers()
247 MangledName.remove_prefix(1); in demanglePointerCVQualifiers()
277 Demangler::demangleSpecialTableSymbolNode(std::string_view &MangledName, in demangleSpecialTableSymbolNode() argument
296 QualifiedNameNode *QN = demangleNameScopeChain(MangledName, NI); in demangleSpecialTableSymbolNode()
300 if (MangledName.empty()) { in demangleSpecialTableSymbolNode()
304 char Front = MangledName.front(); in demangleSpecialTableSymbolNode()
305 MangledName.remove_prefix(1); in demangleSpecialTableSymbolNode()
311 std::tie(STSN->Quals, IsMember) = demangleQualifiers(MangledName); in demangleSpecialTableSymbolNode()
312 if (!consumeFront(MangledName, '@')) in demangleSpecialTableSymbolNode()
313 STSN->TargetName = demangleFullyQualifiedTypeName(MangledName); in demangleSpecialTableSymbolNode()
318 Demangler::demangleLocalStaticGuard(std::string_view &MangledName, in demangleLocalStaticGuard() argument
323 QualifiedNameNode *QN = demangleNameScopeChain(MangledName, LSGI); in demangleLocalStaticGuard()
328 if (consumeFront(MangledName, "4IA")) in demangleLocalStaticGuard()
330 else if (consumeFront(MangledName, "5")) in demangleLocalStaticGuard()
337 if (!MangledName.empty()) in demangleLocalStaticGuard()
338 LSGI->ScopeIndex = demangleUnsigned(MangledName); in demangleLocalStaticGuard()
376 std::string_view &MangledName, in demangleUntypedVariable() argument
379 QualifiedNameNode *QN = demangleNameScopeChain(MangledName, NI); in demangleUntypedVariable()
382 if (consumeFront(MangledName, "8")) in demangleUntypedVariable()
391 std::string_view &MangledName) { in demangleRttiBaseClassDescriptorNode() argument
394 RBCDN->NVOffset = demangleUnsigned(MangledName); in demangleRttiBaseClassDescriptorNode()
395 RBCDN->VBPtrOffset = demangleSigned(MangledName); in demangleRttiBaseClassDescriptorNode()
396 RBCDN->VBTableOffset = demangleUnsigned(MangledName); in demangleRttiBaseClassDescriptorNode()
397 RBCDN->Flags = demangleUnsigned(MangledName); in demangleRttiBaseClassDescriptorNode()
402 VSN->Name = demangleNameScopeChain(MangledName, RBCDN); in demangleRttiBaseClassDescriptorNode()
403 consumeFront(MangledName, '8'); in demangleRttiBaseClassDescriptorNode()
408 Demangler::demangleInitFiniStub(std::string_view &MangledName, in demangleInitFiniStub() argument
415 if (consumeFront(MangledName, '?')) in demangleInitFiniStub()
418 SymbolNode *Symbol = demangleDeclarator(MangledName); in demangleInitFiniStub()
433 if (consumeFront(MangledName, '@')) in demangleInitFiniStub()
439 FSN = demangleFunctionEncoding(MangledName); in demangleInitFiniStub()
457 SymbolNode *Demangler::demangleSpecialIntrinsic(std::string_view &MangledName) { in demangleSpecialIntrinsic() argument
458 SpecialIntrinsicKind SIK = consumeSpecialIntrinsicKind(MangledName); in demangleSpecialIntrinsic()
464 return demangleStringLiteral(MangledName); in demangleSpecialIntrinsic()
469 return demangleSpecialTableSymbolNode(MangledName, SIK); in demangleSpecialIntrinsic()
471 return demangleVcallThunkNode(MangledName); in demangleSpecialIntrinsic()
473 return demangleLocalStaticGuard(MangledName, /*IsThread=*/false); in demangleSpecialIntrinsic()
475 return demangleLocalStaticGuard(MangledName, /*IsThread=*/true); in demangleSpecialIntrinsic()
477 TypeNode *T = demangleType(MangledName, QualifierMangleMode::Result); in demangleSpecialIntrinsic()
480 if (!consumeFront(MangledName, "@8")) in demangleSpecialIntrinsic()
482 if (!MangledName.empty()) in demangleSpecialIntrinsic()
487 return demangleUntypedVariable(Arena, MangledName, in demangleSpecialIntrinsic()
490 return demangleUntypedVariable(Arena, MangledName, in demangleSpecialIntrinsic()
493 return demangleRttiBaseClassDescriptorNode(Arena, MangledName); in demangleSpecialIntrinsic()
495 return demangleInitFiniStub(MangledName, /*IsDestructor=*/false); in demangleSpecialIntrinsic()
497 return demangleInitFiniStub(MangledName, /*IsDestructor=*/true); in demangleSpecialIntrinsic()
511 Demangler::demangleFunctionIdentifierCode(std::string_view &MangledName) { in demangleFunctionIdentifierCode() argument
512 assert(llvm::itanium_demangle::starts_with(MangledName, '?')); in demangleFunctionIdentifierCode()
513 MangledName.remove_prefix(1); in demangleFunctionIdentifierCode()
514 if (MangledName.empty()) { in demangleFunctionIdentifierCode()
519 if (consumeFront(MangledName, "__")) in demangleFunctionIdentifierCode()
521 MangledName, FunctionIdentifierCodeGroup::DoubleUnder); in demangleFunctionIdentifierCode()
522 if (consumeFront(MangledName, "_")) in demangleFunctionIdentifierCode()
523 return demangleFunctionIdentifierCode(MangledName, in demangleFunctionIdentifierCode()
525 return demangleFunctionIdentifierCode(MangledName, in demangleFunctionIdentifierCode()
530 Demangler::demangleStructorIdentifier(std::string_view &MangledName, in demangleStructorIdentifier() argument
538 Demangler::demangleConversionOperatorIdentifier(std::string_view &MangledName) { in demangleConversionOperatorIdentifier() argument
545 Demangler::demangleLiteralOperatorIdentifier(std::string_view &MangledName) { in demangleLiteralOperatorIdentifier() argument
548 N->Name = demangleSimpleString(MangledName, /*Memorize=*/false); in demangleLiteralOperatorIdentifier()
693 Demangler::demangleFunctionIdentifierCode(std::string_view &MangledName, in demangleFunctionIdentifierCode() argument
695 if (MangledName.empty()) { in demangleFunctionIdentifierCode()
699 const char CH = MangledName.front(); in demangleFunctionIdentifierCode()
702 MangledName.remove_prefix(1); in demangleFunctionIdentifierCode()
706 return demangleStructorIdentifier(MangledName, CH == '1'); in demangleFunctionIdentifierCode()
708 return demangleConversionOperatorIdentifier(MangledName); in demangleFunctionIdentifierCode()
714 MangledName.remove_prefix(1); in demangleFunctionIdentifierCode()
718 MangledName.remove_prefix(1); in demangleFunctionIdentifierCode()
721 return demangleLiteralOperatorIdentifier(MangledName); in demangleFunctionIdentifierCode()
731 SymbolNode *Demangler::demangleEncodedSymbol(std::string_view &MangledName, in demangleEncodedSymbol() argument
733 if (MangledName.empty()) { in demangleEncodedSymbol()
739 switch (MangledName.front()) { in demangleEncodedSymbol()
745 StorageClass SC = demangleVariableStorageClass(MangledName); in demangleEncodedSymbol()
746 return demangleVariableEncoding(MangledName, SC); in demangleEncodedSymbol()
749 FunctionSymbolNode *FSN = demangleFunctionEncoding(MangledName); in demangleEncodedSymbol()
761 SymbolNode *Demangler::demangleDeclarator(std::string_view &MangledName) { in demangleDeclarator() argument
764 QualifiedNameNode *QN = demangleFullyQualifiedSymbolName(MangledName); in demangleDeclarator()
768 SymbolNode *Symbol = demangleEncodedSymbol(MangledName, QN); in demangleDeclarator()
785 SymbolNode *Demangler::demangleMD5Name(std::string_view &MangledName) { in demangleMD5Name() argument
786 assert(llvm::itanium_demangle::starts_with(MangledName, "??@")); in demangleMD5Name()
790 size_t MD5Last = MangledName.find('@', strlen("??@")); in demangleMD5Name()
795 const char *Start = MangledName.data(); in demangleMD5Name()
796 const size_t StartSize = MangledName.size(); in demangleMD5Name()
797 MangledName.remove_prefix(MD5Last + 1); in demangleMD5Name()
809 consumeFront(MangledName, "??_R4@"); in demangleMD5Name()
811 assert(MangledName.size() < StartSize); in demangleMD5Name()
812 const size_t Count = StartSize - MangledName.size(); in demangleMD5Name()
820 SymbolNode *Demangler::demangleTypeinfoName(std::string_view &MangledName) { in demangleTypeinfoName() argument
821 assert(llvm::itanium_demangle::starts_with(MangledName, '.')); in demangleTypeinfoName()
822 consumeFront(MangledName, '.'); in demangleTypeinfoName()
824 TypeNode *T = demangleType(MangledName, QualifierMangleMode::Result); in demangleTypeinfoName()
825 if (Error || !MangledName.empty()) { in demangleTypeinfoName()
833 SymbolNode *Demangler::parse(std::string_view &MangledName) { in parse() argument
837 if (llvm::itanium_demangle::starts_with(MangledName, '.')) in parse()
838 return demangleTypeinfoName(MangledName); in parse()
840 if (llvm::itanium_demangle::starts_with(MangledName, "??@")) in parse()
841 return demangleMD5Name(MangledName); in parse()
844 if (!llvm::itanium_demangle::starts_with(MangledName, '?')) { in parse()
849 consumeFront(MangledName, '?'); in parse()
853 if (SymbolNode *SI = demangleSpecialIntrinsic(MangledName)) in parse()
856 return demangleDeclarator(MangledName); in parse()
859 TagTypeNode *Demangler::parseTagUniqueName(std::string_view &MangledName) { in parseTagUniqueName() argument
860 if (!consumeFront(MangledName, ".?A")) { in parseTagUniqueName()
864 consumeFront(MangledName, ".?A"); in parseTagUniqueName()
865 if (MangledName.empty()) { in parseTagUniqueName()
870 return demangleClassType(MangledName); in parseTagUniqueName()
881 Demangler::demangleVariableEncoding(std::string_view &MangledName, in demangleVariableEncoding() argument
885 VSN->Type = demangleType(MangledName, QualifierMangleMode::Drop); in demangleVariableEncoding()
899 demanglePointerExtQualifiers(MangledName)); in demangleVariableEncoding()
902 std::tie(ExtraChildQuals, IsMember) = demangleQualifiers(MangledName); in demangleVariableEncoding()
906 demangleFullyQualifiedTypeName(MangledName); in demangleVariableEncoding()
914 VSN->Type->Quals = demangleQualifiers(MangledName).first; in demangleVariableEncoding()
933 Demangler::demangleNumber(std::string_view &MangledName) { in demangleNumber() argument
934 bool IsNegative = consumeFront(MangledName, '?'); in demangleNumber()
936 if (startsWithDigit(MangledName)) { in demangleNumber()
937 uint64_t Ret = MangledName[0] - '0' + 1; in demangleNumber()
938 MangledName.remove_prefix(1); in demangleNumber()
943 for (size_t i = 0; i < MangledName.size(); ++i) { in demangleNumber()
944 char C = MangledName[i]; in demangleNumber()
946 MangledName.remove_prefix(i + 1); in demangleNumber()
960 uint64_t Demangler::demangleUnsigned(std::string_view &MangledName) { in demangleUnsigned() argument
963 std::tie(Number, IsNegative) = demangleNumber(MangledName); in demangleUnsigned()
969 int64_t Demangler::demangleSigned(std::string_view &MangledName) { in demangleSigned() argument
972 std::tie(Number, IsNegative) = demangleNumber(MangledName); in demangleSigned()
993 Demangler::demangleBackRefName(std::string_view &MangledName) { in demangleBackRefName() argument
994 assert(startsWithDigit(MangledName)); in demangleBackRefName()
996 size_t I = MangledName[0] - '0'; in demangleBackRefName()
1002 MangledName.remove_prefix(1); in demangleBackRefName()
1017 Demangler::demangleTemplateInstantiationName(std::string_view &MangledName, in demangleTemplateInstantiationName() argument
1019 assert(llvm::itanium_demangle::starts_with(MangledName, "?$")); in demangleTemplateInstantiationName()
1020 consumeFront(MangledName, "?$"); in demangleTemplateInstantiationName()
1026 demangleUnqualifiedSymbolName(MangledName, NBB_Simple); in demangleTemplateInstantiationName()
1028 Identifier->TemplateParams = demangleTemplateParameterList(MangledName); in demangleTemplateInstantiationName()
1051 Demangler::demangleSimpleName(std::string_view &MangledName, bool Memorize) { in demangleSimpleName() argument
1052 std::string_view S = demangleSimpleString(MangledName, Memorize); in demangleSimpleName()
1068 uint8_t Demangler::demangleCharLiteral(std::string_view &MangledName) { in demangleCharLiteral() argument
1069 assert(!MangledName.empty()); in demangleCharLiteral()
1070 if (!llvm::itanium_demangle::starts_with(MangledName, '?')) { in demangleCharLiteral()
1071 const uint8_t F = MangledName.front(); in demangleCharLiteral()
1072 MangledName.remove_prefix(1); in demangleCharLiteral()
1076 MangledName.remove_prefix(1); in demangleCharLiteral()
1077 if (MangledName.empty()) in demangleCharLiteral()
1080 if (consumeFront(MangledName, '$')) { in demangleCharLiteral()
1082 if (MangledName.size() < 2) in demangleCharLiteral()
1084 std::string_view Nibbles = MangledName.substr(0, 2); in demangleCharLiteral()
1090 MangledName.remove_prefix(2); in demangleCharLiteral()
1094 if (startsWithDigit(MangledName)) { in demangleCharLiteral()
1096 char C = Lookup[MangledName[0] - '0']; in demangleCharLiteral()
1097 MangledName.remove_prefix(1); in demangleCharLiteral()
1101 if (MangledName[0] >= 'a' && MangledName[0] <= 'z') { in demangleCharLiteral()
1106 char C = Lookup[MangledName[0] - 'a']; in demangleCharLiteral()
1107 MangledName.remove_prefix(1); in demangleCharLiteral()
1111 if (MangledName[0] >= 'A' && MangledName[0] <= 'Z') { in demangleCharLiteral()
1116 char C = Lookup[MangledName[0] - 'A']; in demangleCharLiteral()
1117 MangledName.remove_prefix(1); in demangleCharLiteral()
1126 wchar_t Demangler::demangleWcharLiteral(std::string_view &MangledName) { in demangleWcharLiteral() argument
1129 C1 = demangleCharLiteral(MangledName); in demangleWcharLiteral()
1130 if (Error || MangledName.empty()) in demangleWcharLiteral()
1132 C2 = demangleCharLiteral(MangledName); in demangleWcharLiteral()
1294 Demangler::demangleVcallThunkNode(std::string_view &MangledName) { in demangleVcallThunkNode() argument
1300 FSN->Name = demangleNameScopeChain(MangledName, VTIN); in demangleVcallThunkNode()
1302 Error = !consumeFront(MangledName, "$B"); in demangleVcallThunkNode()
1304 VTIN->OffsetInVTable = demangleUnsigned(MangledName); in demangleVcallThunkNode()
1306 Error = !consumeFront(MangledName, 'A'); in demangleVcallThunkNode()
1308 FSN->Signature->CallConvention = demangleCallingConvention(MangledName); in demangleVcallThunkNode()
1313 Demangler::demangleStringLiteral(std::string_view &MangledName) { in demangleStringLiteral() argument
1326 if (!consumeFront(MangledName, "@_")) in demangleStringLiteral()
1328 if (MangledName.empty()) in demangleStringLiteral()
1332 F = MangledName.front(); in demangleStringLiteral()
1333 MangledName.remove_prefix(1); in demangleStringLiteral()
1345 std::tie(StringByteSize, IsNegative) = demangleNumber(MangledName); in demangleStringLiteral()
1350 CrcEndPos = MangledName.find('@'); in demangleStringLiteral()
1353 CRC = MangledName.substr(0, CrcEndPos); in demangleStringLiteral()
1354 MangledName.remove_prefix(CrcEndPos + 1); in demangleStringLiteral()
1355 if (MangledName.empty()) in demangleStringLiteral()
1363 while (!consumeFront(MangledName, '@')) { in demangleStringLiteral()
1364 if (MangledName.size() < 2) in demangleStringLiteral()
1366 wchar_t W = demangleWcharLiteral(MangledName); in demangleStringLiteral()
1380 while (!consumeFront(MangledName, '@')) { in demangleStringLiteral()
1381 if (MangledName.size() < 1 || BytesDecoded >= MaxStringByteLength) in demangleStringLiteral()
1383 StringBytes[BytesDecoded++] = demangleCharLiteral(MangledName); in demangleStringLiteral()
1426 std::string_view Demangler::demangleSimpleString(std::string_view &MangledName, in demangleSimpleString() argument
1429 for (size_t i = 0; i < MangledName.size(); ++i) { in demangleSimpleString()
1430 if (MangledName[i] != '@') in demangleSimpleString()
1434 S = MangledName.substr(0, i); in demangleSimpleString()
1435 MangledName.remove_prefix(i + 1); in demangleSimpleString()
1447 Demangler::demangleAnonymousNamespaceName(std::string_view &MangledName) { in demangleAnonymousNamespaceName() argument
1448 assert(llvm::itanium_demangle::starts_with(MangledName, "?A")); in demangleAnonymousNamespaceName()
1449 consumeFront(MangledName, "?A"); in demangleAnonymousNamespaceName()
1453 size_t EndPos = MangledName.find('@'); in demangleAnonymousNamespaceName()
1458 std::string_view NamespaceKey = MangledName.substr(0, EndPos); in demangleAnonymousNamespaceName()
1460 MangledName = MangledName.substr(EndPos + 1); in demangleAnonymousNamespaceName()
1465 Demangler::demangleLocallyScopedNamePiece(std::string_view &MangledName) { in demangleLocallyScopedNamePiece() argument
1466 assert(startsWithLocalScopePattern(MangledName)); in demangleLocallyScopedNamePiece()
1469 consumeFront(MangledName, '?'); in demangleLocallyScopedNamePiece()
1472 std::tie(Number, IsNegative) = demangleNumber(MangledName); in demangleLocallyScopedNamePiece()
1476 consumeFront(MangledName, '?'); in demangleLocallyScopedNamePiece()
1479 Node *Scope = parse(MangledName); in demangleLocallyScopedNamePiece()
1497 Demangler::demangleFullyQualifiedTypeName(std::string_view &MangledName) { in demangleFullyQualifiedTypeName() argument
1499 demangleUnqualifiedTypeName(MangledName, /*Memorize=*/true); in demangleFullyQualifiedTypeName()
1504 QualifiedNameNode *QN = demangleNameScopeChain(MangledName, Identifier); in demangleFullyQualifiedTypeName()
1515 Demangler::demangleFullyQualifiedSymbolName(std::string_view &MangledName) { in demangleFullyQualifiedSymbolName() argument
1522 demangleUnqualifiedSymbolName(MangledName, NBB_Simple); in demangleFullyQualifiedSymbolName()
1526 QualifiedNameNode *QN = demangleNameScopeChain(MangledName, Identifier); in demangleFullyQualifiedSymbolName()
1545 Demangler::demangleUnqualifiedTypeName(std::string_view &MangledName, in demangleUnqualifiedTypeName() argument
1551 if (startsWithDigit(MangledName)) in demangleUnqualifiedTypeName()
1552 return demangleBackRefName(MangledName); in demangleUnqualifiedTypeName()
1554 if (llvm::itanium_demangle::starts_with(MangledName, "?$")) in demangleUnqualifiedTypeName()
1555 return demangleTemplateInstantiationName(MangledName, NBB_Template); in demangleUnqualifiedTypeName()
1557 return demangleSimpleName(MangledName, Memorize); in demangleUnqualifiedTypeName()
1561 Demangler::demangleUnqualifiedSymbolName(std::string_view &MangledName, in demangleUnqualifiedSymbolName() argument
1563 if (startsWithDigit(MangledName)) in demangleUnqualifiedSymbolName()
1564 return demangleBackRefName(MangledName); in demangleUnqualifiedSymbolName()
1565 if (llvm::itanium_demangle::starts_with(MangledName, "?$")) in demangleUnqualifiedSymbolName()
1566 return demangleTemplateInstantiationName(MangledName, NBB); in demangleUnqualifiedSymbolName()
1567 if (llvm::itanium_demangle::starts_with(MangledName, '?')) in demangleUnqualifiedSymbolName()
1568 return demangleFunctionIdentifierCode(MangledName); in demangleUnqualifiedSymbolName()
1569 return demangleSimpleName(MangledName, /*Memorize=*/(NBB & NBB_Simple) != 0); in demangleUnqualifiedSymbolName()
1573 Demangler::demangleNameScopePiece(std::string_view &MangledName) { in demangleNameScopePiece() argument
1574 if (startsWithDigit(MangledName)) in demangleNameScopePiece()
1575 return demangleBackRefName(MangledName); in demangleNameScopePiece()
1577 if (llvm::itanium_demangle::starts_with(MangledName, "?$")) in demangleNameScopePiece()
1578 return demangleTemplateInstantiationName(MangledName, NBB_Template); in demangleNameScopePiece()
1580 if (llvm::itanium_demangle::starts_with(MangledName, "?A")) in demangleNameScopePiece()
1581 return demangleAnonymousNamespaceName(MangledName); in demangleNameScopePiece()
1583 if (startsWithLocalScopePattern(MangledName)) in demangleNameScopePiece()
1584 return demangleLocallyScopedNamePiece(MangledName); in demangleNameScopePiece()
1586 return demangleSimpleName(MangledName, /*Memorize=*/true); in demangleNameScopePiece()
1602 Demangler::demangleNameScopeChain(std::string_view &MangledName, in demangleNameScopeChain() argument
1609 while (!consumeFront(MangledName, "@")) { in demangleNameScopeChain()
1615 if (MangledName.empty()) { in demangleNameScopeChain()
1621 IdentifierNode *Elem = demangleNameScopePiece(MangledName); in demangleNameScopeChain()
1633 FuncClass Demangler::demangleFunctionClass(std::string_view &MangledName) { in demangleFunctionClass() argument
1634 const char F = MangledName.front(); in demangleFunctionClass()
1635 MangledName.remove_prefix(1); in demangleFunctionClass()
1693 if (consumeFront(MangledName, 'R')) in demangleFunctionClass()
1695 if (MangledName.empty()) in demangleFunctionClass()
1697 const char F = MangledName.front(); in demangleFunctionClass()
1698 MangledName.remove_prefix(1); in demangleFunctionClass()
1721 Demangler::demangleCallingConvention(std::string_view &MangledName) { in demangleCallingConvention() argument
1722 if (MangledName.empty()) { in demangleCallingConvention()
1727 const char F = MangledName.front(); in demangleCallingConvention()
1728 MangledName.remove_prefix(1); in demangleCallingConvention()
1763 Demangler::demangleVariableStorageClass(std::string_view &MangledName) { in demangleVariableStorageClass() argument
1764 assert(MangledName.front() >= '0' && MangledName.front() <= '4'); in demangleVariableStorageClass()
1766 const char F = MangledName.front(); in demangleVariableStorageClass()
1767 MangledName.remove_prefix(1); in demangleVariableStorageClass()
1784 Demangler::demangleQualifiers(std::string_view &MangledName) { in demangleQualifiers() argument
1785 if (MangledName.empty()) { in demangleQualifiers()
1790 const char F = MangledName.front(); in demangleQualifiers()
1791 MangledName.remove_prefix(1); in demangleQualifiers()
1818 TypeNode *Demangler::demangleType(std::string_view &MangledName, in demangleType() argument
1823 std::tie(Quals, IsMember) = demangleQualifiers(MangledName); in demangleType()
1825 if (consumeFront(MangledName, '?')) in demangleType()
1826 std::tie(Quals, IsMember) = demangleQualifiers(MangledName); in demangleType()
1829 if (MangledName.empty()) { in demangleType()
1835 if (isTagType(MangledName)) in demangleType()
1836 Ty = demangleClassType(MangledName); in demangleType()
1837 else if (isPointerType(MangledName)) { in demangleType()
1838 if (isMemberPointer(MangledName, Error)) in demangleType()
1839 Ty = demangleMemberPointerType(MangledName); in demangleType()
1841 Ty = demanglePointerType(MangledName); in demangleType()
1844 } else if (isArrayType(MangledName)) in demangleType()
1845 Ty = demangleArrayType(MangledName); in demangleType()
1846 else if (isFunctionType(MangledName)) { in demangleType()
1847 if (consumeFront(MangledName, "$$A8@@")) in demangleType()
1848 Ty = demangleFunctionType(MangledName, true); in demangleType()
1850 assert(llvm::itanium_demangle::starts_with(MangledName, "$$A6")); in demangleType()
1851 consumeFront(MangledName, "$$A6"); in demangleType()
1852 Ty = demangleFunctionType(MangledName, false); in demangleType()
1854 } else if (isCustomType(MangledName)) { in demangleType()
1855 Ty = demangleCustomType(MangledName); in demangleType()
1857 Ty = demanglePrimitiveType(MangledName); in demangleType()
1866 bool Demangler::demangleThrowSpecification(std::string_view &MangledName) { in demangleThrowSpecification() argument
1867 if (consumeFront(MangledName, "_E")) in demangleThrowSpecification()
1869 if (consumeFront(MangledName, 'Z')) in demangleThrowSpecification()
1877 Demangler::demangleFunctionType(std::string_view &MangledName, in demangleFunctionType() argument
1882 FTy->Quals = demanglePointerExtQualifiers(MangledName); in demangleFunctionType()
1883 FTy->RefQualifier = demangleFunctionRefQualifier(MangledName); in demangleFunctionType()
1884 FTy->Quals = Qualifiers(FTy->Quals | demangleQualifiers(MangledName).first); in demangleFunctionType()
1888 FTy->CallConvention = demangleCallingConvention(MangledName); in demangleFunctionType()
1892 bool IsStructor = consumeFront(MangledName, '@'); in demangleFunctionType()
1894 FTy->ReturnType = demangleType(MangledName, QualifierMangleMode::Result); in demangleFunctionType()
1896 FTy->Params = demangleFunctionParameterList(MangledName, FTy->IsVariadic); in demangleFunctionType()
1898 FTy->IsNoexcept = demangleThrowSpecification(MangledName); in demangleFunctionType()
1904 Demangler::demangleFunctionEncoding(std::string_view &MangledName) { in demangleFunctionEncoding() argument
1906 if (consumeFront(MangledName, "$$J0")) in demangleFunctionEncoding()
1909 if (MangledName.empty()) { in demangleFunctionEncoding()
1914 FuncClass FC = demangleFunctionClass(MangledName); in demangleFunctionEncoding()
1921 TTN->ThisAdjust.StaticOffset = demangleSigned(MangledName); in demangleFunctionEncoding()
1925 TTN->ThisAdjust.VBPtrOffset = demangleSigned(MangledName); in demangleFunctionEncoding()
1926 TTN->ThisAdjust.VBOffsetOffset = demangleSigned(MangledName); in demangleFunctionEncoding()
1928 TTN->ThisAdjust.VtordispOffset = demangleSigned(MangledName); in demangleFunctionEncoding()
1929 TTN->ThisAdjust.StaticOffset = demangleSigned(MangledName); in demangleFunctionEncoding()
1939 FSN = demangleFunctionType(MangledName, HasThisQuals); in demangleFunctionEncoding()
1956 CustomTypeNode *Demangler::demangleCustomType(std::string_view &MangledName) { in demangleCustomType() argument
1957 assert(llvm::itanium_demangle::starts_with(MangledName, '?')); in demangleCustomType()
1958 MangledName.remove_prefix(1); in demangleCustomType()
1961 CTN->Identifier = demangleUnqualifiedTypeName(MangledName, /*Memorize=*/true); in demangleCustomType()
1962 if (!consumeFront(MangledName, '@')) in demangleCustomType()
1971 Demangler::demanglePrimitiveType(std::string_view &MangledName) { in demanglePrimitiveType() argument
1972 if (consumeFront(MangledName, "$$T")) in demanglePrimitiveType()
1975 const char F = MangledName.front(); in demanglePrimitiveType()
1976 MangledName.remove_prefix(1); in demanglePrimitiveType()
2005 if (MangledName.empty()) { in demanglePrimitiveType()
2009 const char F = MangledName.front(); in demanglePrimitiveType()
2010 MangledName.remove_prefix(1); in demanglePrimitiveType()
2034 TagTypeNode *Demangler::demangleClassType(std::string_view &MangledName) { in demangleClassType() argument
2037 const char F = MangledName.front(); in demangleClassType()
2038 MangledName.remove_prefix(1); in demangleClassType()
2050 if (!consumeFront(MangledName, '4')) { in demangleClassType()
2060 TT->QualifiedName = demangleFullyQualifiedTypeName(MangledName); in demangleClassType()
2066 PointerTypeNode *Demangler::demanglePointerType(std::string_view &MangledName) { in demanglePointerType() argument
2070 demanglePointerCVQualifiers(MangledName); in demanglePointerType()
2072 if (consumeFront(MangledName, "6")) { in demanglePointerType()
2073 Pointer->Pointee = demangleFunctionType(MangledName, false); in demanglePointerType()
2077 Qualifiers ExtQuals = demanglePointerExtQualifiers(MangledName); in demanglePointerType()
2080 Pointer->Pointee = demangleType(MangledName, QualifierMangleMode::Mangle); in demanglePointerType()
2085 Demangler::demangleMemberPointerType(std::string_view &MangledName) { in demangleMemberPointerType() argument
2089 demanglePointerCVQualifiers(MangledName); in demangleMemberPointerType()
2092 Qualifiers ExtQuals = demanglePointerExtQualifiers(MangledName); in demangleMemberPointerType()
2097 if (consumeFront(MangledName, "8")) { in demangleMemberPointerType()
2098 Pointer->ClassParent = demangleFullyQualifiedTypeName(MangledName); in demangleMemberPointerType()
2099 Pointer->Pointee = demangleFunctionType(MangledName, true); in demangleMemberPointerType()
2103 std::tie(PointeeQuals, IsMember) = demangleQualifiers(MangledName); in demangleMemberPointerType()
2105 Pointer->ClassParent = demangleFullyQualifiedTypeName(MangledName); in demangleMemberPointerType()
2107 Pointer->Pointee = demangleType(MangledName, QualifierMangleMode::Drop); in demangleMemberPointerType()
2116 Demangler::demanglePointerExtQualifiers(std::string_view &MangledName) { in demanglePointerExtQualifiers() argument
2118 if (consumeFront(MangledName, 'E')) in demanglePointerExtQualifiers()
2120 if (consumeFront(MangledName, 'I')) in demanglePointerExtQualifiers()
2122 if (consumeFront(MangledName, 'F')) in demanglePointerExtQualifiers()
2128 ArrayTypeNode *Demangler::demangleArrayType(std::string_view &MangledName) { in demangleArrayType() argument
2129 assert(MangledName.front() == 'Y'); in demangleArrayType()
2130 MangledName.remove_prefix(1); in demangleArrayType()
2134 std::tie(Rank, IsNegative) = demangleNumber(MangledName); in demangleArrayType()
2146 std::tie(D, IsNegative) = demangleNumber(MangledName); in demangleArrayType()
2159 if (consumeFront(MangledName, "$$C")) { in demangleArrayType()
2161 std::tie(ATy->Quals, IsMember) = demangleQualifiers(MangledName); in demangleArrayType()
2168 ATy->ElementType = demangleType(MangledName, QualifierMangleMode::Drop); in demangleArrayType()
2174 Demangler::demangleFunctionParameterList(std::string_view &MangledName, in demangleFunctionParameterList() argument
2177 if (consumeFront(MangledName, 'X')) in demangleFunctionParameterList()
2183 while (!Error && !llvm::itanium_demangle::starts_with(MangledName, '@') && in demangleFunctionParameterList()
2184 !llvm::itanium_demangle::starts_with(MangledName, 'Z')) { in demangleFunctionParameterList()
2187 if (startsWithDigit(MangledName)) { in demangleFunctionParameterList()
2188 size_t N = MangledName[0] - '0'; in demangleFunctionParameterList()
2193 MangledName.remove_prefix(1); in demangleFunctionParameterList()
2201 size_t OldSize = MangledName.size(); in demangleFunctionParameterList()
2204 TypeNode *TN = demangleType(MangledName, QualifierMangleMode::Drop); in demangleFunctionParameterList()
2210 size_t CharsConsumed = OldSize - MangledName.size(); in demangleFunctionParameterList()
2228 if (consumeFront(MangledName, '@')) in demangleFunctionParameterList()
2231 if (consumeFront(MangledName, 'Z')) { in demangleFunctionParameterList()
2240 Demangler::demangleTemplateParameterList(std::string_view &MangledName) { in demangleTemplateParameterList() argument
2245 while (!llvm::itanium_demangle::starts_with(MangledName, '@')) { in demangleTemplateParameterList()
2246 if (consumeFront(MangledName, "$S") || consumeFront(MangledName, "$$V") || in demangleTemplateParameterList()
2247 consumeFront(MangledName, "$$$V") || consumeFront(MangledName, "$$Z")) { in demangleTemplateParameterList()
2260 if (consumeFront(MangledName, "$$Y")) { in demangleTemplateParameterList()
2262 TP.N = demangleFullyQualifiedTypeName(MangledName); in demangleTemplateParameterList()
2263 } else if (consumeFront(MangledName, "$$B")) { in demangleTemplateParameterList()
2265 TP.N = demangleType(MangledName, QualifierMangleMode::Drop); in demangleTemplateParameterList()
2266 } else if (consumeFront(MangledName, "$$C")) { in demangleTemplateParameterList()
2268 TP.N = demangleType(MangledName, QualifierMangleMode::Mangle); in demangleTemplateParameterList()
2269 } else if (llvm::itanium_demangle::starts_with(MangledName, "$1") || in demangleTemplateParameterList()
2270 llvm::itanium_demangle::starts_with(MangledName, "$H") || in demangleTemplateParameterList()
2271 llvm::itanium_demangle::starts_with(MangledName, "$I") || in demangleTemplateParameterList()
2272 llvm::itanium_demangle::starts_with(MangledName, "$J")) { in demangleTemplateParameterList()
2277 MangledName.remove_prefix(1); in demangleTemplateParameterList()
2282 char InheritanceSpecifier = MangledName.front(); in demangleTemplateParameterList()
2283 MangledName.remove_prefix(1); in demangleTemplateParameterList()
2285 if (llvm::itanium_demangle::starts_with(MangledName, '?')) { in demangleTemplateParameterList()
2286 S = parse(MangledName); in demangleTemplateParameterList()
2297 demangleSigned(MangledName); in demangleTemplateParameterList()
2301 demangleSigned(MangledName); in demangleTemplateParameterList()
2305 demangleSigned(MangledName); in demangleTemplateParameterList()
2314 } else if (llvm::itanium_demangle::starts_with(MangledName, "$E?")) { in demangleTemplateParameterList()
2315 consumeFront(MangledName, "$E"); in demangleTemplateParameterList()
2318 TPRN->Symbol = parse(MangledName); in demangleTemplateParameterList()
2320 } else if (llvm::itanium_demangle::starts_with(MangledName, "$F") || in demangleTemplateParameterList()
2321 llvm::itanium_demangle::starts_with(MangledName, "$G")) { in demangleTemplateParameterList()
2325 MangledName.remove_prefix(1); in demangleTemplateParameterList()
2326 char InheritanceSpecifier = MangledName.front(); in demangleTemplateParameterList()
2327 MangledName.remove_prefix(1); in demangleTemplateParameterList()
2332 demangleSigned(MangledName); in demangleTemplateParameterList()
2336 demangleSigned(MangledName); in demangleTemplateParameterList()
2338 demangleSigned(MangledName); in demangleTemplateParameterList()
2345 } else if (consumeFront(MangledName, "$0")) { in demangleTemplateParameterList()
2349 std::tie(Value, IsNegative) = demangleNumber(MangledName); in demangleTemplateParameterList()
2353 TP.N = demangleType(MangledName, QualifierMangleMode::Drop); in demangleTemplateParameterList()
2367 MangledName, '@')); // The above loop exits only on '@'. in demangleTemplateParameterList()
2368 consumeFront(MangledName, '@'); in demangleTemplateParameterList()
2400 char *llvm::microsoftDemangle(std::string_view MangledName, size_t *NMangled, in microsoftDemangle() argument
2404 std::string_view Name{MangledName}; in microsoftDemangle()
2407 *NMangled = MangledName.size() - Name.size(); in microsoftDemangle()