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) {
3030 }
3131 return ret.str ();
3232}
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 11#pragma once
22
3- #include < vector>
4- #include < unordered_set>
5- #include < filesystem>
6-
73#include < swift/AST/ASTMangler.h>
4+ #include < swift/AST/Types.h>
85
96namespace codeql {
107class SwiftMangler {
118 public:
129 std::string mangledName (const swift::Decl& decl);
1310
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+
1418 private:
1519 swift::Mangle::ASTMangler mangler;
1620};
Original file line number Diff line number Diff line change @@ -242,11 +242,7 @@ codeql::OpenedArchetypeType TypeTranslator::translateOpenedArchetypeType(
242242}
243243
244244codeql::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);
250246 entry.module = dispatcher.fetchLabel (type.getModule ());
251247 return entry;
252248}
Original file line number Diff line number Diff line change 22
33#include " swift/extractor/translators/TranslatorBase.h"
44#include " swift/extractor/trap/generated/type/TrapClasses.h"
5+ #include " swift/extractor/mangler/SwiftMangler.h"
56
67namespace codeql {
78class TypeTranslator : public TypeTranslatorBase <TypeTranslator> {
@@ -87,12 +88,23 @@ class TypeTranslator : public TypeTranslatorBase<TypeTranslator> {
8788 void fillBoundGenericType (const swift::BoundGenericType& type, codeql::BoundGenericType& entry);
8889 void fillAnyGenericType (const swift::AnyGenericType& type, codeql::AnyGenericType& entry);
8990
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);
93103 fillType (type, entry);
94104 return entry;
95105 }
106+
107+ SwiftMangler mangler;
96108};
97109
98110} // namespace codeql
You can’t perform that action at this time.
0 commit comments