From 991e48b283e6c683f91fdaa467776bdc4b50f099 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Mon, 1 Oct 2007 17:19:59 +0000 Subject: [PATCH] Moved two bitfields back to top of class ObjcMethodDecl so they pack with those in their base class. In response to clattner's September 30, 2007 12:54:49 AM PDT email. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@42491 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/AST/Decl.h | 37 ++++++++++++++++++------------------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/include/clang/AST/Decl.h b/include/clang/AST/Decl.h index a2538da776..5a8cd1acc4 100644 --- a/include/clang/AST/Decl.h +++ b/include/clang/AST/Decl.h @@ -57,31 +57,18 @@ public: IDNS_Ordinary }; - enum ImplementationControl { None, Required, Optional }; - private: /// DeclKind - This indicates which class this is. Kind DeclKind : 8; /// InvalidDecl - This indicates a semantic error occurred. unsigned int InvalidDecl : 1; - - /// instance (true) or class (false) method. - bool IsInstance : 1; - /// @required/@optional - ImplementationControl DeclImplementation : 2; protected: - Decl(Kind DK) : DeclKind(DK), InvalidDecl(0), - IsInstance(false), DeclImplementation(None) { + Decl(Kind DK) : DeclKind(DK), InvalidDecl(0) { if (Decl::CollectingStats()) addDeclKind(DK); } - Decl(Kind DK, bool isInstance, ImplementationControl implControl) - : DeclKind(DK), InvalidDecl(0), - IsInstance(isInstance), DeclImplementation(implControl) { - if (Decl::CollectingStats()) addDeclKind(DK); - } virtual ~Decl(); public: @@ -93,10 +80,7 @@ public: /// allows for graceful error recovery. void setInvalidDecl() { InvalidDecl = 1; } int isInvalidDecl() const { return InvalidDecl; } - bool isInstance() const { return IsInstance; } - ImplementationControl getImplementationControl() const - { return DeclImplementation; } - + IdentifierNamespace getIdentifierNamespace() const { switch (DeclKind) { default: assert(0 && "Unknown decl kind!"); @@ -696,7 +680,16 @@ public: /// ObjcMethodDecl - An instance of this class is created to represent an instance /// or class method declaration. class ObjcMethodDecl : public Decl { +public: + enum ImplementationControl { None, Required, Optional }; private: + /// Bitfields must be first fields in this class so they pack with those + /// declared in class Decl. + /// instance (true) or class (false) method. + bool IsInstance : 1; + /// @required/@optional + ImplementationControl DeclImplementation : 2; + // A unigue name for this method. Selector SelName; @@ -719,7 +712,8 @@ public: AttributeList *M = 0, bool isInstance = true, ImplementationControl impControl = None, Decl *PrevDecl = 0) - : Decl(ObjcMethod, isInstance, impControl), + : Decl(ObjcMethod), + IsInstance(isInstance), DeclImplementation(impControl), SelName(SelInfo), MethodDeclType(T), ParamInfo(paramInfo), NumMethodParams(numParams), MethodAttrs(M), Loc(L) {} @@ -733,6 +727,11 @@ public: MethodAttrs(M), IsInstance(isInstance) {} #endif virtual ~ObjcMethodDecl(); + bool isInstance() const { return IsInstance; } + ImplementationControl getImplementationControl() const { + return DeclImplementation; + } + Selector getSelector() const { return SelName; } QualType getMethodType() const { return MethodDeclType; } unsigned getNumMethodParams() const { return NumMethodParams; } -- 2.40.0