LLVM: include/llvm/Demangle/MicrosoftDemangle.h Source File (original) (raw)
30 struct AllocatorNode {
32 size_t Used = 0;
33 size_t Capacity = 0;
34 AllocatorNode *Next = nullptr;
35 };
36
37 void addNode(size_t Capacity) {
38 AllocatorNode *NewHead = new AllocatorNode;
39 NewHead->Buf = new uint8_t[Capacity];
40 NewHead->Next = Head;
41 NewHead->Capacity = Capacity;
42 Head = NewHead;
43 NewHead->Used = 0;
44 }
45
46public:
48
50 while (Head) {
52 delete[] Head->Buf;
53 AllocatorNode *Next = Head->Next;
54 delete Head;
56 }
57 }
58
59
62
64 assert(Head && Head->Buf);
65
66 uint8_t *P = Head->Buf + Head->Used;
67
68 Head->Used += Size;
69 if (Head->Used <= Head->Capacity)
70 return reinterpret_cast<char *>(P);
71
73 Head->Used = Size;
74 return reinterpret_cast<char *>(Head->Buf);
75 }
76
79 assert(Head && Head->Buf);
80
81 size_t P = (size_t)Head->Buf + Head->Used;
82 uintptr_t AlignedP =
83 (((size_t)P + alignof(T) - 1) & ~(size_t)(alignof(T) - 1));
85 size_t Adjustment = AlignedP - P;
86
87 Head->Used += Size + Adjustment;
88 if (Head->Used <= Head->Capacity)
89 return new (PP) T[Count]();
90
92 Head->Used = Size;
93 return new (Head->Buf) T[Count]();
94 }
95
96 template <typename T, typename... Args> T *alloc(Args &&... ConstructorArgs) {
97 constexpr size_t Size = sizeof(T);
98 assert(Head && Head->Buf);
99
100 size_t P = (size_t)Head->Buf + Head->Used;
101 uintptr_t AlignedP =
102 (((size_t)P + alignof(T) - 1) & ~(size_t)(alignof(T) - 1));
104 size_t Adjustment = AlignedP - P;
105
106 Head->Used += Size + Adjustment;
107 if (Head->Used <= Head->Capacity)
108 return new (PP) T(std::forward(ConstructorArgs)...);
109
112 Head->Used = Size;
113 return new (Head->Buf) T(std::forward(ConstructorArgs)...);
114 }
115
116private:
117 AllocatorNode *Head = nullptr;
118};
121 static constexpr size_t Max = 10;
122
125
126
127
130};
146 friend std::optional<size_t>
148
149public:
152
153
154
156
158
159
161
163
164private:
165 SymbolNode *demangleEncodedSymbol(std::string_view &MangledName,
167 SymbolNode *demangleDeclarator(std::string_view &MangledName);
168 SymbolNode *demangleMD5Name(std::string_view &MangledName);
169 SymbolNode *demangleTypeinfoName(std::string_view &MangledName);
170
171 VariableSymbolNode *demangleVariableEncoding(std::string_view &MangledName,
173 FunctionSymbolNode *demangleFunctionEncoding(std::string_view &MangledName);
174
175 Qualifiers demanglePointerExtQualifiers(std::string_view &MangledName);
176
177 bool isMemberPointer(std::string_view MangledName, bool &Error);
178
179 std::optionalPointerAuthQualifierNode::ArgArray
180 demanglePointerAuthQualifier(std::string_view &MangledName);
181
183 createPointerAuthQualifier(std::string_view &MangledName);
184
185
186 TypeNode *demangleType(std::string_view &MangledName,
188 PrimitiveTypeNode *demanglePrimitiveType(std::string_view &MangledName);
189 CustomTypeNode *demangleCustomType(std::string_view &MangledName);
190 TagTypeNode *demangleClassType(std::string_view &MangledName);
191 PointerTypeNode *demanglePointerType(std::string_view &MangledName);
192 PointerTypeNode *demangleMemberPointerType(std::string_view &MangledName);
194 bool HasThisQuals);
195
196 ArrayTypeNode *demangleArrayType(std::string_view &MangledName);
197
198 NodeArrayNode *demangleFunctionParameterList(std::string_view &MangledName,
199 bool &IsVariadic);
200 NodeArrayNode *demangleTemplateParameterList(std::string_view &MangledName);
201
202 std::pair<uint64_t, bool> demangleNumber(std::string_view &MangledName);
203 uint64_t demangleUnsigned(std::string_view &MangledName);
204 int64_t demangleSigned(std::string_view &MangledName);
205
206 void memorizeString(std::string_view s);
208
209
210 std::string_view copyString(std::string_view Borrowed);
211
213 demangleFullyQualifiedTypeName(std::string_view &MangledName);
215 demangleFullyQualifiedSymbolName(std::string_view &MangledName);
216
217 IdentifierNode *demangleUnqualifiedTypeName(std::string_view &MangledName,
218 bool Memorize);
219 IdentifierNode *demangleUnqualifiedSymbolName(std::string_view &MangledName,
221
222 QualifiedNameNode *demangleNameScopeChain(std::string_view &MangledName,
224 IdentifierNode *demangleNameScopePiece(std::string_view &MangledName);
225
228 demangleTemplateInstantiationName(std::string_view &MangledName,
232 IdentifierNode *demangleFunctionIdentifierCode(std::string_view &MangledName);
234 demangleFunctionIdentifierCode(std::string_view &MangledName,
237 demangleStructorIdentifier(std::string_view &MangledName, bool IsDestructor);
239 demangleConversionOperatorIdentifier(std::string_view &MangledName);
241 demangleLiteralOperatorIdentifier(std::string_view &MangledName);
242
243 SymbolNode *demangleSpecialIntrinsic(std::string_view &MangledName);
245 demangleSpecialTableSymbolNode(std::string_view &MangledName,
248 demangleLocalStaticGuard(std::string_view &MangledName, bool IsThread);
250 std::string_view &MangledName,
251 std::string_view VariableName);
253 demangleRttiBaseClassDescriptorNode(ArenaAllocator &Arena,
254 std::string_view &MangledName);
255 FunctionSymbolNode *demangleInitFiniStub(std::string_view &MangledName,
256 bool IsDestructor);
257
259 bool Memorize);
261 demangleAnonymousNamespaceName(std::string_view &MangledName);
263 demangleLocallyScopedNamePiece(std::string_view &MangledName);
265 demangleStringLiteral(std::string_view &MangledName);
266 FunctionSymbolNode *demangleVcallThunkNode(std::string_view &MangledName);
267
268 std::string_view demangleSimpleString(std::string_view &MangledName,
269 bool Memorize);
270
271 FuncClass demangleFunctionClass(std::string_view &MangledName);
272 CallingConv demangleCallingConvention(std::string_view &MangledName);
273 StorageClass demangleVariableStorageClass(std::string_view &MangledName);
274 bool demangleThrowSpecification(std::string_view &MangledName);
275 wchar_t demangleWcharLiteral(std::string_view &MangledName);
276 uint8_t demangleCharLiteral(std::string_view &MangledName);
277
278 std::pair<Qualifiers, bool> demangleQualifiers(std::string_view &MangledName);
279
280
282
283
284
285
286
287
288
289
290
291
292
293
294
295
297};