16
16
//
17
17
// ===----------------------------------------------------------------------===//
18
18
19
+ #include " swift/AST/ASTDemangler.h"
19
20
#include " swift/ASTSectionImporter/ASTSectionImporter.h"
20
21
#include " swift/Frontend/Frontend.h"
21
22
#include " swift/IDE/Utils.h"
@@ -92,6 +93,20 @@ static void resolveDeclFromMangledNameList(
92
93
93
94
static void resolveTypeFromMangledNameList (
94
95
swift::ASTContext &Ctx, llvm::ArrayRef<std::string> MangledNames) {
96
+ for (auto &Mangled : MangledNames) {
97
+ swift::Type ResolvedType =
98
+ swift::Demangle::getTypeForMangling (Ctx, Mangled);
99
+ if (!ResolvedType) {
100
+ llvm::outs () << " Can't resolve type of " << Mangled << " \n " ;
101
+ } else {
102
+ ResolvedType->print (llvm::outs ());
103
+ llvm::outs () << " \n " ;
104
+ }
105
+ }
106
+ }
107
+
108
+ static void resolveTypeFromMangledNameListOld (
109
+ swift::ASTContext &Ctx, llvm::ArrayRef<std::string> MangledNames) {
95
110
std::string Error;
96
111
for (auto &Mangled : MangledNames) {
97
112
swift::Type ResolvedType =
@@ -207,6 +222,11 @@ int main(int argc, char **argv) {
207
222
" type-from-mangled" , desc (" dump type from mangled names list" ),
208
223
cat (Visible));
209
224
225
+ opt<std::string> DumpTypeFromMangledOld (
226
+ " type-from-mangled-old" , desc (" dump type from mangled names list using old "
227
+ " TypeReconstruction API" ),
228
+ cat (Visible));
229
+
210
230
opt<std::string> ResourceDir (
211
231
" resource-dir" ,
212
232
desc (" The directory that holds the compiler resource files" ),
@@ -223,6 +243,7 @@ int main(int argc, char **argv) {
223
243
ModuleCachePath.removeArgument ();
224
244
DumpModule.removeArgument ();
225
245
DumpTypeFromMangled.removeArgument ();
246
+ DumpTypeFromMangledOld.removeArgument ();
226
247
InputNames.removeArgument ();
227
248
228
249
auto validateInputFile = [](std::string Filename) {
@@ -241,6 +262,8 @@ int main(int argc, char **argv) {
241
262
242
263
if (!validateInputFile (DumpTypeFromMangled))
243
264
return 1 ;
265
+ if (!validateInputFile (DumpTypeFromMangledOld))
266
+ return 1 ;
244
267
if (!validateInputFile (DumpDeclFromMangled))
245
268
return 1 ;
246
269
@@ -330,6 +353,11 @@ int main(int argc, char **argv) {
330
353
collectMangledNames (DumpTypeFromMangled, MangledNames);
331
354
resolveTypeFromMangledNameList (CI.getASTContext (), MangledNames);
332
355
}
356
+ if (!DumpTypeFromMangledOld.empty ()) {
357
+ llvm::SmallVector<std::string, 8 > MangledNames;
358
+ collectMangledNames (DumpTypeFromMangledOld, MangledNames);
359
+ resolveTypeFromMangledNameListOld (CI.getASTContext (), MangledNames);
360
+ }
333
361
if (!DumpDeclFromMangled.empty ()) {
334
362
llvm::SmallVector<std::string, 8 > MangledNames;
335
363
collectMangledNames (DumpDeclFromMangled, MangledNames);
0 commit comments