Skip to content

Commit eb4b58f

Browse files
committed
[modules] Factor out common code to mark identifier being "from AST", and add a
call in one more place to reduce the size of identifier tables in non-leaf modules. No behavior change. llvm-svn: 259866
1 parent ec50423 commit eb4b58f

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

clang/lib/Serialization/ASTReader.cpp

+15-15
Original file line numberDiff line numberDiff line change
@@ -768,6 +768,15 @@ IdentID ASTIdentifierLookupTrait::ReadIdentifierID(const unsigned char *d) {
768768
return Reader.getGlobalIdentifierID(F, RawID >> 1);
769769
}
770770

771+
static void markIdentifierFromAST(ASTReader &Reader, IdentifierInfo &II) {
772+
if (!II.isFromAST()) {
773+
II.setIsFromAST();
774+
bool IsModule = Reader.getPreprocessor().getCurrentModule() != nullptr;
775+
if (isInterestingIdentifier(Reader, II, IsModule))
776+
II.setChangedSinceDeserialization();
777+
}
778+
}
779+
771780
IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
772781
const unsigned char* d,
773782
unsigned DataLen) {
@@ -784,12 +793,7 @@ IdentifierInfo *ASTIdentifierLookupTrait::ReadData(const internal_key_type& k,
784793
II = &Reader.getIdentifierTable().getOwn(k);
785794
KnownII = II;
786795
}
787-
if (!II->isFromAST()) {
788-
II->setIsFromAST();
789-
bool IsModule = Reader.PP.getCurrentModule() != nullptr;
790-
if (isInterestingIdentifier(Reader, *II, IsModule))
791-
II->setChangedSinceDeserialization();
792-
}
796+
markIdentifierFromAST(Reader, *II);
793797
Reader.markIdentifierUpToDate(II);
794798

795799
IdentID ID = Reader.getGlobalIdentifierID(F, RawID);
@@ -3560,12 +3564,7 @@ ASTReader::ASTReadResult ASTReader::ReadAST(const std::string &FileName,
35603564

35613565
// Mark this identifier as being from an AST file so that we can track
35623566
// whether we need to serialize it.
3563-
if (!II.isFromAST()) {
3564-
II.setIsFromAST();
3565-
bool IsModule = PP.getCurrentModule() != nullptr;
3566-
if (isInterestingIdentifier(*this, II, IsModule))
3567-
II.setChangedSinceDeserialization();
3568-
}
3567+
markIdentifierFromAST(*this, II);
35693568

35703569
// Associate the ID with the identifier so that the writer can reuse it.
35713570
auto ID = Trait.ReadIdentifierID(Data + KeyDataLen.first);
@@ -7455,10 +7454,11 @@ IdentifierInfo *ASTReader::DecodeIdentifierInfo(IdentifierID ID) {
74557454
const unsigned char *StrLenPtr = (const unsigned char*) Str - 2;
74567455
unsigned StrLen = (((unsigned) StrLenPtr[0])
74577456
| (((unsigned) StrLenPtr[1]) << 8)) - 1;
7458-
IdentifiersLoaded[ID]
7459-
= &PP.getIdentifierTable().get(StringRef(Str, StrLen));
7457+
auto &II = PP.getIdentifierTable().get(StringRef(Str, StrLen));
7458+
IdentifiersLoaded[ID] = &II;
7459+
markIdentifierFromAST(*this, II);
74607460
if (DeserializationListener)
7461-
DeserializationListener->IdentifierRead(ID + 1, IdentifiersLoaded[ID]);
7461+
DeserializationListener->IdentifierRead(ID + 1, &II);
74627462
}
74637463

74647464
return IdentifiersLoaded[ID];

0 commit comments

Comments
 (0)