diff options
Diffstat (limited to 'lib')
-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. |