forked from OSchip/llvm-project
Simplify some implementations of get*Decl.
* NamedDecl and CXXMethodDecl were missing getMostRecentDecl. * The const version can just forward to the non const. * getMostRecentDecl can use cast instead of cast_or_null. This then removes some casts from the callers. llvm-svn: 193039
This commit is contained in:
parent
6ddca57327
commit
7b56f6c3c2
|
@ -273,6 +273,13 @@ public:
|
|||
return const_cast<NamedDecl*>(this)->getUnderlyingDecl();
|
||||
}
|
||||
|
||||
NamedDecl *getMostRecentDecl() {
|
||||
return cast<NamedDecl>(Decl::getMostRecentDecl());
|
||||
}
|
||||
const NamedDecl *getMostRecentDecl() const {
|
||||
return const_cast<NamedDecl*>(this)->getMostRecentDecl();
|
||||
}
|
||||
|
||||
static bool classof(const Decl *D) { return classofKind(D->getKind()); }
|
||||
static bool classofKind(Kind K) { return K >= firstNamed && K <= lastNamed; }
|
||||
};
|
||||
|
@ -2810,22 +2817,22 @@ public:
|
|||
return cast<EnumDecl>(TagDecl::getCanonicalDecl());
|
||||
}
|
||||
const EnumDecl *getCanonicalDecl() const {
|
||||
return cast<EnumDecl>(TagDecl::getCanonicalDecl());
|
||||
return const_cast<EnumDecl*>(this)->getCanonicalDecl();
|
||||
}
|
||||
|
||||
const EnumDecl *getPreviousDecl() const {
|
||||
return cast_or_null<EnumDecl>(TagDecl::getPreviousDecl());
|
||||
}
|
||||
EnumDecl *getPreviousDecl() {
|
||||
return cast_or_null<EnumDecl>(TagDecl::getPreviousDecl());
|
||||
}
|
||||
|
||||
const EnumDecl *getMostRecentDecl() const {
|
||||
return cast<EnumDecl>(TagDecl::getMostRecentDecl());
|
||||
const EnumDecl *getPreviousDecl() const {
|
||||
return const_cast<EnumDecl*>(this)->getPreviousDecl();
|
||||
}
|
||||
|
||||
EnumDecl *getMostRecentDecl() {
|
||||
return cast<EnumDecl>(TagDecl::getMostRecentDecl());
|
||||
}
|
||||
const EnumDecl *getMostRecentDecl() const {
|
||||
return const_cast<EnumDecl*>(this)->getMostRecentDecl();
|
||||
}
|
||||
|
||||
EnumDecl *getDefinition() const {
|
||||
return cast_or_null<EnumDecl>(TagDecl::getDefinition());
|
||||
|
@ -3020,19 +3027,19 @@ public:
|
|||
IdentifierInfo *Id, RecordDecl* PrevDecl = 0);
|
||||
static RecordDecl *CreateDeserialized(const ASTContext &C, unsigned ID);
|
||||
|
||||
const RecordDecl *getPreviousDecl() const {
|
||||
return cast_or_null<RecordDecl>(TagDecl::getPreviousDecl());
|
||||
}
|
||||
RecordDecl *getPreviousDecl() {
|
||||
return cast_or_null<RecordDecl>(TagDecl::getPreviousDecl());
|
||||
}
|
||||
|
||||
const RecordDecl *getMostRecentDecl() const {
|
||||
return cast<RecordDecl>(TagDecl::getMostRecentDecl());
|
||||
const RecordDecl *getPreviousDecl() const {
|
||||
return const_cast<RecordDecl*>(this)->getPreviousDecl();
|
||||
}
|
||||
|
||||
RecordDecl *getMostRecentDecl() {
|
||||
return cast<RecordDecl>(TagDecl::getMostRecentDecl());
|
||||
}
|
||||
const RecordDecl *getMostRecentDecl() const {
|
||||
return const_cast<RecordDecl*>(this)->getMostRecentDecl();
|
||||
}
|
||||
|
||||
bool hasFlexibleArrayMember() const { return HasFlexibleArrayMember; }
|
||||
void setHasFlexibleArrayMember(bool V) { HasFlexibleArrayMember = V; }
|
||||
|
|
|
@ -641,18 +641,19 @@ public:
|
|||
return cast<CXXRecordDecl>(RecordDecl::getCanonicalDecl());
|
||||
}
|
||||
|
||||
const CXXRecordDecl *getPreviousDecl() const {
|
||||
return cast_or_null<CXXRecordDecl>(RecordDecl::getPreviousDecl());
|
||||
}
|
||||
CXXRecordDecl *getPreviousDecl() {
|
||||
return cast_or_null<CXXRecordDecl>(RecordDecl::getPreviousDecl());
|
||||
}
|
||||
const CXXRecordDecl *getPreviousDecl() const {
|
||||
return const_cast<CXXRecordDecl*>(this)->getPreviousDecl();
|
||||
}
|
||||
|
||||
CXXRecordDecl *getMostRecentDecl() {
|
||||
return cast<CXXRecordDecl>(RecordDecl::getMostRecentDecl());
|
||||
}
|
||||
|
||||
const CXXRecordDecl *getMostRecentDecl() const {
|
||||
return cast_or_null<CXXRecordDecl>(RecordDecl::getMostRecentDecl());
|
||||
}
|
||||
CXXRecordDecl *getMostRecentDecl() {
|
||||
return cast_or_null<CXXRecordDecl>(RecordDecl::getMostRecentDecl());
|
||||
return const_cast<CXXRecordDecl*>(this)->getMostRecentDecl();
|
||||
}
|
||||
|
||||
CXXRecordDecl *getDefinition() const {
|
||||
|
@ -1716,12 +1717,19 @@ public:
|
|||
/// \brief Determine whether this is a move assignment operator.
|
||||
bool isMoveAssignmentOperator() const;
|
||||
|
||||
const CXXMethodDecl *getCanonicalDecl() const {
|
||||
return cast<CXXMethodDecl>(FunctionDecl::getCanonicalDecl());
|
||||
}
|
||||
CXXMethodDecl *getCanonicalDecl() {
|
||||
return cast<CXXMethodDecl>(FunctionDecl::getCanonicalDecl());
|
||||
}
|
||||
const CXXMethodDecl *getCanonicalDecl() const {
|
||||
return const_cast<CXXMethodDecl*>(this)->getCanonicalDecl();
|
||||
}
|
||||
|
||||
CXXMethodDecl *getMostRecentDecl() {
|
||||
return cast<CXXMethodDecl>(FunctionDecl::getMostRecentDecl());
|
||||
}
|
||||
const CXXMethodDecl *getMostRecentDecl() const {
|
||||
return const_cast<CXXMethodDecl*>(this)->getMostRecentDecl();
|
||||
}
|
||||
|
||||
/// True if this method is user-declared and was not
|
||||
/// deleted or defaulted on its first declaration.
|
||||
|
|
|
@ -1449,8 +1449,7 @@ public:
|
|||
bool Qualified) const;
|
||||
|
||||
ClassTemplateSpecializationDecl *getMostRecentDecl() {
|
||||
CXXRecordDecl *Recent
|
||||
= cast<CXXRecordDecl>(CXXRecordDecl::getMostRecentDecl());
|
||||
CXXRecordDecl *Recent = CXXRecordDecl::getMostRecentDecl();
|
||||
while (!isa<ClassTemplateSpecializationDecl>(Recent)) {
|
||||
// FIXME: Does injected class name need to be in the redeclarations chain?
|
||||
assert(Recent->isInjectedClassName() && Recent->getPreviousDecl());
|
||||
|
@ -2310,7 +2309,7 @@ public:
|
|||
bool Qualified) const;
|
||||
|
||||
VarTemplateSpecializationDecl *getMostRecentDecl() {
|
||||
VarDecl *Recent = cast<VarDecl>(VarDecl::getMostRecentDecl());
|
||||
VarDecl *Recent = VarDecl::getMostRecentDecl();
|
||||
return cast<VarTemplateSpecializationDecl>(Recent);
|
||||
}
|
||||
|
||||
|
|
|
@ -972,7 +972,7 @@ NamedDecl::getExplicitVisibility(ExplicitVisibilityKind kind) const {
|
|||
kind);
|
||||
|
||||
// Use the most recent declaration.
|
||||
const NamedDecl *MostRecent = cast<NamedDecl>(this->getMostRecentDecl());
|
||||
const NamedDecl *MostRecent = getMostRecentDecl();
|
||||
if (MostRecent != this)
|
||||
return MostRecent->getExplicitVisibility(kind);
|
||||
|
||||
|
|
|
@ -323,8 +323,7 @@ private:
|
|||
} else if (const CXXMemberCallExpr *CMCE = dyn_cast<CXXMemberCallExpr>(Exp)) {
|
||||
// When calling a function with a lock_returned attribute, replace
|
||||
// the function call with the expression in lock_returned.
|
||||
const CXXMethodDecl* MD =
|
||||
cast<CXXMethodDecl>(CMCE->getMethodDecl()->getMostRecentDecl());
|
||||
const CXXMethodDecl *MD = CMCE->getMethodDecl()->getMostRecentDecl();
|
||||
if (LockReturnedAttr* At = MD->getAttr<LockReturnedAttr>()) {
|
||||
CallingContext LRCallCtx(CMCE->getMethodDecl());
|
||||
LRCallCtx.SelfArg = CMCE->getImplicitObjectArgument();
|
||||
|
@ -353,8 +352,7 @@ private:
|
|||
NodeVec[Root].setSize(Sz + 1);
|
||||
return Sz + 1;
|
||||
} else if (const CallExpr *CE = dyn_cast<CallExpr>(Exp)) {
|
||||
const FunctionDecl* FD =
|
||||
cast<FunctionDecl>(CE->getDirectCallee()->getMostRecentDecl());
|
||||
const FunctionDecl *FD = CE->getDirectCallee()->getMostRecentDecl();
|
||||
if (LockReturnedAttr* At = FD->getAttr<LockReturnedAttr>()) {
|
||||
CallingContext LRCallCtx(CE->getDirectCallee());
|
||||
LRCallCtx.NumArgs = CE->getNumArgs();
|
||||
|
|
|
@ -4487,7 +4487,7 @@ NamedDecl *Sema::findLocallyScopedExternCDecl(DeclarationName Name) {
|
|||
}
|
||||
|
||||
NamedDecl *D = LocallyScopedExternCDecls.lookup(Name);
|
||||
return D ? cast<NamedDecl>(D->getMostRecentDecl()) : 0;
|
||||
return D ? D->getMostRecentDecl() : 0;
|
||||
}
|
||||
|
||||
/// \brief Diagnose function specifiers on a declaration of an identifier that
|
||||
|
|
|
@ -7580,7 +7580,7 @@ void ASTReader::FinishedDeserializing() {
|
|||
}
|
||||
|
||||
void ASTReader::pushExternalDeclIntoScope(NamedDecl *D, DeclarationName Name) {
|
||||
D = cast<NamedDecl>(D->getMostRecentDecl());
|
||||
D = D->getMostRecentDecl();
|
||||
|
||||
if (SemaObj->IdResolver.tryAddTopLevelDecl(D, Name) && SemaObj->TUScope) {
|
||||
SemaObj->TUScope->AddDecl(D);
|
||||
|
|
Loading…
Reference in New Issue