File tree Expand file tree Collapse file tree 4 files changed +32
-12
lines changed Expand file tree Collapse file tree 4 files changed +32
-12
lines changed Original file line number Diff line number Diff line change @@ -30,3 +30,11 @@ std::string SwiftMangler::mangledName(const swift::Decl& decl) {
30
30
}
31
31
return ret.str ();
32
32
}
33
+
34
+ std::optional<std::string> SwiftMangler::mangleType (const swift::ModuleType& type) {
35
+ auto key = type.getModule ()->getRealName ().str ().str ();
36
+ if (type.getModule ()->isNonSwiftModule ()) {
37
+ key += " |clang" ;
38
+ }
39
+ return key;
40
+ }
Original file line number Diff line number Diff line change 1
1
#pragma once
2
2
3
- #include < vector>
4
- #include < unordered_set>
5
- #include < filesystem>
6
-
7
3
#include < swift/AST/ASTMangler.h>
4
+ #include < swift/AST/Types.h>
8
5
9
6
namespace codeql {
10
7
class SwiftMangler {
11
8
public:
12
9
std::string mangledName (const swift::Decl& decl);
13
10
11
+ template <typename T>
12
+ std::optional<std::string> mangleType (const T& type) {
13
+ return std::nullopt;
14
+ }
15
+
16
+ std::optional<std::string> mangleType (const swift::ModuleType& type);
17
+
14
18
private:
15
19
swift::Mangle::ASTMangler mangler;
16
20
};
Original file line number Diff line number Diff line change @@ -242,11 +242,7 @@ codeql::OpenedArchetypeType TypeTranslator::translateOpenedArchetypeType(
242
242
}
243
243
244
244
codeql::ModuleType TypeTranslator::translateModuleType (const swift::ModuleType& type) {
245
- auto key = type.getModule ()->getRealName ().str ().str ();
246
- if (type.getModule ()->isNonSwiftModule ()) {
247
- key += " |clang" ;
248
- }
249
- auto entry = createTypeEntry (type, key);
245
+ auto entry = createTypeEntry (type);
250
246
entry.module = dispatcher.fetchLabel (type.getModule ());
251
247
return entry;
252
248
}
Original file line number Diff line number Diff line change 2
2
3
3
#include " swift/extractor/translators/TranslatorBase.h"
4
4
#include " swift/extractor/trap/generated/type/TrapClasses.h"
5
+ #include " swift/extractor/mangler/SwiftMangler.h"
5
6
6
7
namespace codeql {
7
8
class TypeTranslator : public TypeTranslatorBase <TypeTranslator> {
@@ -87,12 +88,23 @@ class TypeTranslator : public TypeTranslatorBase<TypeTranslator> {
87
88
void fillBoundGenericType (const swift::BoundGenericType& type, codeql::BoundGenericType& entry);
88
89
void fillAnyGenericType (const swift::AnyGenericType& type, codeql::AnyGenericType& entry);
89
90
90
- template <typename T, typename ... Args>
91
- auto createTypeEntry (const T& type, const Args&... args) {
92
- auto entry = dispatcher.createEntry (type, args...);
91
+ template <typename T>
92
+ auto createMangledTypeEntry (const T& type) {
93
+ auto mangledName = mangler.mangleType (type);
94
+ if (mangledName) {
95
+ return dispatcher.createEntry (type, mangledName.value ());
96
+ }
97
+ return dispatcher.createEntry (type);
98
+ }
99
+
100
+ template <typename T>
101
+ auto createTypeEntry (const T& type) {
102
+ auto entry = createMangledTypeEntry (type);
93
103
fillType (type, entry);
94
104
return entry;
95
105
}
106
+
107
+ SwiftMangler mangler;
96
108
};
97
109
98
110
} // namespace codeql
You can’t perform that action at this time.
0 commit comments