[cfe-commits] r110566 - in /cfe/trunk: include/clang/AST/DeclCXX.h include/clang/Frontend/PCHReader.h include/clang/Frontend/PCHWriter.h lib/Frontend/PCHReader.cpp lib/Frontend/PCHReaderDecl.cpp lib/Frontend/PCHWriter.cpp lib/Frontend/PCHWriterDecl.cpp
Argyrios Kyrtzidis
akyrtzi at gmail.com
Mon Aug 9 03:54:12 PDT 2010
Author: akirtzidis
Date: Mon Aug 9 05:54:12 2010
New Revision: 110566
URL: http://llvm.org/viewvc/llvm-project?rev=110566&view=rev
Log:
Refactor into functions PCH reading/writing the CXXBaseOrMemberInitializers. No functionality change.
Modified:
cfe/trunk/include/clang/AST/DeclCXX.h
cfe/trunk/include/clang/Frontend/PCHReader.h
cfe/trunk/include/clang/Frontend/PCHWriter.h
cfe/trunk/lib/Frontend/PCHReader.cpp
cfe/trunk/lib/Frontend/PCHReaderDecl.cpp
cfe/trunk/lib/Frontend/PCHWriter.cpp
cfe/trunk/lib/Frontend/PCHWriterDecl.cpp
Modified: cfe/trunk/include/clang/AST/DeclCXX.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/DeclCXX.h?rev=110566&r1=110565&r2=110566&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/DeclCXX.h (original)
+++ cfe/trunk/include/clang/AST/DeclCXX.h Mon Aug 9 05:54:12 2010
@@ -1283,7 +1283,7 @@
/// getMember - If this is a member initializer, returns the
/// declaration of the non-static data member being
/// initialized. Otherwise, returns NULL.
- FieldDecl *getMember() {
+ FieldDecl *getMember() const {
if (isMemberInitializer())
return BaseOrMember.get<FieldDecl*>();
else
@@ -1361,7 +1361,7 @@
reinterpret_cast<VarDecl **>(this + 1)[I] = Index;
}
- Expr *getInit() { return static_cast<Expr *>(Init); }
+ Expr *getInit() const { return static_cast<Expr *>(Init); }
};
/// CXXConstructorDecl - Represents a C++ constructor within a
Modified: cfe/trunk/include/clang/Frontend/PCHReader.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/PCHReader.h?rev=110566&r1=110565&r2=110566&view=diff
==============================================================================
--- cfe/trunk/include/clang/Frontend/PCHReader.h (original)
+++ cfe/trunk/include/clang/Frontend/PCHReader.h Mon Aug 9 05:54:12 2010
@@ -876,6 +876,11 @@
CXXBaseSpecifier ReadCXXBaseSpecifier(llvm::BitstreamCursor &DeclsCursor,
const RecordData &Record,unsigned &Idx);
+ /// \brief Read a CXXBaseOrMemberInitializer array.
+ std::pair<CXXBaseOrMemberInitializer **, unsigned>
+ ReadCXXBaseOrMemberInitializers(llvm::BitstreamCursor &DeclsCursor,
+ const RecordData &Record, unsigned &Idx);
+
/// \brief Read a source location.
SourceLocation ReadSourceLocation(const RecordData &Record, unsigned& Idx) {
return SourceLocation::getFromRawEncoding(Record[Idx++]);
Modified: cfe/trunk/include/clang/Frontend/PCHWriter.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Frontend/PCHWriter.h?rev=110566&r1=110565&r2=110566&view=diff
==============================================================================
--- cfe/trunk/include/clang/Frontend/PCHWriter.h (original)
+++ cfe/trunk/include/clang/Frontend/PCHWriter.h Mon Aug 9 05:54:12 2010
@@ -401,6 +401,11 @@
/// \brief Emit a C++ base specifier.
void AddCXXBaseSpecifier(const CXXBaseSpecifier &Base, RecordData &Record);
+ /// \brief Emit a CXXBaseOrMemberInitializer array.
+ void AddCXXBaseOrMemberInitializers(
+ const CXXBaseOrMemberInitializer * const *BaseOrMembers,
+ unsigned NumBaseOrMembers, RecordData &Record);
+
/// \brief Add a string to the given record.
void AddString(const std::string &Str, RecordData &Record);
Modified: cfe/trunk/lib/Frontend/PCHReader.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PCHReader.cpp?rev=110566&r1=110565&r2=110566&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/PCHReader.cpp (original)
+++ cfe/trunk/lib/Frontend/PCHReader.cpp Mon Aug 9 05:54:12 2010
@@ -3579,6 +3579,70 @@
return CXXBaseSpecifier(Range, isVirtual, isBaseOfClass, AS, TInfo);
}
+std::pair<CXXBaseOrMemberInitializer **, unsigned>
+PCHReader::ReadCXXBaseOrMemberInitializers(llvm::BitstreamCursor &Cursor,
+ const RecordData &Record,
+ unsigned &Idx) {
+ CXXBaseOrMemberInitializer **BaseOrMemberInitializers = 0;
+ unsigned NumInitializers = Record[Idx++];
+ if (NumInitializers) {
+ ASTContext &C = *getContext();
+
+ BaseOrMemberInitializers
+ = new (C) CXXBaseOrMemberInitializer*[NumInitializers];
+ for (unsigned i=0; i != NumInitializers; ++i) {
+ TypeSourceInfo *BaseClassInfo = 0;
+ bool IsBaseVirtual = false;
+ FieldDecl *Member = 0;
+
+ bool IsBaseInitializer = Record[Idx++];
+ if (IsBaseInitializer) {
+ BaseClassInfo = GetTypeSourceInfo(Cursor, Record, Idx);
+ IsBaseVirtual = Record[Idx++];
+ } else {
+ Member = cast<FieldDecl>(GetDecl(Record[Idx++]));
+ }
+ SourceLocation MemberLoc = ReadSourceLocation(Record, Idx);
+ Expr *Init = ReadExpr(Cursor);
+ FieldDecl *AnonUnionMember
+ = cast_or_null<FieldDecl>(GetDecl(Record[Idx++]));
+ SourceLocation LParenLoc = ReadSourceLocation(Record, Idx);
+ SourceLocation RParenLoc = ReadSourceLocation(Record, Idx);
+ bool IsWritten = Record[Idx++];
+ unsigned SourceOrderOrNumArrayIndices;
+ llvm::SmallVector<VarDecl *, 8> Indices;
+ if (IsWritten) {
+ SourceOrderOrNumArrayIndices = Record[Idx++];
+ } else {
+ SourceOrderOrNumArrayIndices = Record[Idx++];
+ Indices.reserve(SourceOrderOrNumArrayIndices);
+ for (unsigned i=0; i != SourceOrderOrNumArrayIndices; ++i)
+ Indices.push_back(cast<VarDecl>(GetDecl(Record[Idx++])));
+ }
+
+ CXXBaseOrMemberInitializer *BOMInit;
+ if (IsBaseInitializer) {
+ BOMInit = new (C) CXXBaseOrMemberInitializer(C, BaseClassInfo,
+ IsBaseVirtual, LParenLoc,
+ Init, RParenLoc);
+ } else if (IsWritten) {
+ BOMInit = new (C) CXXBaseOrMemberInitializer(C, Member, MemberLoc,
+ LParenLoc, Init, RParenLoc);
+ } else {
+ BOMInit = CXXBaseOrMemberInitializer::Create(C, Member, MemberLoc,
+ LParenLoc, Init, RParenLoc,
+ Indices.data(),
+ Indices.size());
+ }
+
+ BOMInit->setAnonUnionMember(AnonUnionMember);
+ BaseOrMemberInitializers[i] = BOMInit;
+ }
+ }
+
+ return std::make_pair(BaseOrMemberInitializers, NumInitializers);
+}
+
NestedNameSpecifier *
PCHReader::ReadNestedNameSpecifier(const RecordData &Record, unsigned &Idx) {
unsigned N = Record[Idx++];
Modified: cfe/trunk/lib/Frontend/PCHReaderDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PCHReaderDecl.cpp?rev=110566&r1=110565&r2=110566&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/PCHReaderDecl.cpp (original)
+++ cfe/trunk/lib/Frontend/PCHReaderDecl.cpp Mon Aug 9 05:54:12 2010
@@ -783,63 +783,8 @@
D->IsExplicitSpecified = Record[Idx++];
D->ImplicitlyDefined = Record[Idx++];
-
- unsigned NumInitializers = Record[Idx++];
- D->NumBaseOrMemberInitializers = NumInitializers;
- if (NumInitializers) {
- ASTContext &C = *Reader.getContext();
-
- D->BaseOrMemberInitializers
- = new (C) CXXBaseOrMemberInitializer*[NumInitializers];
- for (unsigned i=0; i != NumInitializers; ++i) {
- TypeSourceInfo *BaseClassInfo = 0;
- bool IsBaseVirtual = false;
- FieldDecl *Member = 0;
-
- bool IsBaseInitializer = Record[Idx++];
- if (IsBaseInitializer) {
- BaseClassInfo = Reader.GetTypeSourceInfo(Cursor, Record, Idx);
- IsBaseVirtual = Record[Idx++];
- } else {
- Member = cast<FieldDecl>(Reader.GetDecl(Record[Idx++]));
- }
- SourceLocation MemberLoc = Reader.ReadSourceLocation(Record, Idx);
- Expr *Init = Reader.ReadExpr(Cursor);
- FieldDecl *AnonUnionMember
- = cast_or_null<FieldDecl>(Reader.GetDecl(Record[Idx++]));
- SourceLocation LParenLoc = Reader.ReadSourceLocation(Record, Idx);
- SourceLocation RParenLoc = Reader.ReadSourceLocation(Record, Idx);
- bool IsWritten = Record[Idx++];
- unsigned SourceOrderOrNumArrayIndices;
- llvm::SmallVector<VarDecl *, 8> Indices;
- if (IsWritten) {
- SourceOrderOrNumArrayIndices = Record[Idx++];
- } else {
- SourceOrderOrNumArrayIndices = Record[Idx++];
- Indices.reserve(SourceOrderOrNumArrayIndices);
- for (unsigned i=0; i != SourceOrderOrNumArrayIndices; ++i)
- Indices.push_back(cast<VarDecl>(Reader.GetDecl(Record[Idx++])));
- }
-
- CXXBaseOrMemberInitializer *BOMInit;
- if (IsBaseInitializer) {
- BOMInit = new (C) CXXBaseOrMemberInitializer(C, BaseClassInfo,
- IsBaseVirtual, LParenLoc,
- Init, RParenLoc);
- } else if (IsWritten) {
- BOMInit = new (C) CXXBaseOrMemberInitializer(C, Member, MemberLoc,
- LParenLoc, Init, RParenLoc);
- } else {
- BOMInit = CXXBaseOrMemberInitializer::Create(C, Member, MemberLoc,
- LParenLoc, Init, RParenLoc,
- Indices.data(),
- Indices.size());
- }
-
- BOMInit->setAnonUnionMember(AnonUnionMember);
- D->BaseOrMemberInitializers[i] = BOMInit;
- }
- }
+ llvm::tie(D->BaseOrMemberInitializers, D->NumBaseOrMemberInitializers)
+ = Reader.ReadCXXBaseOrMemberInitializers(Cursor, Record, Idx);
}
void PCHDeclReader::VisitCXXDestructorDecl(CXXDestructorDecl *D) {
Modified: cfe/trunk/lib/Frontend/PCHWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PCHWriter.cpp?rev=110566&r1=110565&r2=110566&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/PCHWriter.cpp (original)
+++ cfe/trunk/lib/Frontend/PCHWriter.cpp Mon Aug 9 05:54:12 2010
@@ -3015,6 +3015,36 @@
AddSourceRange(Base.getSourceRange(), Record);
}
+void PCHWriter::AddCXXBaseOrMemberInitializers(
+ const CXXBaseOrMemberInitializer * const *BaseOrMembers,
+ unsigned NumBaseOrMembers, RecordData &Record) {
+ Record.push_back(NumBaseOrMembers);
+ for (unsigned i=0; i != NumBaseOrMembers; ++i) {
+ const CXXBaseOrMemberInitializer *Init = BaseOrMembers[i];
+
+ Record.push_back(Init->isBaseInitializer());
+ if (Init->isBaseInitializer()) {
+ AddTypeSourceInfo(Init->getBaseClassInfo(), Record);
+ Record.push_back(Init->isBaseVirtual());
+ } else {
+ AddDeclRef(Init->getMember(), Record);
+ }
+ AddSourceLocation(Init->getMemberLocation(), Record);
+ AddStmt(Init->getInit());
+ AddDeclRef(Init->getAnonUnionMember(), Record);
+ AddSourceLocation(Init->getLParenLoc(), Record);
+ AddSourceLocation(Init->getRParenLoc(), Record);
+ Record.push_back(Init->isWritten());
+ if (Init->isWritten()) {
+ Record.push_back(Init->getSourceOrder());
+ } else {
+ Record.push_back(Init->getNumArrayIndices());
+ for (unsigned i=0, e=Init->getNumArrayIndices(); i != e; ++i)
+ AddDeclRef(Init->getArrayIndex(i), Record);
+ }
+ }
+}
+
void PCHWriter::SetReader(PCHReader *Reader) {
assert(Reader && "Cannot remove chain");
assert(FirstDeclID == NextDeclID &&
Modified: cfe/trunk/lib/Frontend/PCHWriterDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PCHWriterDecl.cpp?rev=110566&r1=110565&r2=110566&view=diff
==============================================================================
--- cfe/trunk/lib/Frontend/PCHWriterDecl.cpp (original)
+++ cfe/trunk/lib/Frontend/PCHWriterDecl.cpp Mon Aug 9 05:54:12 2010
@@ -760,32 +760,8 @@
Record.push_back(D->IsExplicitSpecified);
Record.push_back(D->ImplicitlyDefined);
-
- Record.push_back(D->NumBaseOrMemberInitializers);
- for (unsigned i=0; i != D->NumBaseOrMemberInitializers; ++i) {
- CXXBaseOrMemberInitializer *Init = D->BaseOrMemberInitializers[i];
-
- Record.push_back(Init->isBaseInitializer());
- if (Init->isBaseInitializer()) {
- Writer.AddTypeSourceInfo(Init->getBaseClassInfo(), Record);
- Record.push_back(Init->isBaseVirtual());
- } else {
- Writer.AddDeclRef(Init->getMember(), Record);
- }
- Writer.AddSourceLocation(Init->getMemberLocation(), Record);
- Writer.AddStmt(Init->getInit());
- Writer.AddDeclRef(Init->getAnonUnionMember(), Record);
- Writer.AddSourceLocation(Init->getLParenLoc(), Record);
- Writer.AddSourceLocation(Init->getRParenLoc(), Record);
- Record.push_back(Init->isWritten());
- if (Init->isWritten()) {
- Record.push_back(Init->getSourceOrder());
- } else {
- Record.push_back(Init->getNumArrayIndices());
- for (unsigned i=0, e=Init->getNumArrayIndices(); i != e; ++i)
- Writer.AddDeclRef(Init->getArrayIndex(i), Record);
- }
- }
+ Writer.AddCXXBaseOrMemberInitializers(D->BaseOrMemberInitializers,
+ D->NumBaseOrMemberInitializers, Record);
Code = pch::DECL_CXX_CONSTRUCTOR;
}
More information about the cfe-commits
mailing list