Skip to content

Commit 2d0ed92

Browse files
authored
Merge pull request #12741 from graydon/named-lazy-member-loading-write-by-default
2 parents 39c3fae + bbeec57 commit 2d0ed92

File tree

5 files changed

+40
-33
lines changed

5 files changed

+40
-33
lines changed

include/swift/Serialization/SerializationOptions.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,6 @@ namespace swift {
3737

3838
bool AutolinkForceLoad = false;
3939
bool EnableNestedTypeLookupTable = false;
40-
bool EnableDeclMemberNamesTable = false;
4140
bool SerializeAllSIL = false;
4241
bool SerializeOptionsForDebugging = false;
4342
bool IsSIB = false;

lib/AST/NameLookup.cpp

Lines changed: 23 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1310,6 +1310,20 @@ populateLookupTableEntryFromLazyIDCLoader(ASTContext &ctx,
13101310
}
13111311
}
13121312

1313+
static void
1314+
populateLookupTableEntryFromMembers(ASTContext &ctx,
1315+
MemberLookupTable &LookupTable,
1316+
DeclName name,
1317+
IterableDeclContext *IDC) {
1318+
for (auto m : IDC->getMembers()) {
1319+
if (auto v = dyn_cast<ValueDecl>(m)) {
1320+
if (v->getFullName().matchesRef(name)) {
1321+
LookupTable.addMember(m);
1322+
}
1323+
}
1324+
}
1325+
}
1326+
13131327
TinyPtrVector<ValueDecl *> NominalTypeDecl::lookupDirect(
13141328
DeclName name,
13151329
bool ignoreNewExtensions) {
@@ -1385,10 +1399,15 @@ TinyPtrVector<ValueDecl *> NominalTypeDecl::lookupDirect(
13851399
} else {
13861400
if (!ignoreNewExtensions) {
13871401
for (auto E : getExtensions()) {
1388-
if (populateLookupTableEntryFromLazyIDCLoader(ctx, Table,
1389-
name, E)) {
1390-
useNamedLazyMemberLoading = false;
1391-
break;
1402+
if (E->wasDeserialized()) {
1403+
if (populateLookupTableEntryFromLazyIDCLoader(ctx, Table,
1404+
name, E)) {
1405+
useNamedLazyMemberLoading = false;
1406+
break;
1407+
}
1408+
} else {
1409+
populateLookupTableEntryFromMembers(ctx, Table,
1410+
name, E);
13921411
}
13931412
}
13941413
}

lib/FrontendTool/FrontendTool.cpp

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -835,8 +835,6 @@ static bool performCompile(CompilerInstance &Instance,
835835
serializationOpts.OutputPath = opts.ModuleOutputPath.c_str();
836836
serializationOpts.SerializeAllSIL = true;
837837
serializationOpts.IsSIB = true;
838-
serializationOpts.EnableDeclMemberNamesTable =
839-
Invocation.getLangOptions().NamedLazyMemberLoading;
840838

841839
serialize(DC, serializationOpts, SM.get());
842840
}
@@ -901,8 +899,6 @@ static bool performCompile(CompilerInstance &Instance,
901899
Invocation.getClangImporterOptions().ExtraArgs;
902900
serializationOpts.EnableNestedTypeLookupTable =
903901
opts.EnableSerializationNestedTypeLookupTable;
904-
serializationOpts.EnableDeclMemberNamesTable =
905-
Invocation.getLangOptions().NamedLazyMemberLoading;
906902
if (!IRGenOpts.ForceLoadSymbolName.empty())
907903
serializationOpts.AutolinkForceLoad = true;
908904

@@ -981,8 +977,6 @@ static bool performCompile(CompilerInstance &Instance,
981977
serializationOpts.OutputPath = opts.ModuleOutputPath.c_str();
982978
serializationOpts.SerializeAllSIL = true;
983979
serializationOpts.IsSIB = true;
984-
serializationOpts.EnableDeclMemberNamesTable =
985-
Invocation.getLangOptions().NamedLazyMemberLoading;
986980

987981
serialize(DC, serializationOpts, SM.get());
988982
}

lib/Serialization/Serialization.cpp

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4668,8 +4668,7 @@ static void collectInterestingNestedDeclarations(
46684668
}
46694669

46704670
void Serializer::writeAST(ModuleOrSourceFile DC,
4671-
bool enableNestedTypeLookupTable,
4672-
bool enableDeclMemberNamesTable) {
4671+
bool enableNestedTypeLookupTable) {
46734672
DeclTable topLevelDecls, operatorDecls, operatorMethodDecls;
46744673
DeclTable precedenceGroupDecls;
46754674
ObjCMethodTable objcMethods;
@@ -4804,24 +4803,22 @@ void Serializer::writeAST(ModuleOrSourceFile DC,
48044803
EntryPoint.emit(ScratchRecord, entryPointClassID.getValue());
48054804
}
48064805

4807-
if (enableDeclMemberNamesTable) {
4808-
{
4809-
// Write sub-tables to a skippable sub-block.
4810-
BCBlockRAII restoreBlock(Out, DECL_MEMBER_TABLES_BLOCK_ID, 4);
4811-
decl_member_tables_block::DeclMembersLayout DeclMembersTable(Out);
4812-
for (auto &entry : DeclMemberNames) {
4813-
// Save BitOffset we're writing sub-table to.
4814-
static_assert(bitOffsetFitsIn32Bits(), "BitOffset too large");
4815-
assert(Out.GetCurrentBitNo() < (1ull << 32));
4816-
entry.second.first = Out.GetCurrentBitNo();
4817-
// Write sub-table.
4818-
writeDeclMembersTable(DeclMembersTable, *entry.second.second);
4819-
}
4806+
{
4807+
// Write sub-tables to a skippable sub-block.
4808+
BCBlockRAII restoreBlock(Out, DECL_MEMBER_TABLES_BLOCK_ID, 4);
4809+
decl_member_tables_block::DeclMembersLayout DeclMembersTable(Out);
4810+
for (auto &entry : DeclMemberNames) {
4811+
// Save BitOffset we're writing sub-table to.
4812+
static_assert(bitOffsetFitsIn32Bits(), "BitOffset too large");
4813+
assert(Out.GetCurrentBitNo() < (1ull << 32));
4814+
entry.second.first = Out.GetCurrentBitNo();
4815+
// Write sub-table.
4816+
writeDeclMembersTable(DeclMembersTable, *entry.second.second);
48204817
}
4821-
// Write top-level table mapping names to sub-tables.
4822-
index_block::DeclMemberNamesLayout DeclMemberNamesTable(Out);
4823-
writeDeclMemberNamesTable(DeclMemberNamesTable, DeclMemberNames);
48244818
}
4819+
// Write top-level table mapping names to sub-tables.
4820+
index_block::DeclMemberNamesLayout DeclMemberNamesTable(Out);
4821+
writeDeclMemberNamesTable(DeclMemberNamesTable, DeclMemberNames);
48254822
}
48264823
}
48274824

@@ -4854,8 +4851,7 @@ void Serializer::writeToStream(raw_ostream &os, ModuleOrSourceFile DC,
48544851
S.writeHeader(options);
48554852
S.writeInputBlock(options);
48564853
S.writeSIL(SILMod, options.SerializeAllSIL);
4857-
S.writeAST(DC, options.EnableNestedTypeLookupTable,
4858-
options.EnableDeclMemberNamesTable);
4854+
S.writeAST(DC, options.EnableNestedTypeLookupTable);
48594855
}
48604856

48614857
S.writeToStream(os);

lib/Serialization/Serialization.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -387,8 +387,7 @@ class Serializer {
387387

388388
/// Top-level entry point for serializing a module.
389389
void writeAST(ModuleOrSourceFile DC,
390-
bool enableNestedTypeLookupTable,
391-
bool enableDeclMemberNamesTable);
390+
bool enableNestedTypeLookupTable);
392391

393392
void writeToStream(raw_ostream &os);
394393

0 commit comments

Comments
 (0)