aboutsummaryrefslogtreecommitdiff
path: root/lib/Frontend/PCHReaderDecl.cpp
diff options
context:
space:
mode:
authorArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-08-09 10:54:12 +0000
committerArgyrios Kyrtzidis <akyrtzi@gmail.com>2010-08-09 10:54:12 +0000
commit8e706f4b8da141612861e127610141b8d17a9667 (patch)
tree38f95125641224e8c7424a3c01ce366d4c9ca154 /lib/Frontend/PCHReaderDecl.cpp
parent42b879ad1a708b16a6daab3c50c044bb2c0cf767 (diff)
Refactor into functions PCH reading/writing the CXXBaseOrMemberInitializers. No functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@110566 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/PCHReaderDecl.cpp')
-rw-r--r--lib/Frontend/PCHReaderDecl.cpp59
1 files changed, 2 insertions, 57 deletions
diff --git a/lib/Frontend/PCHReaderDecl.cpp b/lib/Frontend/PCHReaderDecl.cpp
index 4b6bde7b19..930448419e 100644
--- a/lib/Frontend/PCHReaderDecl.cpp
+++ b/lib/Frontend/PCHReaderDecl.cpp
@@ -783,63 +783,8 @@ void PCHDeclReader::VisitCXXConstructorDecl(CXXConstructorDecl *D) {
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) {