aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFariborz Jahanian <fjahanian@apple.com>2007-10-01 17:19:59 +0000
committerFariborz Jahanian <fjahanian@apple.com>2007-10-01 17:19:59 +0000
commit991e48b283e6c683f91fdaa467776bdc4b50f099 (patch)
tree9f5b50278c15ab8a7687e4262eaccd904455da09
parent89204a16866a2baab2d362356e38bec6e89df716 (diff)
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
-rw-r--r--include/clang/AST/Decl.h37
1 files 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; }