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.

llvm-svn: 42491
This commit is contained in:
Fariborz Jahanian 2007-10-01 17:19:59 +00:00
parent f26702eb54
commit ebb34d7141
1 changed files with 18 additions and 19 deletions

View File

@ -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; }