diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-05-03 10:38:35 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-05-03 10:38:35 +0000 |
commit | b2dbbb99e12806eaaf53b7ccabc32f42b5719443 (patch) | |
tree | 8a9bace0e7166787de15f9ec84781d9f8ebc8f3b /lib/AST/ASTContext.cpp | |
parent | 24cbfb96f09318f59dc73eaaf4909a79788ec5ac (diff) |
Split out getASTObjCImplementationLayout
- The difference from getASTObjCInterfaceLayout is that the computes
the layout including synthesized ivars.
- No functionality change, they currently both compute the same thing
-- whether that includes synthesized ivars or not depends on when
they get called!!!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@70690 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/AST/ASTContext.cpp')
-rw-r--r-- | lib/AST/ASTContext.cpp | 27 |
1 files changed, 20 insertions, 7 deletions
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 0494de199f..3342ca5bc9 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -63,8 +63,8 @@ ASTContext::~ASTContext() { } { - llvm::DenseMap<const ObjCInterfaceDecl*, const ASTRecordLayout*>::iterator - I = ASTObjCInterfaces.begin(), E = ASTObjCInterfaces.end(); + llvm::DenseMap<const ObjCContainerDecl*, const ASTRecordLayout*>::iterator + I = ObjCLayouts.begin(), E = ObjCLayouts.end(); while (I != E) { ASTRecordLayout *R = const_cast<ASTRecordLayout*>((I++)->second); delete R; @@ -736,13 +736,16 @@ const RecordDecl *ASTContext::addRecordToClass(const ObjCInterfaceDecl *D) { return RD; } -/// getASTObjcInterfaceLayout - Get or compute information about the layout of -/// the specified Objective C, which indicates its size and ivar -/// position information. +/// getInterfaceLayoutImpl - Get or compute information about the +/// layout of the given interface. +/// +/// \param Impl - If given, also include the layout of the interface's +/// implementation. This may differ by including synthesized ivars. const ASTRecordLayout & -ASTContext::getASTObjCInterfaceLayout(const ObjCInterfaceDecl *D) { +ASTContext::getObjCLayout(const ObjCInterfaceDecl *D, + const ObjCImplementationDecl *Impl) { // Look up this layout, if already laid out, return what we have. - const ASTRecordLayout *&Entry = ASTObjCInterfaces[D]; + const ASTRecordLayout *&Entry = ObjCLayouts[D]; if (Entry) return *Entry; // Allocate and assign into ASTRecordLayouts here. The "Entry" reference can @@ -795,6 +798,16 @@ ASTContext::getASTObjCInterfaceLayout(const ObjCInterfaceDecl *D) { return *NewEntry; } +const ASTRecordLayout & +ASTContext::getASTObjCInterfaceLayout(const ObjCInterfaceDecl *D) { + return getObjCLayout(D, 0); +} + +const ASTRecordLayout & +ASTContext::getASTObjCImplementationLayout(const ObjCImplementationDecl *D) { + return getObjCLayout(D->getClassInterface(), D); +} + /// getASTRecordLayout - Get or compute information about the layout of the /// specified record (struct/union/class), which indicates its size and field /// position information. |