Skip to content

Commit 2022dd8

Browse files
committed
Swift: Address review comments
1 parent 74384bb commit 2022dd8

File tree

2 files changed

+24
-13
lines changed

2 files changed

+24
-13
lines changed

swift/extractor/mangler/SwiftMangler.cpp

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ std::string_view getTypeKindStr(const swift::TypeBase* type) {
4040

4141
} // namespace
4242

43-
std::unordered_map<const swift::Decl*, unsigned> SwiftMangler::preloadedExtensionIndexes;
43+
std::unordered_map<const swift::Decl*, SwiftMangler::ExtensionIndex>
44+
SwiftMangler::preloadedExtensionIndexes;
4445

4546
SwiftMangledName SwiftMangler::initMangled(const swift::TypeBase* type) {
4647
return {getTypeKindStr(type), '_'};
@@ -104,15 +105,15 @@ SwiftMangledName SwiftMangler::visitExtensionDecl(const swift::ExtensionDecl* de
104105

105106
auto parent = getParent(decl);
106107
auto target = decl->getExtendedType();
107-
return initMangled(decl) << fetch(target) << getExtensionIndex(decl, parent);
108+
auto index = getExtensionIndex(decl, parent);
109+
return initMangled(decl) << fetch(target) << index.index
110+
<< (index.kind == ExtensionKind::clang ? "_clang" : "");
108111
}
109112

110-
unsigned SwiftMangler::getExtensionIndex(const swift::ExtensionDecl* decl,
111-
const swift::Decl* parent) {
113+
SwiftMangler::ExtensionIndex SwiftMangler::getExtensionIndex(const swift::ExtensionDecl* decl,
114+
const swift::Decl* parent) {
112115
// to avoid iterating multiple times on the parent of multiple extensions, we preload extension
113116
// indexes once for each encountered parent into the `preloadedExtensionIndexes` mapping.
114-
// Because we mangle declarations only once in a given trap/dispatcher context, we can safely
115-
// discard preloaded indexes on use
116117
if (auto found = SwiftMangler::preloadedExtensionIndexes.find(decl);
117118
found != SwiftMangler::preloadedExtensionIndexes.end()) {
118119
return found->second;
@@ -141,8 +142,8 @@ void SwiftMangler::indexExtensions(llvm::ArrayRef<swift::Decl*> siblings) {
141142
auto index = 0u;
142143
for (auto sibling : siblings) {
143144
if (sibling->getKind() == swift::DeclKind::Extension) {
144-
SwiftMangler::preloadedExtensionIndexes.emplace(sibling, index);
145-
index += 2;
145+
SwiftMangler::preloadedExtensionIndexes.try_emplace(sibling, ExtensionKind::swift, index);
146+
index++;
146147
}
147148
}
148149
}
@@ -153,15 +154,15 @@ void SwiftMangler::indexClangExtensions(const clang::Module* clangModule,
153154
return;
154155
}
155156

156-
auto index = 1u;
157+
auto index = 0u;
157158
for (const auto& submodule : clangModule->submodules()) {
158159
if (auto* swiftSubmodule = moduleLoader->getWrapperForModule(submodule)) {
159160
llvm::SmallVector<swift::Decl*> children;
160161
swiftSubmodule->getTopLevelDecls(children);
161162
for (const auto child : children) {
162163
if (child->getKind() == swift::DeclKind::Extension) {
163-
SwiftMangler::preloadedExtensionIndexes.emplace(child, index);
164-
index += 2;
164+
SwiftMangler::preloadedExtensionIndexes.try_emplace(child, ExtensionKind::clang, index);
165+
index++;
165166
}
166167
}
167168
}

swift/extractor/mangler/SwiftMangler.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,17 @@ class SwiftMangler : private swift::TypeVisitor<SwiftMangler, SwiftMangledName>,
106106
SwiftMangledName visitPackExpansionType(const swift::PackExpansionType* type);
107107

108108
private:
109-
static std::unordered_map<const swift::Decl*, unsigned> preloadedExtensionIndexes;
109+
enum class ExtensionKind : bool {
110+
swift,
111+
clang,
112+
};
113+
114+
struct ExtensionIndex {
115+
const ExtensionKind kind : 1;
116+
const uint32_t index : 31;
117+
};
118+
119+
static std::unordered_map<const swift::Decl*, ExtensionIndex> preloadedExtensionIndexes;
110120

111121
virtual SwiftMangledName fetch(const swift::Decl* decl) = 0;
112122
virtual SwiftMangledName fetch(const swift::TypeBase* type) = 0;
@@ -115,7 +125,7 @@ class SwiftMangler : private swift::TypeVisitor<SwiftMangler, SwiftMangledName>,
115125
void indexExtensions(llvm::ArrayRef<swift::Decl*> siblings);
116126
void indexClangExtensions(const clang::Module* clangModule,
117127
swift::ClangModuleLoader* moduleLoader);
118-
unsigned int getExtensionIndex(const swift::ExtensionDecl* decl, const swift::Decl* parent);
128+
ExtensionIndex getExtensionIndex(const swift::ExtensionDecl* decl, const swift::Decl* parent);
119129
static SwiftMangledName initMangled(const swift::TypeBase* type);
120130
SwiftMangledName initMangled(const swift::Decl* decl);
121131
SwiftMangledName visitTypeDiscriminatedValueDecl(const swift::ValueDecl* decl);

0 commit comments

Comments
 (0)