From e37e9f43b73bfd67a90d3b4d0719d25f65007e9c Mon Sep 17 00:00:00 2001 From: Richard Smith Date: Fri, 25 Mar 2016 01:17:43 +0000 Subject: [modules] Store a local offset to DeclContext lexical and visible contents. Saves a few bytes for each primary DeclContext. llvm-svn: 264377 --- clang/lib/Serialization/ASTWriterDecl.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'clang/lib/Serialization/ASTWriterDecl.cpp') diff --git a/clang/lib/Serialization/ASTWriterDecl.cpp b/clang/lib/Serialization/ASTWriterDecl.cpp index e22a94df2f3..752373646e6 100644 --- a/clang/lib/Serialization/ASTWriterDecl.cpp +++ b/clang/lib/Serialization/ASTWriterDecl.cpp @@ -136,6 +136,12 @@ namespace clang { void VisitOMPDeclareReductionDecl(OMPDeclareReductionDecl *D); void VisitOMPCapturedExprDecl(OMPCapturedExprDecl *D); + void AddLocalOffset(uint64_t LocalOffset) { + uint64_t Offset = Writer.Stream.GetCurrentBitNo(); + assert(LocalOffset < Offset && "invalid offset"); + Record.push_back(LocalOffset ? Offset - LocalOffset : 0); + } + /// Add an Objective-C type parameter list to the given record. void AddObjCTypeParamList(ObjCTypeParamList *typeParams) { // Empty type parameter list. @@ -1555,8 +1561,8 @@ void ASTDeclWriter::VisitStaticAssertDecl(StaticAssertDecl *D) { /// contexts. void ASTDeclWriter::VisitDeclContext(DeclContext *DC, uint64_t LexicalOffset, uint64_t VisibleOffset) { - Record.push_back(LexicalOffset); - Record.push_back(VisibleOffset); + AddLocalOffset(LexicalOffset); + AddLocalOffset(VisibleOffset); } const Decl *ASTWriter::getFirstLocalDecl(const Decl *D) { @@ -1626,7 +1632,7 @@ void ASTDeclWriter::VisitRedeclarable(Redeclarable *D) { else { auto Start = Writer.Stream.GetCurrentBitNo(); Writer.Stream.EmitRecord(LOCAL_REDECLARATIONS, LocalRedecls); - Record.push_back(Writer.Stream.GetCurrentBitNo() - Start); + AddLocalOffset(Start); } } else { Record.push_back(0); -- cgit v1.2.3