|
1 | 1 | #include <iostream> |
| 2 | +#include <vector> |
| 3 | +#include <map> |
2 | 4 |
|
3 | 5 | #include "swift/extractor/translators/DeclTranslator.h" |
4 | 6 | #include "swift/extractor/translators/ExprTranslator.h" |
|
8 | 10 |
|
9 | 11 | using namespace codeql; |
10 | 12 |
|
11 | | -#define CHECK_CLASS(KIND, CLASS, PARENT) \ |
12 | | - if (!detail::HasTranslate##CLASS##KIND<KIND##Translator>::value && \ |
13 | | - !detail::HasTranslate##PARENT<KIND##Translator>::value) { \ |
14 | | - std::cout << " " #CLASS #KIND "\n"; \ |
15 | | - } |
16 | | - |
17 | 13 | int main() { |
18 | | - std::cout << "Unextracted Decls:\n"; |
| 14 | + std::map<const char*, std::vector<const char*>> unextracted; |
| 15 | + |
| 16 | +#define CHECK_CLASS(KIND, CLASS, PARENT) \ |
| 17 | + if (KIND##Translator::getPolicyFor##CLASS##KIND() == TranslatorPolicy::emitUnknown) { \ |
| 18 | + unextracted[#KIND].push_back(#CLASS #KIND); \ |
| 19 | + } |
19 | 20 |
|
20 | 21 | #define DECL(CLASS, PARENT) CHECK_CLASS(Decl, CLASS, PARENT) |
21 | 22 | #include "swift/AST/DeclNodes.def" |
22 | 23 |
|
23 | | - std::cout << "\nUnextracted Stmts:\n"; |
24 | | - |
25 | 24 | #define STMT(CLASS, PARENT) CHECK_CLASS(Stmt, CLASS, PARENT) |
26 | 25 | #include "swift/AST/StmtNodes.def" |
27 | 26 |
|
28 | | - std::cout << "\nUnextracted Exprs:\n"; |
29 | | - |
30 | 27 | #define EXPR(CLASS, PARENT) CHECK_CLASS(Expr, CLASS, PARENT) |
31 | 28 | #include "swift/AST/ExprNodes.def" |
32 | 29 |
|
33 | | - std::cout << "\nUnextracted Patterns:\n"; |
34 | | - |
35 | 30 | #define PATTERN(CLASS, PARENT) CHECK_CLASS(Pattern, CLASS, PARENT) |
36 | 31 | #include "swift/AST/PatternNodes.def" |
37 | 32 |
|
38 | | - std::cout << "\nUnextracted Types:\n"; |
39 | | - |
40 | 33 | #define TYPE(CLASS, PARENT) CHECK_CLASS(Type, CLASS, PARENT) |
41 | 34 | #include "swift/AST/TypeNodes.def" |
42 | 35 |
|
| 36 | + for (const auto& [kind, classes] : unextracted) { |
| 37 | + std::cout << "Unextracted " << kind << " subclasses:\n"; |
| 38 | + for (auto cls : classes) { |
| 39 | + std::cout << " " << cls << '\n'; |
| 40 | + } |
| 41 | + std::cout << '\n'; |
| 42 | + } |
43 | 43 | return 0; |
44 | 44 | } |
0 commit comments