Lines Matching refs:MangledName

42 static bool isMemberPointer(StringView MangledName, bool &Error) {  in isMemberPointer()  argument
44 switch (MangledName.popFront()) { in isMemberPointer()
68 if (startsWithDigit(MangledName)) { in isMemberPointer()
69 if (MangledName[0] != '6' && MangledName[0] != '8') { in isMemberPointer()
73 return (MangledName[0] == '8'); in isMemberPointer()
78 MangledName.consumeFront('E'); // 64-bit in isMemberPointer()
79 MangledName.consumeFront('I'); // restrict in isMemberPointer()
80 MangledName.consumeFront('F'); // unaligned in isMemberPointer()
82 if (MangledName.empty()) { in isMemberPointer()
88 switch (MangledName.front()) { in isMemberPointer()
106 consumeSpecialIntrinsicKind(StringView &MangledName) { in consumeSpecialIntrinsicKind() argument
107 if (MangledName.consumeFront("?_7")) in consumeSpecialIntrinsicKind()
109 if (MangledName.consumeFront("?_8")) in consumeSpecialIntrinsicKind()
111 if (MangledName.consumeFront("?_9")) in consumeSpecialIntrinsicKind()
113 if (MangledName.consumeFront("?_A")) in consumeSpecialIntrinsicKind()
115 if (MangledName.consumeFront("?_B")) in consumeSpecialIntrinsicKind()
117 if (MangledName.consumeFront("?_C")) in consumeSpecialIntrinsicKind()
119 if (MangledName.consumeFront("?_P")) in consumeSpecialIntrinsicKind()
121 if (MangledName.consumeFront("?_R0")) in consumeSpecialIntrinsicKind()
123 if (MangledName.consumeFront("?_R1")) in consumeSpecialIntrinsicKind()
125 if (MangledName.consumeFront("?_R2")) in consumeSpecialIntrinsicKind()
127 if (MangledName.consumeFront("?_R3")) in consumeSpecialIntrinsicKind()
129 if (MangledName.consumeFront("?_R4")) in consumeSpecialIntrinsicKind()
131 if (MangledName.consumeFront("?_S")) in consumeSpecialIntrinsicKind()
133 if (MangledName.consumeFront("?__E")) in consumeSpecialIntrinsicKind()
135 if (MangledName.consumeFront("?__F")) in consumeSpecialIntrinsicKind()
137 if (MangledName.consumeFront("?__J")) in consumeSpecialIntrinsicKind()
216 demangleFunctionRefQualifier(StringView &MangledName) { in demangleFunctionRefQualifier() argument
217 if (MangledName.consumeFront('G')) in demangleFunctionRefQualifier()
219 else if (MangledName.consumeFront('H')) in demangleFunctionRefQualifier()
225 demanglePointerCVQualifiers(StringView &MangledName) { in demanglePointerCVQualifiers() argument
226 if (MangledName.consumeFront("$$Q")) in demanglePointerCVQualifiers()
229 switch (MangledName.popFront()) { in demanglePointerCVQualifiers()
255 Demangler::demangleSpecialTableSymbolNode(StringView &MangledName, in demangleSpecialTableSymbolNode() argument
274 QualifiedNameNode *QN = demangleNameScopeChain(MangledName, NI); in demangleSpecialTableSymbolNode()
278 if (MangledName.empty()) { in demangleSpecialTableSymbolNode()
282 char Front = MangledName.popFront(); in demangleSpecialTableSymbolNode()
288 std::tie(STSN->Quals, IsMember) = demangleQualifiers(MangledName); in demangleSpecialTableSymbolNode()
289 if (!MangledName.consumeFront('@')) in demangleSpecialTableSymbolNode()
290 STSN->TargetName = demangleFullyQualifiedTypeName(MangledName); in demangleSpecialTableSymbolNode()
295 Demangler::demangleLocalStaticGuard(StringView &MangledName, bool IsThread) { in demangleLocalStaticGuard() argument
299 QualifiedNameNode *QN = demangleNameScopeChain(MangledName, LSGI); in demangleLocalStaticGuard()
304 if (MangledName.consumeFront("4IA")) in demangleLocalStaticGuard()
306 else if (MangledName.consumeFront("5")) in demangleLocalStaticGuard()
313 if (!MangledName.empty()) in demangleLocalStaticGuard()
314 LSGI->ScopeIndex = demangleUnsigned(MangledName); in demangleLocalStaticGuard()
351 ArenaAllocator &Arena, StringView &MangledName, StringView VariableName) { in demangleUntypedVariable() argument
353 QualifiedNameNode *QN = demangleNameScopeChain(MangledName, NI); in demangleUntypedVariable()
356 if (MangledName.consumeFront("8")) in demangleUntypedVariable()
365 StringView &MangledName) { in demangleRttiBaseClassDescriptorNode() argument
368 RBCDN->NVOffset = demangleUnsigned(MangledName); in demangleRttiBaseClassDescriptorNode()
369 RBCDN->VBPtrOffset = demangleSigned(MangledName); in demangleRttiBaseClassDescriptorNode()
370 RBCDN->VBTableOffset = demangleUnsigned(MangledName); in demangleRttiBaseClassDescriptorNode()
371 RBCDN->Flags = demangleUnsigned(MangledName); in demangleRttiBaseClassDescriptorNode()
376 VSN->Name = demangleNameScopeChain(MangledName, RBCDN); in demangleRttiBaseClassDescriptorNode()
377 MangledName.consumeFront('8'); in demangleRttiBaseClassDescriptorNode()
381 FunctionSymbolNode *Demangler::demangleInitFiniStub(StringView &MangledName, in demangleInitFiniStub() argument
388 if (MangledName.consumeFront('?')) in demangleInitFiniStub()
391 SymbolNode *Symbol = demangleDeclarator(MangledName); in demangleInitFiniStub()
406 if (MangledName.consumeFront('@')) in demangleInitFiniStub()
412 FSN = demangleFunctionEncoding(MangledName); in demangleInitFiniStub()
430 SymbolNode *Demangler::demangleSpecialIntrinsic(StringView &MangledName) { in demangleSpecialIntrinsic() argument
431 SpecialIntrinsicKind SIK = consumeSpecialIntrinsicKind(MangledName); in demangleSpecialIntrinsic()
437 return demangleStringLiteral(MangledName); in demangleSpecialIntrinsic()
442 return demangleSpecialTableSymbolNode(MangledName, SIK); in demangleSpecialIntrinsic()
444 return demangleVcallThunkNode(MangledName); in demangleSpecialIntrinsic()
446 return demangleLocalStaticGuard(MangledName, /*IsThread=*/false); in demangleSpecialIntrinsic()
448 return demangleLocalStaticGuard(MangledName, /*IsThread=*/true); in demangleSpecialIntrinsic()
450 TypeNode *T = demangleType(MangledName, QualifierMangleMode::Result); in demangleSpecialIntrinsic()
453 if (!MangledName.consumeFront("@8")) in demangleSpecialIntrinsic()
455 if (!MangledName.empty()) in demangleSpecialIntrinsic()
460 return demangleUntypedVariable(Arena, MangledName, in demangleSpecialIntrinsic()
463 return demangleUntypedVariable(Arena, MangledName, in demangleSpecialIntrinsic()
466 return demangleRttiBaseClassDescriptorNode(Arena, MangledName); in demangleSpecialIntrinsic()
468 return demangleInitFiniStub(MangledName, /*IsDestructor=*/false); in demangleSpecialIntrinsic()
470 return demangleInitFiniStub(MangledName, /*IsDestructor=*/true); in demangleSpecialIntrinsic()
484 Demangler::demangleFunctionIdentifierCode(StringView &MangledName) { in demangleFunctionIdentifierCode() argument
485 assert(MangledName.startsWith('?')); in demangleFunctionIdentifierCode()
486 MangledName = MangledName.dropFront(); in demangleFunctionIdentifierCode()
487 if (MangledName.empty()) { in demangleFunctionIdentifierCode()
492 if (MangledName.consumeFront("__")) in demangleFunctionIdentifierCode()
494 MangledName, FunctionIdentifierCodeGroup::DoubleUnder); in demangleFunctionIdentifierCode()
495 if (MangledName.consumeFront("_")) in demangleFunctionIdentifierCode()
496 return demangleFunctionIdentifierCode(MangledName, in demangleFunctionIdentifierCode()
498 return demangleFunctionIdentifierCode(MangledName, in demangleFunctionIdentifierCode()
503 Demangler::demangleStructorIdentifier(StringView &MangledName, in demangleStructorIdentifier() argument
511 Demangler::demangleConversionOperatorIdentifier(StringView &MangledName) { in demangleConversionOperatorIdentifier() argument
518 Demangler::demangleLiteralOperatorIdentifier(StringView &MangledName) { in demangleLiteralOperatorIdentifier() argument
521 N->Name = demangleSimpleString(MangledName, /*Memorize=*/false); in demangleLiteralOperatorIdentifier()
666 Demangler::demangleFunctionIdentifierCode(StringView &MangledName, in demangleFunctionIdentifierCode() argument
668 if (MangledName.empty()) { in demangleFunctionIdentifierCode()
674 switch (char CH = MangledName.popFront()) { in demangleFunctionIdentifierCode()
677 return demangleStructorIdentifier(MangledName, CH == '1'); in demangleFunctionIdentifierCode()
679 return demangleConversionOperatorIdentifier(MangledName); in demangleFunctionIdentifierCode()
686 translateIntrinsicFunctionCode(MangledName.popFront(), Group)); in demangleFunctionIdentifierCode()
688 switch (char CH = MangledName.popFront()) { in demangleFunctionIdentifierCode()
690 return demangleLiteralOperatorIdentifier(MangledName); in demangleFunctionIdentifierCode()
700 SymbolNode *Demangler::demangleEncodedSymbol(StringView &MangledName, in demangleEncodedSymbol() argument
702 if (MangledName.empty()) { in demangleEncodedSymbol()
708 switch (MangledName.front()) { in demangleEncodedSymbol()
714 StorageClass SC = demangleVariableStorageClass(MangledName); in demangleEncodedSymbol()
715 return demangleVariableEncoding(MangledName, SC); in demangleEncodedSymbol()
718 FunctionSymbolNode *FSN = demangleFunctionEncoding(MangledName); in demangleEncodedSymbol()
730 SymbolNode *Demangler::demangleDeclarator(StringView &MangledName) { in demangleDeclarator() argument
733 QualifiedNameNode *QN = demangleFullyQualifiedSymbolName(MangledName); in demangleDeclarator()
737 SymbolNode *Symbol = demangleEncodedSymbol(MangledName, QN); in demangleDeclarator()
754 SymbolNode *Demangler::demangleMD5Name(StringView &MangledName) { in demangleMD5Name() argument
755 assert(MangledName.startsWith("??@")); in demangleMD5Name()
759 size_t MD5Last = MangledName.find('@', strlen("??@")); in demangleMD5Name()
764 const char *Start = MangledName.begin(); in demangleMD5Name()
765 MangledName = MangledName.dropFront(MD5Last + 1); in demangleMD5Name()
777 MangledName.consumeFront("??_R4@"); in demangleMD5Name()
779 StringView MD5(Start, MangledName.begin()); in demangleMD5Name()
786 SymbolNode *Demangler::demangleTypeinfoName(StringView &MangledName) { in demangleTypeinfoName() argument
787 assert(MangledName.startsWith('.')); in demangleTypeinfoName()
788 MangledName.consumeFront('.'); in demangleTypeinfoName()
790 TypeNode *T = demangleType(MangledName, QualifierMangleMode::Result); in demangleTypeinfoName()
791 if (Error || !MangledName.empty()) { in demangleTypeinfoName()
799 SymbolNode *Demangler::parse(StringView &MangledName) { in parse() argument
803 if (MangledName.startsWith('.')) in parse()
804 return demangleTypeinfoName(MangledName); in parse()
806 if (MangledName.startsWith("??@")) in parse()
807 return demangleMD5Name(MangledName); in parse()
810 if (!MangledName.startsWith('?')) { in parse()
815 MangledName.consumeFront('?'); in parse()
819 if (SymbolNode *SI = demangleSpecialIntrinsic(MangledName)) in parse()
822 return demangleDeclarator(MangledName); in parse()
825 TagTypeNode *Demangler::parseTagUniqueName(StringView &MangledName) { in parseTagUniqueName() argument
826 if (!MangledName.consumeFront(".?A")) { in parseTagUniqueName()
830 MangledName.consumeFront(".?A"); in parseTagUniqueName()
831 if (MangledName.empty()) { in parseTagUniqueName()
836 return demangleClassType(MangledName); in parseTagUniqueName()
846 VariableSymbolNode *Demangler::demangleVariableEncoding(StringView &MangledName, in demangleVariableEncoding() argument
850 VSN->Type = demangleType(MangledName, QualifierMangleMode::Drop); in demangleVariableEncoding()
864 demanglePointerExtQualifiers(MangledName)); in demangleVariableEncoding()
867 std::tie(ExtraChildQuals, IsMember) = demangleQualifiers(MangledName); in demangleVariableEncoding()
871 demangleFullyQualifiedTypeName(MangledName); in demangleVariableEncoding()
879 VSN->Type->Quals = demangleQualifiers(MangledName).first; in demangleVariableEncoding()
897 std::pair<uint64_t, bool> Demangler::demangleNumber(StringView &MangledName) { in demangleNumber() argument
898 bool IsNegative = MangledName.consumeFront('?'); in demangleNumber()
900 if (startsWithDigit(MangledName)) { in demangleNumber()
901 uint64_t Ret = MangledName[0] - '0' + 1; in demangleNumber()
902 MangledName = MangledName.dropFront(1); in demangleNumber()
907 for (size_t i = 0; i < MangledName.size(); ++i) { in demangleNumber()
908 char C = MangledName[i]; in demangleNumber()
910 MangledName = MangledName.dropFront(i + 1); in demangleNumber()
924 uint64_t Demangler::demangleUnsigned(StringView &MangledName) { in demangleUnsigned() argument
927 std::tie(Number, IsNegative) = demangleNumber(MangledName); in demangleUnsigned()
933 int64_t Demangler::demangleSigned(StringView &MangledName) { in demangleSigned() argument
936 std::tie(Number, IsNegative) = demangleNumber(MangledName); in demangleSigned()
956 NamedIdentifierNode *Demangler::demangleBackRefName(StringView &MangledName) { in demangleBackRefName() argument
957 assert(startsWithDigit(MangledName)); in demangleBackRefName()
959 size_t I = MangledName[0] - '0'; in demangleBackRefName()
965 MangledName = MangledName.dropFront(); in demangleBackRefName()
983 Demangler::demangleTemplateInstantiationName(StringView &MangledName, in demangleTemplateInstantiationName() argument
985 assert(MangledName.startsWith("?$")); in demangleTemplateInstantiationName()
986 MangledName.consumeFront("?$"); in demangleTemplateInstantiationName()
992 demangleUnqualifiedSymbolName(MangledName, NBB_Simple); in demangleTemplateInstantiationName()
994 Identifier->TemplateParams = demangleTemplateParameterList(MangledName); in demangleTemplateInstantiationName()
1016 NamedIdentifierNode *Demangler::demangleSimpleName(StringView &MangledName, in demangleSimpleName() argument
1018 StringView S = demangleSimpleString(MangledName, Memorize); in demangleSimpleName()
1034 uint8_t Demangler::demangleCharLiteral(StringView &MangledName) { in demangleCharLiteral() argument
1035 assert(!MangledName.empty()); in demangleCharLiteral()
1036 if (!MangledName.startsWith('?')) in demangleCharLiteral()
1037 return MangledName.popFront(); in demangleCharLiteral()
1039 MangledName = MangledName.dropFront(); in demangleCharLiteral()
1040 if (MangledName.empty()) in demangleCharLiteral()
1043 if (MangledName.consumeFront('$')) { in demangleCharLiteral()
1045 if (MangledName.size() < 2) in demangleCharLiteral()
1047 StringView Nibbles = MangledName.substr(0, 2); in demangleCharLiteral()
1053 MangledName = MangledName.dropFront(2); in demangleCharLiteral()
1057 if (startsWithDigit(MangledName)) { in demangleCharLiteral()
1059 char C = Lookup[MangledName[0] - '0']; in demangleCharLiteral()
1060 MangledName = MangledName.dropFront(); in demangleCharLiteral()
1064 if (MangledName[0] >= 'a' && MangledName[0] <= 'z') { in demangleCharLiteral()
1069 char C = Lookup[MangledName[0] - 'a']; in demangleCharLiteral()
1070 MangledName = MangledName.dropFront(); in demangleCharLiteral()
1074 if (MangledName[0] >= 'A' && MangledName[0] <= 'Z') { in demangleCharLiteral()
1079 char C = Lookup[MangledName[0] - 'A']; in demangleCharLiteral()
1080 MangledName = MangledName.dropFront(); in demangleCharLiteral()
1089 wchar_t Demangler::demangleWcharLiteral(StringView &MangledName) { in demangleWcharLiteral() argument
1092 C1 = demangleCharLiteral(MangledName); in demangleWcharLiteral()
1093 if (Error || MangledName.empty()) in demangleWcharLiteral()
1095 C2 = demangleCharLiteral(MangledName); in demangleWcharLiteral()
1256 FunctionSymbolNode *Demangler::demangleVcallThunkNode(StringView &MangledName) { in demangleVcallThunkNode() argument
1262 FSN->Name = demangleNameScopeChain(MangledName, VTIN); in demangleVcallThunkNode()
1264 Error = !MangledName.consumeFront("$B"); in demangleVcallThunkNode()
1266 VTIN->OffsetInVTable = demangleUnsigned(MangledName); in demangleVcallThunkNode()
1268 Error = !MangledName.consumeFront('A'); in demangleVcallThunkNode()
1270 FSN->Signature->CallConvention = demangleCallingConvention(MangledName); in demangleVcallThunkNode()
1275 Demangler::demangleStringLiteral(StringView &MangledName) { in demangleStringLiteral() argument
1292 if (!MangledName.consumeFront("@_")) in demangleStringLiteral()
1294 if (MangledName.empty()) in demangleStringLiteral()
1298 switch (MangledName.popFront()) { in demangleStringLiteral()
1309 std::tie(StringByteSize, IsNegative) = demangleNumber(MangledName); in demangleStringLiteral()
1314 CrcEndPos = MangledName.find('@'); in demangleStringLiteral()
1317 CRC = MangledName.substr(0, CrcEndPos); in demangleStringLiteral()
1318 MangledName = MangledName.dropFront(CrcEndPos + 1); in demangleStringLiteral()
1319 if (MangledName.empty()) in demangleStringLiteral()
1327 while (!MangledName.consumeFront('@')) { in demangleStringLiteral()
1328 if (MangledName.size() < 2) in demangleStringLiteral()
1330 wchar_t W = demangleWcharLiteral(MangledName); in demangleStringLiteral()
1344 while (!MangledName.consumeFront('@')) { in demangleStringLiteral()
1345 if (MangledName.size() < 1 || BytesDecoded >= MaxStringByteLength) in demangleStringLiteral()
1347 StringBytes[BytesDecoded++] = demangleCharLiteral(MangledName); in demangleStringLiteral()
1390 StringView Demangler::demangleSimpleString(StringView &MangledName, in demangleSimpleString() argument
1393 for (size_t i = 0; i < MangledName.size(); ++i) { in demangleSimpleString()
1394 if (MangledName[i] != '@') in demangleSimpleString()
1398 S = MangledName.substr(0, i); in demangleSimpleString()
1399 MangledName = MangledName.dropFront(i + 1); in demangleSimpleString()
1411 Demangler::demangleAnonymousNamespaceName(StringView &MangledName) { in demangleAnonymousNamespaceName() argument
1412 assert(MangledName.startsWith("?A")); in demangleAnonymousNamespaceName()
1413 MangledName.consumeFront("?A"); in demangleAnonymousNamespaceName()
1417 size_t EndPos = MangledName.find('@'); in demangleAnonymousNamespaceName()
1422 StringView NamespaceKey = MangledName.substr(0, EndPos); in demangleAnonymousNamespaceName()
1424 MangledName = MangledName.substr(EndPos + 1); in demangleAnonymousNamespaceName()
1429 Demangler::demangleLocallyScopedNamePiece(StringView &MangledName) { in demangleLocallyScopedNamePiece() argument
1430 assert(startsWithLocalScopePattern(MangledName)); in demangleLocallyScopedNamePiece()
1433 MangledName.consumeFront('?'); in demangleLocallyScopedNamePiece()
1436 std::tie(Number, IsNegative) = demangleNumber(MangledName); in demangleLocallyScopedNamePiece()
1440 MangledName.consumeFront('?'); in demangleLocallyScopedNamePiece()
1443 Node *Scope = parse(MangledName); in demangleLocallyScopedNamePiece()
1464 Demangler::demangleFullyQualifiedTypeName(StringView &MangledName) { in demangleFullyQualifiedTypeName() argument
1466 demangleUnqualifiedTypeName(MangledName, /*Memorize=*/true); in demangleFullyQualifiedTypeName()
1471 QualifiedNameNode *QN = demangleNameScopeChain(MangledName, Identifier); in demangleFullyQualifiedTypeName()
1482 Demangler::demangleFullyQualifiedSymbolName(StringView &MangledName) { in demangleFullyQualifiedSymbolName() argument
1489 demangleUnqualifiedSymbolName(MangledName, NBB_Simple); in demangleFullyQualifiedSymbolName()
1493 QualifiedNameNode *QN = demangleNameScopeChain(MangledName, Identifier); in demangleFullyQualifiedSymbolName()
1511 IdentifierNode *Demangler::demangleUnqualifiedTypeName(StringView &MangledName, in demangleUnqualifiedTypeName() argument
1517 if (startsWithDigit(MangledName)) in demangleUnqualifiedTypeName()
1518 return demangleBackRefName(MangledName); in demangleUnqualifiedTypeName()
1520 if (MangledName.startsWith("?$")) in demangleUnqualifiedTypeName()
1521 return demangleTemplateInstantiationName(MangledName, NBB_Template); in demangleUnqualifiedTypeName()
1523 return demangleSimpleName(MangledName, Memorize); in demangleUnqualifiedTypeName()
1527 Demangler::demangleUnqualifiedSymbolName(StringView &MangledName, in demangleUnqualifiedSymbolName() argument
1529 if (startsWithDigit(MangledName)) in demangleUnqualifiedSymbolName()
1530 return demangleBackRefName(MangledName); in demangleUnqualifiedSymbolName()
1531 if (MangledName.startsWith("?$")) in demangleUnqualifiedSymbolName()
1532 return demangleTemplateInstantiationName(MangledName, NBB); in demangleUnqualifiedSymbolName()
1533 if (MangledName.startsWith('?')) in demangleUnqualifiedSymbolName()
1534 return demangleFunctionIdentifierCode(MangledName); in demangleUnqualifiedSymbolName()
1535 return demangleSimpleName(MangledName, /*Memorize=*/(NBB & NBB_Simple) != 0); in demangleUnqualifiedSymbolName()
1538 IdentifierNode *Demangler::demangleNameScopePiece(StringView &MangledName) { in demangleNameScopePiece() argument
1539 if (startsWithDigit(MangledName)) in demangleNameScopePiece()
1540 return demangleBackRefName(MangledName); in demangleNameScopePiece()
1542 if (MangledName.startsWith("?$")) in demangleNameScopePiece()
1543 return demangleTemplateInstantiationName(MangledName, NBB_Template); in demangleNameScopePiece()
1545 if (MangledName.startsWith("?A")) in demangleNameScopePiece()
1546 return demangleAnonymousNamespaceName(MangledName); in demangleNameScopePiece()
1548 if (startsWithLocalScopePattern(MangledName)) in demangleNameScopePiece()
1549 return demangleLocallyScopedNamePiece(MangledName); in demangleNameScopePiece()
1551 return demangleSimpleName(MangledName, /*Memorize=*/true); in demangleNameScopePiece()
1567 Demangler::demangleNameScopeChain(StringView &MangledName, in demangleNameScopeChain() argument
1574 while (!MangledName.consumeFront("@")) { in demangleNameScopeChain()
1580 if (MangledName.empty()) { in demangleNameScopeChain()
1586 IdentifierNode *Elem = demangleNameScopePiece(MangledName); in demangleNameScopeChain()
1598 FuncClass Demangler::demangleFunctionClass(StringView &MangledName) { in demangleFunctionClass() argument
1599 switch (MangledName.popFront()) { in demangleFunctionClass()
1656 if (MangledName.consumeFront('R')) in demangleFunctionClass()
1658 if (MangledName.empty()) in demangleFunctionClass()
1660 switch (MangledName.popFront()) { in demangleFunctionClass()
1681 CallingConv Demangler::demangleCallingConvention(StringView &MangledName) { in demangleCallingConvention() argument
1682 if (MangledName.empty()) { in demangleCallingConvention()
1687 switch (MangledName.popFront()) { in demangleCallingConvention()
1720 StorageClass Demangler::demangleVariableStorageClass(StringView &MangledName) { in demangleVariableStorageClass() argument
1721 assert(MangledName.front() >= '0' && MangledName.front() <= '4'); in demangleVariableStorageClass()
1723 switch (MangledName.popFront()) { in demangleVariableStorageClass()
1739 Demangler::demangleQualifiers(StringView &MangledName) { in demangleQualifiers() argument
1740 if (MangledName.empty()) { in demangleQualifiers()
1745 switch (MangledName.popFront()) { in demangleQualifiers()
1771 TypeNode *Demangler::demangleType(StringView &MangledName, in demangleType() argument
1776 std::tie(Quals, IsMember) = demangleQualifiers(MangledName); in demangleType()
1778 if (MangledName.consumeFront('?')) in demangleType()
1779 std::tie(Quals, IsMember) = demangleQualifiers(MangledName); in demangleType()
1782 if (MangledName.empty()) { in demangleType()
1788 if (isTagType(MangledName)) in demangleType()
1789 Ty = demangleClassType(MangledName); in demangleType()
1790 else if (isPointerType(MangledName)) { in demangleType()
1791 if (isMemberPointer(MangledName, Error)) in demangleType()
1792 Ty = demangleMemberPointerType(MangledName); in demangleType()
1794 Ty = demanglePointerType(MangledName); in demangleType()
1797 } else if (isArrayType(MangledName)) in demangleType()
1798 Ty = demangleArrayType(MangledName); in demangleType()
1799 else if (isFunctionType(MangledName)) { in demangleType()
1800 if (MangledName.consumeFront("$$A8@@")) in demangleType()
1801 Ty = demangleFunctionType(MangledName, true); in demangleType()
1803 assert(MangledName.startsWith("$$A6")); in demangleType()
1804 MangledName.consumeFront("$$A6"); in demangleType()
1805 Ty = demangleFunctionType(MangledName, false); in demangleType()
1807 } else if (isCustomType(MangledName)) { in demangleType()
1808 Ty = demangleCustomType(MangledName); in demangleType()
1810 Ty = demanglePrimitiveType(MangledName); in demangleType()
1819 bool Demangler::demangleThrowSpecification(StringView &MangledName) { in demangleThrowSpecification() argument
1820 if (MangledName.consumeFront("_E")) in demangleThrowSpecification()
1822 if (MangledName.consumeFront('Z')) in demangleThrowSpecification()
1829 FunctionSignatureNode *Demangler::demangleFunctionType(StringView &MangledName, in demangleFunctionType() argument
1834 FTy->Quals = demanglePointerExtQualifiers(MangledName); in demangleFunctionType()
1835 FTy->RefQualifier = demangleFunctionRefQualifier(MangledName); in demangleFunctionType()
1836 FTy->Quals = Qualifiers(FTy->Quals | demangleQualifiers(MangledName).first); in demangleFunctionType()
1840 FTy->CallConvention = demangleCallingConvention(MangledName); in demangleFunctionType()
1844 bool IsStructor = MangledName.consumeFront('@'); in demangleFunctionType()
1846 FTy->ReturnType = demangleType(MangledName, QualifierMangleMode::Result); in demangleFunctionType()
1848 FTy->Params = demangleFunctionParameterList(MangledName, FTy->IsVariadic); in demangleFunctionType()
1850 FTy->IsNoexcept = demangleThrowSpecification(MangledName); in demangleFunctionType()
1856 Demangler::demangleFunctionEncoding(StringView &MangledName) { in demangleFunctionEncoding() argument
1858 if (MangledName.consumeFront("$$J0")) in demangleFunctionEncoding()
1861 if (MangledName.empty()) { in demangleFunctionEncoding()
1866 FuncClass FC = demangleFunctionClass(MangledName); in demangleFunctionEncoding()
1873 TTN->ThisAdjust.StaticOffset = demangleSigned(MangledName); in demangleFunctionEncoding()
1877 TTN->ThisAdjust.VBPtrOffset = demangleSigned(MangledName); in demangleFunctionEncoding()
1878 TTN->ThisAdjust.VBOffsetOffset = demangleSigned(MangledName); in demangleFunctionEncoding()
1880 TTN->ThisAdjust.VtordispOffset = demangleSigned(MangledName); in demangleFunctionEncoding()
1881 TTN->ThisAdjust.StaticOffset = demangleSigned(MangledName); in demangleFunctionEncoding()
1891 FSN = demangleFunctionType(MangledName, HasThisQuals); in demangleFunctionEncoding()
1908 CustomTypeNode *Demangler::demangleCustomType(StringView &MangledName) { in demangleCustomType() argument
1909 assert(MangledName.startsWith('?')); in demangleCustomType()
1910 MangledName.popFront(); in demangleCustomType()
1913 CTN->Identifier = demangleUnqualifiedTypeName(MangledName, /*Memorize=*/true); in demangleCustomType()
1914 if (!MangledName.consumeFront('@')) in demangleCustomType()
1922 PrimitiveTypeNode *Demangler::demanglePrimitiveType(StringView &MangledName) { in demanglePrimitiveType() argument
1923 if (MangledName.consumeFront("$$T")) in demanglePrimitiveType()
1926 switch (MangledName.popFront()) { in demanglePrimitiveType()
1954 if (MangledName.empty()) { in demanglePrimitiveType()
1958 switch (MangledName.popFront()) { in demanglePrimitiveType()
1981 TagTypeNode *Demangler::demangleClassType(StringView &MangledName) { in demangleClassType() argument
1984 switch (MangledName.popFront()) { in demangleClassType()
1995 if (!MangledName.consumeFront('4')) { in demangleClassType()
2005 TT->QualifiedName = demangleFullyQualifiedTypeName(MangledName); in demangleClassType()
2011 PointerTypeNode *Demangler::demanglePointerType(StringView &MangledName) { in demanglePointerType() argument
2015 demanglePointerCVQualifiers(MangledName); in demanglePointerType()
2017 if (MangledName.consumeFront("6")) { in demanglePointerType()
2018 Pointer->Pointee = demangleFunctionType(MangledName, false); in demanglePointerType()
2022 Qualifiers ExtQuals = demanglePointerExtQualifiers(MangledName); in demanglePointerType()
2025 Pointer->Pointee = demangleType(MangledName, QualifierMangleMode::Mangle); in demanglePointerType()
2029 PointerTypeNode *Demangler::demangleMemberPointerType(StringView &MangledName) { in demangleMemberPointerType() argument
2033 demanglePointerCVQualifiers(MangledName); in demangleMemberPointerType()
2036 Qualifiers ExtQuals = demanglePointerExtQualifiers(MangledName); in demangleMemberPointerType()
2041 if (MangledName.consumeFront("8")) { in demangleMemberPointerType()
2042 Pointer->ClassParent = demangleFullyQualifiedTypeName(MangledName); in demangleMemberPointerType()
2043 Pointer->Pointee = demangleFunctionType(MangledName, true); in demangleMemberPointerType()
2047 std::tie(PointeeQuals, IsMember) = demangleQualifiers(MangledName); in demangleMemberPointerType()
2049 Pointer->ClassParent = demangleFullyQualifiedTypeName(MangledName); in demangleMemberPointerType()
2051 Pointer->Pointee = demangleType(MangledName, QualifierMangleMode::Drop); in demangleMemberPointerType()
2059 Qualifiers Demangler::demanglePointerExtQualifiers(StringView &MangledName) { in demanglePointerExtQualifiers() argument
2061 if (MangledName.consumeFront('E')) in demanglePointerExtQualifiers()
2063 if (MangledName.consumeFront('I')) in demanglePointerExtQualifiers()
2065 if (MangledName.consumeFront('F')) in demanglePointerExtQualifiers()
2071 ArrayTypeNode *Demangler::demangleArrayType(StringView &MangledName) { in demangleArrayType() argument
2072 assert(MangledName.front() == 'Y'); in demangleArrayType()
2073 MangledName.popFront(); in demangleArrayType()
2077 std::tie(Rank, IsNegative) = demangleNumber(MangledName); in demangleArrayType()
2089 std::tie(D, IsNegative) = demangleNumber(MangledName); in demangleArrayType()
2102 if (MangledName.consumeFront("$$C")) { in demangleArrayType()
2104 std::tie(ATy->Quals, IsMember) = demangleQualifiers(MangledName); in demangleArrayType()
2111 ATy->ElementType = demangleType(MangledName, QualifierMangleMode::Drop); in demangleArrayType()
2116 NodeArrayNode *Demangler::demangleFunctionParameterList(StringView &MangledName, in demangleFunctionParameterList() argument
2119 if (MangledName.consumeFront('X')) in demangleFunctionParameterList()
2125 while (!Error && !MangledName.startsWith('@') && in demangleFunctionParameterList()
2126 !MangledName.startsWith('Z')) { in demangleFunctionParameterList()
2129 if (startsWithDigit(MangledName)) { in demangleFunctionParameterList()
2130 size_t N = MangledName[0] - '0'; in demangleFunctionParameterList()
2135 MangledName = MangledName.dropFront(); in demangleFunctionParameterList()
2143 size_t OldSize = MangledName.size(); in demangleFunctionParameterList()
2146 TypeNode *TN = demangleType(MangledName, QualifierMangleMode::Drop); in demangleFunctionParameterList()
2152 size_t CharsConsumed = OldSize - MangledName.size(); in demangleFunctionParameterList()
2170 if (MangledName.consumeFront('@')) in demangleFunctionParameterList()
2173 if (MangledName.consumeFront('Z')) { in demangleFunctionParameterList()
2182 Demangler::demangleTemplateParameterList(StringView &MangledName) { in demangleTemplateParameterList() argument
2187 while (!MangledName.startsWith('@')) { in demangleTemplateParameterList()
2188 if (MangledName.consumeFront("$S") || MangledName.consumeFront("$$V") || in demangleTemplateParameterList()
2189 MangledName.consumeFront("$$$V") || MangledName.consumeFront("$$Z")) { in demangleTemplateParameterList()
2202 if (MangledName.consumeFront("$$Y")) { in demangleTemplateParameterList()
2204 TP.N = demangleFullyQualifiedTypeName(MangledName); in demangleTemplateParameterList()
2205 } else if (MangledName.consumeFront("$$B")) { in demangleTemplateParameterList()
2207 TP.N = demangleType(MangledName, QualifierMangleMode::Drop); in demangleTemplateParameterList()
2208 } else if (MangledName.consumeFront("$$C")) { in demangleTemplateParameterList()
2210 TP.N = demangleType(MangledName, QualifierMangleMode::Mangle); in demangleTemplateParameterList()
2211 } else if (MangledName.startsWith("$1") || MangledName.startsWith("$H") || in demangleTemplateParameterList()
2212 MangledName.startsWith("$I") || MangledName.startsWith("$J")) { in demangleTemplateParameterList()
2217 MangledName = MangledName.dropFront(); in demangleTemplateParameterList()
2222 char InheritanceSpecifier = MangledName.popFront(); in demangleTemplateParameterList()
2224 if (MangledName.startsWith('?')) { in demangleTemplateParameterList()
2225 S = parse(MangledName); in demangleTemplateParameterList()
2236 demangleSigned(MangledName); in demangleTemplateParameterList()
2240 demangleSigned(MangledName); in demangleTemplateParameterList()
2244 demangleSigned(MangledName); in demangleTemplateParameterList()
2253 } else if (MangledName.startsWith("$E?")) { in demangleTemplateParameterList()
2254 MangledName.consumeFront("$E"); in demangleTemplateParameterList()
2257 TPRN->Symbol = parse(MangledName); in demangleTemplateParameterList()
2259 } else if (MangledName.startsWith("$F") || MangledName.startsWith("$G")) { in demangleTemplateParameterList()
2263 MangledName = MangledName.dropFront(); in demangleTemplateParameterList()
2264 char InheritanceSpecifier = MangledName.popFront(); in demangleTemplateParameterList()
2269 demangleSigned(MangledName); in demangleTemplateParameterList()
2273 demangleSigned(MangledName); in demangleTemplateParameterList()
2275 demangleSigned(MangledName); in demangleTemplateParameterList()
2282 } else if (MangledName.consumeFront("$0")) { in demangleTemplateParameterList()
2286 std::tie(Value, IsNegative) = demangleNumber(MangledName); in demangleTemplateParameterList()
2290 TP.N = demangleType(MangledName, QualifierMangleMode::Drop); in demangleTemplateParameterList()
2303 assert(MangledName.startsWith('@')); // The above loop exits only on '@'. in demangleTemplateParameterList()
2304 MangledName.consumeFront('@'); in demangleTemplateParameterList()
2338 char *llvm::microsoftDemangle(const char *MangledName, size_t *NMangled, in microsoftDemangle() argument
2344 StringView Name{MangledName}; in microsoftDemangle()
2347 *NMangled = Name.begin() - MangledName; in microsoftDemangle()