Eliminate CXXClassMemberWrapper

llvm-svn: 66698
This commit is contained in:
Douglas Gregor 2009-03-11 20:25:10 +00:00
parent 42225e50f3
commit 775d092550
2 changed files with 1 additions and 34 deletions

View File

@ -759,36 +759,6 @@ public:
static CXXConversionDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C);
};
/// CXXClassMemberWrapper - A wrapper class for C++ class member decls.
/// Common functions like set/getAccess are included here to avoid bloating
/// the interface of non-C++ specific decl classes, like NamedDecl.
/// FIXME: Doug would like to remove this class.
class CXXClassMemberWrapper {
Decl *MD;
public:
CXXClassMemberWrapper(Decl *D) : MD(D) {
assert(isMember(D) && "Not a C++ class member!");
}
AccessSpecifier getAccess() const {
return AccessSpecifier(MD->Access);
}
void setAccess(AccessSpecifier AS) {
assert(AS != AS_none && "Access must be specified.");
MD->Access = AS;
}
CXXRecordDecl *getParent() const {
return dyn_cast<CXXRecordDecl>(MD->getDeclContext());
}
static bool isMember(Decl *D) {
return isa<CXXRecordDecl>(D->getDeclContext());
}
};
/// LinkageSpecDecl - This represents a linkage specification. For example:
/// extern "C" void foo();
///

View File

@ -585,10 +585,7 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
assert((Name || isInstField) && "No identifier for non-field ?");
// set/getAccess is not part of Decl's interface to avoid bloating it with C++
// specific methods. Use a wrapper class that can be used with all C++ class
// member decls.
CXXClassMemberWrapper(Member).setAccess(AS);
Member->setAccess(AS);
// C++ [dcl.init.aggr]p1:
// An aggregate is an array or a class (clause 9) with [...] no