Skip to content

Commit fdbc55a

Browse files
committed
[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
1 parent da137e1 commit fdbc55a

File tree

4 files changed

+26
-13
lines changed

4 files changed

+26
-13
lines changed

clang/include/clang/Serialization/ASTReader.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2196,6 +2196,18 @@ class ASTReader
21962196
return ReadSourceLocation(ModuleFile, Record[Idx++], Seq);
21972197
}
21982198

2199+
/// Read a FileID.
2200+
FileID ReadFileID(ModuleFile &F, const RecordDataImpl &Record,
2201+
unsigned &Idx) const {
2202+
return TranslateFileID(F, FileID::get(Record[Idx++]));
2203+
}
2204+
2205+
/// Translate a FileID from another module file's FileID space into ours.
2206+
FileID TranslateFileID(ModuleFile &F, FileID FID) const {
2207+
assert(FID.ID >= 0 && "Reading non-local FileID.");
2208+
return FileID::get(F.SLocEntryBaseID + FID.ID - 1);
2209+
}
2210+
21992211
/// Read a source range.
22002212
SourceRange ReadSourceRange(ModuleFile &F, const RecordData &Record,
22012213
unsigned &Idx, LocSeq *Seq = nullptr);

clang/include/clang/Serialization/ASTWriter.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,9 @@ class ASTWriter : public ASTDeserializationListener,
582582
void AddAlignPackInfo(const Sema::AlignPackInfo &Info,
583583
RecordDataImpl &Record);
584584

585+
/// Emit a FileID.
586+
void AddFileID(FileID FID, RecordDataImpl &Record);
587+
585588
/// Emit a source location.
586589
void AddSourceLocation(SourceLocation Loc, RecordDataImpl &Record,
587590
LocSeq *Seq = nullptr);

clang/lib/Serialization/ASTReader.cpp

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1338,10 +1338,7 @@ void ASTReader::ParseLineTable(ModuleFile &F, const RecordData &Record) {
13381338
// Parse the line entries
13391339
std::vector<LineEntry> Entries;
13401340
while (Idx < Record.size()) {
1341-
int FID = Record[Idx++];
1342-
assert(FID >= 0 && "Serialized line entries for non-local file.");
1343-
// Remap FileID from 1-based old view.
1344-
FID += F.SLocEntryBaseID - 1;
1341+
FileID FID = ReadFileID(F, Record, Idx);
13451342

13461343
// Extract the line entries
13471344
unsigned NumEntries = Record[Idx++];
@@ -1358,7 +1355,7 @@ void ASTReader::ParseLineTable(ModuleFile &F, const RecordData &Record) {
13581355
Entries.push_back(LineEntry::get(FileOffset, LineNo, FilenameID,
13591356
FileKind, IncludeOffset));
13601357
}
1361-
LineTable.AddEntry(FileID::get(FID), Entries);
1358+
LineTable.AddEntry(FID, Entries);
13621359
}
13631360
}
13641361

@@ -4294,10 +4291,8 @@ ASTReader::ASTReadResult ASTReader::ReadAST(StringRef FileName,
42944291

42954292
// Map the original source file ID into the ID space of the current
42964293
// compilation.
4297-
if (F.OriginalSourceFileID.isValid()) {
4298-
F.OriginalSourceFileID = FileID::get(
4299-
F.SLocEntryBaseID + F.OriginalSourceFileID.getOpaqueValue() - 1);
4300-
}
4294+
if (F.OriginalSourceFileID.isValid())
4295+
F.OriginalSourceFileID = TranslateFileID(F, F.OriginalSourceFileID);
43014296

43024297
// Preload all the pending interesting identifiers by marking them out of
43034298
// date.

clang/lib/Serialization/ASTWriter.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1469,12 +1469,12 @@ void ASTWriter::WriteControlBlock(Preprocessor &PP, ASTContext &Context,
14691469

14701470
Record.clear();
14711471
Record.push_back(ORIGINAL_FILE);
1472-
Record.push_back(SM.getMainFileID().getOpaqueValue());
1472+
AddFileID(SM.getMainFileID(), Record);
14731473
EmitRecordWithPath(FileAbbrevCode, Record, MainFile->getName());
14741474
}
14751475

14761476
Record.clear();
1477-
Record.push_back(SM.getMainFileID().getOpaqueValue());
1477+
AddFileID(SM.getMainFileID(), Record);
14781478
Stream.EmitRecord(ORIGINAL_FILE_ID, Record);
14791479

14801480
std::set<const FileEntry *> AffectingClangModuleMaps;
@@ -2206,8 +2206,7 @@ void ASTWriter::WriteSourceManagerBlock(SourceManager &SourceMgr,
22062206
if (L.first.ID < 0)
22072207
continue;
22082208

2209-
// Emit the file ID
2210-
Record.push_back(L.first.ID);
2209+
AddFileID(L.first, Record);
22112210

22122211
// Emit the line entries
22132212
Record.push_back(L.second.size());
@@ -5228,6 +5227,10 @@ void ASTWriter::AddAlignPackInfo(const Sema::AlignPackInfo &Info,
52285227
Record.push_back(Raw);
52295228
}
52305229

5230+
void ASTWriter::AddFileID(FileID FID, RecordDataImpl &Record) {
5231+
Record.push_back(FID.getOpaqueValue());
5232+
}
5233+
52315234
void ASTWriter::AddSourceLocation(SourceLocation Loc, RecordDataImpl &Record,
52325235
SourceLocationSequence *Seq) {
52335236
Record.push_back(SourceLocationEncoding::encode(Loc, Seq));

0 commit comments

Comments
 (0)