[clang] fdbc55a - [clang][modules] NFCI: Unify FileID writing/reading
Jan Svoboda via cfe-commits
cfe-commits at lists.llvm.org
Tue Nov 1 18:57:19 PDT 2022
Author: Jan Svoboda
Date: 2022-11-01T18:57:13-07:00
New Revision: fdbc55a51a792c65d4a1fd1f5d8e6ab19e0187d2
URL: https://github.com/llvm/llvm-project/commit/fdbc55a51a792c65d4a1fd1f5d8e6ab19e0187d2
DIFF: https://github.com/llvm/llvm-project/commit/fdbc55a51a792c65d4a1fd1f5d8e6ab19e0187d2.diff
LOG: [clang][modules] NFCI: Unify FileID writing/reading
This patch adds new functions for writing/reading `FileID`s and uses them to replace some ad-hoc code.
Reviewed By: dexonsmith
Differential Revision: https://reviews.llvm.org/D137211
Added:
Modified:
clang/include/clang/Serialization/ASTReader.h
clang/include/clang/Serialization/ASTWriter.h
clang/lib/Serialization/ASTReader.cpp
clang/lib/Serialization/ASTWriter.cpp
Removed:
################################################################################
diff --git a/clang/include/clang/Serialization/ASTReader.h b/clang/include/clang/Serialization/ASTReader.h
index 820028d5c3ae7..da8b9a9207a03 100644
--- a/clang/include/clang/Serialization/ASTReader.h
+++ b/clang/include/clang/Serialization/ASTReader.h
@@ -2196,6 +2196,18 @@ class ASTReader
return ReadSourceLocation(ModuleFile, Record[Idx++], Seq);
}
+ /// Read a FileID.
+ FileID ReadFileID(ModuleFile &F, const RecordDataImpl &Record,
+ unsigned &Idx) const {
+ return TranslateFileID(F, FileID::get(Record[Idx++]));
+ }
+
+ /// Translate a FileID from another module file's FileID space into ours.
+ FileID TranslateFileID(ModuleFile &F, FileID FID) const {
+ assert(FID.ID >= 0 && "Reading non-local FileID.");
+ return FileID::get(F.SLocEntryBaseID + FID.ID - 1);
+ }
+
/// Read a source range.
SourceRange ReadSourceRange(ModuleFile &F, const RecordData &Record,
unsigned &Idx, LocSeq *Seq = nullptr);
diff --git a/clang/include/clang/Serialization/ASTWriter.h b/clang/include/clang/Serialization/ASTWriter.h
index 81e5fac4a7294..b0e8306b3a8ee 100644
--- a/clang/include/clang/Serialization/ASTWriter.h
+++ b/clang/include/clang/Serialization/ASTWriter.h
@@ -582,6 +582,9 @@ class ASTWriter : public ASTDeserializationListener,
void AddAlignPackInfo(const Sema::AlignPackInfo &Info,
RecordDataImpl &Record);
+ /// Emit a FileID.
+ void AddFileID(FileID FID, RecordDataImpl &Record);
+
/// Emit a source location.
void AddSourceLocation(SourceLocation Loc, RecordDataImpl &Record,
LocSeq *Seq = nullptr);
diff --git a/clang/lib/Serialization/ASTReader.cpp b/clang/lib/Serialization/ASTReader.cpp
index 5db55d5cb7af5..cd63e9428bfdb 100644
--- a/clang/lib/Serialization/ASTReader.cpp
+++ b/clang/lib/Serialization/ASTReader.cpp
@@ -1338,10 +1338,7 @@ void ASTReader::ParseLineTable(ModuleFile &F, const RecordData &Record) {
// Parse the line entries
std::vector<LineEntry> Entries;
while (Idx < Record.size()) {
- int FID = Record[Idx++];
- assert(FID >= 0 && "Serialized line entries for non-local file.");
- // Remap FileID from 1-based old view.
- FID += F.SLocEntryBaseID - 1;
+ FileID FID = ReadFileID(F, Record, Idx);
// Extract the line entries
unsigned NumEntries = Record[Idx++];
@@ -1358,7 +1355,7 @@ void ASTReader::ParseLineTable(ModuleFile &F, const RecordData &Record) {
Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
FileKind, IncludeOffset));
}
- LineTable.AddEntry(FileID::get(FID), Entries);
+ LineTable.AddEntry(FID, Entries);
}
}
@@ -4294,10 +4291,8 @@ ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
// Map the original source file ID into the ID space of the current
// compilation.
- if (F.OriginalSourceFileID.isValid()) {
- F.OriginalSourceFileID = FileID::get(
- F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
- }
+ if (F.OriginalSourceFileID.isValid())
+ F.OriginalSourceFileID = TranslateFileID(F, F.OriginalSourceFileID);
// Preload all the pending interesting identifiers by marking them out of
// date.
diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp
index c2a586426a935..b2aa4a3c43df7 100644
--- a/clang/lib/Serialization/ASTWriter.cpp
+++ b/clang/lib/Serialization/ASTWriter.cpp
@@ -1469,12 +1469,12 @@ void ASTWriter::WriteControlBlock(Preprocessor &PP, ASTContext &Context,
Record.clear();
Record.push_back(ORIGINAL_FILE);
- Record.push_back(SM.getMainFileID().getOpaqueValue());
+ AddFileID(SM.getMainFileID(), Record);
EmitRecordWithPath(FileAbbrevCode, Record, MainFile->getName());
}
Record.clear();
- Record.push_back(SM.getMainFileID().getOpaqueValue());
+ AddFileID(SM.getMainFileID(), Record);
Stream.EmitRecord(ORIGINAL_FILE_ID, Record);
std::set<const FileEntry *> AffectingClangModuleMaps;
@@ -2206,8 +2206,7 @@ void ASTWriter::WriteSourceManagerBlock(SourceManager &SourceMgr,
if (L.first.ID < 0)
continue;
- // Emit the file ID
- Record.push_back(L.first.ID);
+ AddFileID(L.first, Record);
// Emit the line entries
Record.push_back(L.second.size());
@@ -5228,6 +5227,10 @@ void ASTWriter::AddAlignPackInfo(const Sema::AlignPackInfo &Info,
Record.push_back(Raw);
}
+void ASTWriter::AddFileID(FileID FID, RecordDataImpl &Record) {
+ Record.push_back(FID.getOpaqueValue());
+}
+
void ASTWriter::AddSourceLocation(SourceLocation Loc, RecordDataImpl &Record,
SourceLocationSequence *Seq) {
Record.push_back(SourceLocationEncoding::encode(Loc, Seq));
More information about the cfe-commits
mailing list