diff options
author | Anders Carlsson <andersca@mac.com> | 2010-03-11 04:10:39 +0000 |
---|---|---|
committer | Anders Carlsson <andersca@mac.com> | 2010-03-11 04:10:39 +0000 |
commit | 147b5ddc6c8618a9d70a83f90de409e444ae705b (patch) | |
tree | c2b12d63650ee38bbbc0b008675e4fa5d9216d29 /lib/AST/RecordLayout.cpp | |
parent | 584e1dfaf6ab682cebe4fe51f55f0ae3215d303f (diff) |
Replace the class offset vectors in RecordLayoutBuilder with maps instead so we'll have faster lookup and so we can detect duplicates.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@98231 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/RecordLayout.cpp')
-rw-r--r-- | lib/AST/RecordLayout.cpp | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/lib/AST/RecordLayout.cpp b/lib/AST/RecordLayout.cpp index 68357450fb..ade2483722 100644 --- a/lib/AST/RecordLayout.cpp +++ b/lib/AST/RecordLayout.cpp @@ -38,17 +38,15 @@ ASTRecordLayout::ASTRecordLayout(ASTContext &Ctx, uint64_t size, unsigned alignm // Constructor for C++ records. ASTRecordLayout::ASTRecordLayout(ASTContext &Ctx, - uint64_t size, unsigned alignment, - uint64_t datasize, - const uint64_t *fieldoffsets, - unsigned fieldcount, - uint64_t nonvirtualsize, - unsigned nonvirtualalign, - const PrimaryBaseInfo &PrimaryBase, - const std::pair<const CXXRecordDecl *, uint64_t> *bases, - unsigned numbases, - const std::pair<const CXXRecordDecl *, uint64_t> *vbases, - unsigned numvbases) + uint64_t size, unsigned alignment, + uint64_t datasize, + const uint64_t *fieldoffsets, + unsigned fieldcount, + uint64_t nonvirtualsize, + unsigned nonvirtualalign, + const PrimaryBaseInfo &PrimaryBase, + const BaseOffsetsMapTy& BaseOffsets, + const BaseOffsetsMapTy& VBaseOffsets) : Size(size), DataSize(datasize), FieldOffsets(0), Alignment(alignment), FieldCount(fieldcount), CXXInfo(new (Ctx) CXXRecordLayoutInfo) { @@ -60,10 +58,8 @@ ASTRecordLayout::ASTRecordLayout(ASTContext &Ctx, CXXInfo->PrimaryBase = PrimaryBase; CXXInfo->NonVirtualSize = nonvirtualsize; CXXInfo->NonVirtualAlign = nonvirtualalign; - for (unsigned i = 0; i != numbases; ++i) - CXXInfo->BaseOffsets[bases[i].first] = bases[i].second; - for (unsigned i = 0; i != numvbases; ++i) - CXXInfo->VBaseOffsets[vbases[i].first] = vbases[i].second; + CXXInfo->BaseOffsets = BaseOffsets; + CXXInfo->VBaseOffsets = VBaseOffsets; #ifndef NDEBUG if (const CXXRecordDecl *PrimaryBase = getPrimaryBase()) { |