@@ -414,9 +414,7 @@ class ASTDeclReader : public DeclVisitor<ASTDeclReader, void> {
414
414
void VisitOpenACCDeclareDecl (OpenACCDeclareDecl *D);
415
415
void VisitOpenACCRoutineDecl (OpenACCRoutineDecl *D);
416
416
417
- void VisitDeclContext (DeclContext *DC, uint64_t &LexicalOffset,
418
- uint64_t &VisibleOffset, uint64_t &ModuleLocalOffset,
419
- uint64_t &TULocalOffset);
417
+ void VisitDeclContext (DeclContext *DC, LookupBlockOffsets &Offsets);
420
418
421
419
template <typename T>
422
420
RedeclarableResult VisitRedeclarable (Redeclarable<T> *D);
@@ -1875,12 +1873,8 @@ void ASTDeclReader::VisitNamespaceDecl(NamespaceDecl *D) {
1875
1873
1876
1874
void ASTDeclReader::VisitHLSLBufferDecl (HLSLBufferDecl *D) {
1877
1875
VisitNamedDecl (D);
1878
- uint64_t LexicalOffset = 0 ;
1879
- uint64_t VisibleOffset = 0 ;
1880
- uint64_t ModuleLocalOffset = 0 ;
1881
- uint64_t TULocalOffset = 0 ;
1882
- VisitDeclContext (D, LexicalOffset, VisibleOffset, ModuleLocalOffset,
1883
- TULocalOffset);
1876
+ LookupBlockOffsets Offsets;
1877
+ VisitDeclContext (D, Offsets);
1884
1878
D->IsCBuffer = Record.readBool ();
1885
1879
D->KwLoc = readSourceLocation ();
1886
1880
D->LBraceLoc = readSourceLocation ();
@@ -2794,14 +2788,12 @@ void ASTDeclReader::VisitLifetimeExtendedTemporaryDecl(
2794
2788
mergeMergeable (D);
2795
2789
}
2796
2790
2797
- void ASTDeclReader::VisitDeclContext (DeclContext *DC, uint64_t &LexicalOffset,
2798
- uint64_t &VisibleOffset,
2799
- uint64_t &ModuleLocalOffset,
2800
- uint64_t &TULocalOffset) {
2801
- LexicalOffset = ReadLocalOffset ();
2802
- VisibleOffset = ReadLocalOffset ();
2803
- ModuleLocalOffset = ReadLocalOffset ();
2804
- TULocalOffset = ReadLocalOffset ();
2791
+ void ASTDeclReader::VisitDeclContext (DeclContext *DC,
2792
+ LookupBlockOffsets &Offsets) {
2793
+ Offsets.LexicalOffset = ReadLocalOffset ();
2794
+ Offsets.VisibleOffset = ReadLocalOffset ();
2795
+ Offsets.ModuleLocalOffset = ReadLocalOffset ();
2796
+ Offsets.TULocalOffset = ReadLocalOffset ();
2805
2797
}
2806
2798
2807
2799
template <typename T>
@@ -4249,42 +4241,37 @@ Decl *ASTReader::ReadDeclRecord(GlobalDeclID ID) {
4249
4241
// If this declaration is also a declaration context, get the
4250
4242
// offsets for its tables of lexical and visible declarations.
4251
4243
if (auto *DC = dyn_cast<DeclContext>(D)) {
4252
- uint64_t LexicalOffset = 0 ;
4253
- uint64_t VisibleOffset = 0 ;
4254
- uint64_t ModuleLocalOffset = 0 ;
4255
- uint64_t TULocalOffset = 0 ;
4244
+ LookupBlockOffsets Offsets;
4256
4245
4257
- Reader.VisitDeclContext (DC, LexicalOffset, VisibleOffset, ModuleLocalOffset,
4258
- TULocalOffset);
4246
+ Reader.VisitDeclContext (DC, Offsets);
4259
4247
4260
4248
// Get the lexical and visible block for the delayed namespace.
4261
4249
// It is sufficient to judge if ID is in DelayedNamespaceOffsetMap.
4262
4250
// But it may be more efficient to filter the other cases.
4263
- if (!LexicalOffset && !VisibleOffset && !ModuleLocalOffset &&
4264
- isa<NamespaceDecl>(D))
4251
+ if (!Offsets && isa<NamespaceDecl>(D))
4265
4252
if (auto Iter = DelayedNamespaceOffsetMap.find (ID);
4266
- Iter != DelayedNamespaceOffsetMap.end ()) {
4267
- LexicalOffset = Iter->second .LexicalOffset ;
4268
- VisibleOffset = Iter->second .VisibleOffset ;
4269
- ModuleLocalOffset = Iter->second .ModuleLocalOffset ;
4270
- TULocalOffset = Iter->second .TULocalOffset ;
4271
- }
4253
+ Iter != DelayedNamespaceOffsetMap.end ())
4254
+ Offsets = Iter->second ;
4272
4255
4273
- if (LexicalOffset &&
4274
- ReadLexicalDeclContextStorage (*Loc.F , DeclsCursor, LexicalOffset, DC))
4275
- return nullptr ;
4276
- if (VisibleOffset && ReadVisibleDeclContextStorage (
4277
- *Loc.F , DeclsCursor, VisibleOffset, ID,
4278
- VisibleDeclContextStorageKind::GenerallyVisible))
4256
+ if (Offsets.VisibleOffset &&
4257
+ ReadVisibleDeclContextStorage (
4258
+ *Loc.F , DeclsCursor, Offsets.VisibleOffset , ID,
4259
+ VisibleDeclContextStorageKind::GenerallyVisible))
4279
4260
return nullptr ;
4280
- if (ModuleLocalOffset &&
4261
+ if (Offsets. ModuleLocalOffset &&
4281
4262
ReadVisibleDeclContextStorage (
4282
- *Loc.F , DeclsCursor, ModuleLocalOffset, ID,
4263
+ *Loc.F , DeclsCursor, Offsets. ModuleLocalOffset , ID,
4283
4264
VisibleDeclContextStorageKind::ModuleLocalVisible))
4284
4265
return nullptr ;
4285
- if (TULocalOffset && ReadVisibleDeclContextStorage (
4286
- *Loc.F , DeclsCursor, TULocalOffset, ID,
4287
- VisibleDeclContextStorageKind::TULocalVisible))
4266
+ if (Offsets.TULocalOffset &&
4267
+ ReadVisibleDeclContextStorage (
4268
+ *Loc.F , DeclsCursor, Offsets.TULocalOffset , ID,
4269
+ VisibleDeclContextStorageKind::TULocalVisible))
4270
+ return nullptr ;
4271
+
4272
+ if (Offsets.LexicalOffset &&
4273
+ ReadLexicalDeclContextStorage (*Loc.F , DeclsCursor,
4274
+ Offsets.LexicalOffset , DC))
4288
4275
return nullptr ;
4289
4276
}
4290
4277
assert (Record.getIdx () == Record.size ());
0 commit comments