@@ -239,11 +239,10 @@ ClangImporter::ClangImporter(ASTContext &ctx,
239
239
: ClangModuleLoader(tracker),
240
240
Impl(*new Implementation(ctx, clangImporterOpts))
241
241
{
242
- Impl.Retain();
243
242
}
244
243
245
244
ClangImporter::~ClangImporter() {
246
- Impl.Release() ;
245
+ delete & Impl;
247
246
}
248
247
249
248
void ClangImporter::setTypeResolver(LazyResolver &resolver) {
@@ -548,7 +547,8 @@ ClangImporter::create(ASTContext &ctx,
548
547
sourceBuffer.release());
549
548
550
549
// Install a Clang module file extension to build Swift name lookup tables.
551
- invocation->getFrontendOpts().ModuleFileExtensions.push_back(&importer->Impl);
550
+ invocation->getFrontendOpts().ModuleFileExtensions.push_back(
551
+ new Implementation::SwiftNameLookupExtension(importer->Impl));
552
552
553
553
// Create a compiler instance.
554
554
auto PCHContainerOperations =
@@ -4106,7 +4106,8 @@ void ClangImporter::getMangledName(raw_ostream &os,
4106
4106
// ---------------------------------------------------------------------------
4107
4107
4108
4108
clang::ModuleFileExtensionMetadata
4109
- ClangImporter::Implementation::getExtensionMetadata() const {
4109
+ ClangImporter::Implementation::SwiftNameLookupExtension::
4110
+ getExtensionMetadata() const {
4110
4111
clang::ModuleFileExtensionMetadata metadata;
4111
4112
metadata.BlockName = "swift.lookup";
4112
4113
metadata.MajorVersion = SWIFT_LOOKUP_TABLE_VERSION_MAJOR;
@@ -4115,18 +4116,20 @@ ClangImporter::Implementation::getExtensionMetadata() const {
4115
4116
return metadata;
4116
4117
}
4117
4118
4118
- llvm::hash_code ClangImporter::Implementation::hashExtension(
4119
- llvm::hash_code code) const {
4119
+ llvm::hash_code
4120
+ ClangImporter::Implementation::SwiftNameLookupExtension::hashExtension(
4121
+ llvm::hash_code code) const {
4120
4122
return llvm::hash_combine(code, StringRef("swift.lookup"),
4121
4123
SWIFT_LOOKUP_TABLE_VERSION_MAJOR,
4122
4124
SWIFT_LOOKUP_TABLE_VERSION_MINOR,
4123
- OmitNeedlessWords,
4124
- InferDefaultArguments);
4125
+ Impl. OmitNeedlessWords,
4126
+ Impl. InferDefaultArguments);
4125
4127
}
4126
4128
4127
4129
std::unique_ptr<clang::ModuleFileExtensionWriter>
4128
- ClangImporter::Implementation::createExtensionWriter(clang::ASTWriter &writer) {
4129
- // Local function to populate the lookup table.
4130
+ ClangImporter::Implementation::SwiftNameLookupExtension::createExtensionWriter(
4131
+ clang::ASTWriter &writer) {
4132
+ // Local function to populate the lookup table.
4130
4133
auto populateTable = [this](clang::Sema &sema, SwiftLookupTable &table) {
4131
4134
for (auto decl
4132
4135
: sema.Context.getTranslationUnitDecl()->noload_decls()) {
@@ -4138,19 +4141,19 @@ ClangImporter::Implementation::createExtensionWriter(clang::ASTWriter &writer) {
4138
4141
if (!named) continue;
4139
4142
4140
4143
// Add this entry to the lookup table.
4141
- addEntryToLookupTable(sema, table, named);
4144
+ Impl. addEntryToLookupTable(sema, table, named);
4142
4145
}
4143
4146
4144
4147
// Add macros to the lookup table.
4145
- addMacrosToLookupTable(sema.Context, sema.getPreprocessor(), table);
4148
+ Impl. addMacrosToLookupTable(sema.Context, sema.getPreprocessor(), table);
4146
4149
};
4147
4150
4148
4151
return std::unique_ptr<clang::ModuleFileExtensionWriter>(
4149
4152
new SwiftLookupTableWriter(this, populateTable, writer));
4150
4153
}
4151
4154
4152
4155
std::unique_ptr<clang::ModuleFileExtensionReader>
4153
- ClangImporter::Implementation::createExtensionReader(
4156
+ ClangImporter::Implementation::SwiftNameLookupExtension:: createExtensionReader(
4154
4157
const clang::ModuleFileExtensionMetadata &metadata,
4155
4158
clang::ASTReader &reader,
4156
4159
clang::serialization::ModuleFile &mod,
@@ -4163,13 +4166,13 @@ ClangImporter::Implementation::createExtensionReader(
4163
4166
assert(metadata.MinorVersion == SWIFT_LOOKUP_TABLE_VERSION_MINOR);
4164
4167
4165
4168
// Check whether we already have an entry in the set of lookup tables.
4166
- auto &entry = LookupTables[mod.ModuleName];
4169
+ auto &entry = Impl. LookupTables[mod.ModuleName];
4167
4170
if (entry) return nullptr;
4168
4171
4169
4172
// Local function used to remove this entry when the reader goes away.
4170
4173
std::string moduleName = mod.ModuleName;
4171
4174
auto onRemove = [this, moduleName]() {
4172
- LookupTables.erase(moduleName);
4175
+ Impl. LookupTables.erase(moduleName);
4173
4176
};
4174
4177
4175
4178
// Create the reader.
0 commit comments