parent
42225e50f3
commit
775d092550
|
@ -759,36 +759,6 @@ public:
|
||||||
static CXXConversionDecl* CreateImpl(llvm::Deserializer& D, ASTContext& C);
|
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:
|
/// LinkageSpecDecl - This represents a linkage specification. For example:
|
||||||
/// extern "C" void foo();
|
/// extern "C" void foo();
|
||||||
///
|
///
|
||||||
|
|
|
@ -585,10 +585,7 @@ Sema::ActOnCXXMemberDeclarator(Scope *S, AccessSpecifier AS, Declarator &D,
|
||||||
|
|
||||||
assert((Name || isInstField) && "No identifier for non-field ?");
|
assert((Name || isInstField) && "No identifier for non-field ?");
|
||||||
|
|
||||||
// set/getAccess is not part of Decl's interface to avoid bloating it with C++
|
Member->setAccess(AS);
|
||||||
// specific methods. Use a wrapper class that can be used with all C++ class
|
|
||||||
// member decls.
|
|
||||||
CXXClassMemberWrapper(Member).setAccess(AS);
|
|
||||||
|
|
||||||
// C++ [dcl.init.aggr]p1:
|
// C++ [dcl.init.aggr]p1:
|
||||||
// An aggregate is an array or a class (clause 9) with [...] no
|
// An aggregate is an array or a class (clause 9) with [...] no
|
||||||
|
|
Loading…
Reference in New Issue