@@ -62,8 +62,23 @@ static void printValidationInfo(llvm::StringRef data) {
62
62
}
63
63
}
64
64
65
+ static void resolveDeclFromMangledNameList (
66
+ swift::ASTContext &Ctx, llvm::ArrayRef<std::string> MangledNames) {
67
+ std::string Error;
68
+ for (auto &Mangled : MangledNames) {
69
+ swift::Decl *ResolvedDecl =
70
+ swift::ide::getDeclFromMangledSymbolName (Ctx, Mangled, Error);
71
+ if (!ResolvedDecl) {
72
+ llvm::errs () << " Can't resolve decl of " << Mangled << " \n " ;
73
+ } else {
74
+ ResolvedDecl->print (llvm::errs ());
75
+ llvm::errs () << " \n " ;
76
+ }
77
+ }
78
+ }
79
+
65
80
static void resolveTypeFromMangledNameList (
66
- swift::ASTContext &Ctx, llvm::SmallVector <std::string, 8 > & MangledNames) {
81
+ swift::ASTContext &Ctx, llvm::ArrayRef <std::string> MangledNames) {
67
82
std::string Error;
68
83
for (auto &Mangled : MangledNames) {
69
84
swift::Type ResolvedType =
@@ -78,8 +93,8 @@ static void resolveTypeFromMangledNameList(
78
93
}
79
94
80
95
static void
81
- collectMangledNames (std::string &FilePath,
82
- llvm::SmallVector <std::string, 8 > &MangledNames) {
96
+ collectMangledNames (const std::string &FilePath,
97
+ llvm::SmallVectorImpl <std::string> &MangledNames) {
83
98
std::string Name;
84
99
std::ifstream InputStream (FilePath);
85
100
while (std::getline (InputStream, Name)) {
@@ -117,8 +132,11 @@ int main(int argc, char **argv) {
117
132
llvm::cl::list<std::string> FrameworkPaths (
118
133
" F" , llvm::cl::desc (" add a directory to the framework search path" ));
119
134
135
+ llvm::cl::opt<std::string> DumpDeclFromMangled (
136
+ " decl-from-mangled" , llvm::cl::desc (" dump decl from mangled names list" ));
137
+
120
138
llvm::cl::opt<std::string> DumpTypeFromMangled (
121
- " type-from-mangled" , llvm::cl::desc (" dump type from mangled name " ));
139
+ " type-from-mangled" , llvm::cl::desc (" dump type from mangled names list " ));
122
140
123
141
llvm::cl::ParseCommandLineOptions (argc, argv);
124
142
// Unregister our options so they don't interfere with the command line
@@ -269,6 +287,11 @@ int main(int argc, char **argv) {
269
287
collectMangledNames (DumpTypeFromMangled, MangledNames);
270
288
resolveTypeFromMangledNameList (CI.getASTContext (), MangledNames);
271
289
}
290
+ if (!DumpDeclFromMangled.empty ()) {
291
+ llvm::SmallVector<std::string, 8 > MangledNames;
292
+ collectMangledNames (DumpDeclFromMangled, MangledNames);
293
+ resolveDeclFromMangledNameList (CI.getASTContext (), MangledNames);
294
+ }
272
295
}
273
296
return 0 ;
274
297
}
0 commit comments