forked from OSchip/llvm-project
Allow loading declarations from any file in the chain. WIP
llvm-svn: 108956
This commit is contained in:
parent
41ff5d4d91
commit
3462779369
|
@ -548,7 +548,8 @@ private:
|
|||
QualType ReadTypeRecord(unsigned Index);
|
||||
RecordLocation TypeCursorForIndex(unsigned Index);
|
||||
void LoadedDecl(unsigned Index, Decl *D);
|
||||
Decl *ReadDeclRecord(uint64_t Offset, unsigned Index);
|
||||
Decl *ReadDeclRecord(unsigned Index);
|
||||
RecordLocation DeclCursorForIndex(unsigned Index);
|
||||
|
||||
void PassInterestingDeclsToConsumer();
|
||||
|
||||
|
|
|
@ -2805,7 +2805,7 @@ Decl *PCHReader::GetExternalDecl(uint32_t ID) {
|
|||
|
||||
TranslationUnitDecl *PCHReader::GetTranslationUnitDecl() {
|
||||
if (!DeclsLoaded[0]) {
|
||||
ReadDeclRecord(Chain[0]->DeclOffsets[0], 0);
|
||||
ReadDeclRecord(0);
|
||||
if (DeserializationListener)
|
||||
DeserializationListener->DeclRead(1, DeclsLoaded[0]);
|
||||
}
|
||||
|
@ -2824,7 +2824,7 @@ Decl *PCHReader::GetDecl(pch::DeclID ID) {
|
|||
|
||||
unsigned Index = ID - 1;
|
||||
if (!DeclsLoaded[Index]) {
|
||||
ReadDeclRecord(Chain[0]->DeclOffsets[Index], Index);
|
||||
ReadDeclRecord(Index);
|
||||
if (DeserializationListener)
|
||||
DeserializationListener->DeclRead(ID, DeclsLoaded[Index]);
|
||||
}
|
||||
|
|
|
@ -1254,9 +1254,23 @@ static bool isConsumerInterestedIn(Decl *D) {
|
|||
return isa<ObjCProtocolDecl>(D);
|
||||
}
|
||||
|
||||
/// \brief Get the correct cursor and offset for loading a type.
|
||||
PCHReader::RecordLocation PCHReader::DeclCursorForIndex(unsigned Index) {
|
||||
PerFileData *F = 0;
|
||||
for (unsigned I = 0, N = Chain.size(); I != N; ++I) {
|
||||
F = Chain[N - I - 1];
|
||||
if (Index < F->LocalNumDecls)
|
||||
break;
|
||||
Index -= F->LocalNumDecls;
|
||||
}
|
||||
assert(F && F->LocalNumDecls > Index && "Broken chain");
|
||||
return RecordLocation(F->DeclsCursor, F->DeclOffsets[Index]);
|
||||
}
|
||||
|
||||
/// \brief Read the declaration at the given offset from the PCH file.
|
||||
Decl *PCHReader::ReadDeclRecord(uint64_t Offset, unsigned Index) {
|
||||
llvm::BitstreamCursor &DeclsCursor = Chain[0]->DeclsCursor;
|
||||
Decl *PCHReader::ReadDeclRecord(unsigned Index) {
|
||||
RecordLocation Loc = DeclCursorForIndex(Index);
|
||||
llvm::BitstreamCursor &DeclsCursor = Loc.first;
|
||||
// Keep track of where we are in the stream, then jump back there
|
||||
// after reading this declaration.
|
||||
SavedStreamPosition SavedPosition(DeclsCursor);
|
||||
|
@ -1266,7 +1280,7 @@ Decl *PCHReader::ReadDeclRecord(uint64_t Offset, unsigned Index) {
|
|||
// Note that we are loading a declaration record.
|
||||
LoadingTypeOrDecl Loading(*this);
|
||||
|
||||
DeclsCursor.JumpToBit(Offset);
|
||||
DeclsCursor.JumpToBit(Loc.second);
|
||||
RecordData Record;
|
||||
unsigned Code = DeclsCursor.ReadCode();
|
||||
unsigned Idx = 0;
|
||||
|
|
Loading…
Reference in New Issue