forked from OSchip/llvm-project
[NFC] Update the template-parameter parsers and analyzers to return NamedDecl (vs Decl)
This patch addresses a FIXME and has the template-parameter processing functions return a more derived common type NamedDecl (as opposed to a type needlessly higher up in the inheritance hierarchy : Decl). llvm-svn: 321409
This commit is contained in:
parent
06dad14797
commit
be29403633
|
@ -2748,10 +2748,10 @@ private:
|
|||
bool ParseTemplateParameterList(unsigned Depth,
|
||||
SmallVectorImpl<NamedDecl*> &TemplateParams);
|
||||
bool isStartOfTemplateTypeParameter();
|
||||
Decl *ParseTemplateParameter(unsigned Depth, unsigned Position);
|
||||
Decl *ParseTypeParameter(unsigned Depth, unsigned Position);
|
||||
Decl *ParseTemplateTemplateParameter(unsigned Depth, unsigned Position);
|
||||
Decl *ParseNonTypeTemplateParameter(unsigned Depth, unsigned Position);
|
||||
NamedDecl *ParseTemplateParameter(unsigned Depth, unsigned Position);
|
||||
NamedDecl *ParseTypeParameter(unsigned Depth, unsigned Position);
|
||||
NamedDecl *ParseTemplateTemplateParameter(unsigned Depth, unsigned Position);
|
||||
NamedDecl *ParseNonTypeTemplateParameter(unsigned Depth, unsigned Position);
|
||||
void DiagnoseMisplacedEllipsis(SourceLocation EllipsisLoc,
|
||||
SourceLocation CorrectLoc,
|
||||
bool AlreadyHasEllipsis,
|
||||
|
|
|
@ -6064,7 +6064,7 @@ public:
|
|||
void DiagnoseTemplateParameterShadow(SourceLocation Loc, Decl *PrevDecl);
|
||||
TemplateDecl *AdjustDeclIfTemplate(Decl *&Decl);
|
||||
|
||||
Decl *ActOnTypeParameter(Scope *S, bool Typename,
|
||||
NamedDecl *ActOnTypeParameter(Scope *S, bool Typename,
|
||||
SourceLocation EllipsisLoc,
|
||||
SourceLocation KeyLoc,
|
||||
IdentifierInfo *ParamName,
|
||||
|
@ -6077,12 +6077,12 @@ public:
|
|||
SourceLocation Loc);
|
||||
QualType CheckNonTypeTemplateParameterType(QualType T, SourceLocation Loc);
|
||||
|
||||
Decl *ActOnNonTypeTemplateParameter(Scope *S, Declarator &D,
|
||||
NamedDecl *ActOnNonTypeTemplateParameter(Scope *S, Declarator &D,
|
||||
unsigned Depth,
|
||||
unsigned Position,
|
||||
SourceLocation EqualLoc,
|
||||
Expr *DefaultArg);
|
||||
Decl *ActOnTemplateTemplateParameter(Scope *S,
|
||||
NamedDecl *ActOnTemplateTemplateParameter(Scope *S,
|
||||
SourceLocation TmpLoc,
|
||||
TemplateParameterList *Params,
|
||||
SourceLocation EllipsisLoc,
|
||||
|
|
|
@ -372,8 +372,8 @@ bool
|
|||
Parser::ParseTemplateParameterList(unsigned Depth,
|
||||
SmallVectorImpl<NamedDecl*> &TemplateParams) {
|
||||
while (1) {
|
||||
// FIXME: ParseTemplateParameter should probably just return a NamedDecl.
|
||||
if (Decl *TmpParam
|
||||
|
||||
if (NamedDecl *TmpParam
|
||||
= ParseTemplateParameter(Depth, TemplateParams.size())) {
|
||||
TemplateParams.push_back(dyn_cast<NamedDecl>(TmpParam));
|
||||
} else {
|
||||
|
@ -480,7 +480,7 @@ bool Parser::isStartOfTemplateTypeParameter() {
|
|||
/// 'class' ...[opt] identifier[opt]
|
||||
/// 'template' '<' template-parameter-list '>' 'class' identifier[opt]
|
||||
/// = id-expression
|
||||
Decl *Parser::ParseTemplateParameter(unsigned Depth, unsigned Position) {
|
||||
NamedDecl *Parser::ParseTemplateParameter(unsigned Depth, unsigned Position) {
|
||||
if (isStartOfTemplateTypeParameter())
|
||||
return ParseTypeParameter(Depth, Position);
|
||||
|
||||
|
@ -502,7 +502,7 @@ Decl *Parser::ParseTemplateParameter(unsigned Depth, unsigned Position) {
|
|||
/// 'class' identifier[opt] '=' type-id
|
||||
/// 'typename' ...[opt][C++0x] identifier[opt]
|
||||
/// 'typename' identifier[opt] '=' type-id
|
||||
Decl *Parser::ParseTypeParameter(unsigned Depth, unsigned Position) {
|
||||
NamedDecl *Parser::ParseTypeParameter(unsigned Depth, unsigned Position) {
|
||||
assert(Tok.isOneOf(tok::kw_class, tok::kw_typename) &&
|
||||
"A type-parameter starts with 'class' or 'typename'");
|
||||
|
||||
|
@ -564,7 +564,7 @@ Decl *Parser::ParseTypeParameter(unsigned Depth, unsigned Position) {
|
|||
/// type-parameter-key:
|
||||
/// 'class'
|
||||
/// 'typename' [C++1z]
|
||||
Decl *
|
||||
NamedDecl *
|
||||
Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {
|
||||
assert(Tok.is(tok::kw_template) && "Expected 'template' keyword");
|
||||
|
||||
|
@ -669,7 +669,7 @@ Parser::ParseTemplateTemplateParameter(unsigned Depth, unsigned Position) {
|
|||
/// template-parameter:
|
||||
/// ...
|
||||
/// parameter-declaration
|
||||
Decl *
|
||||
NamedDecl *
|
||||
Parser::ParseNonTypeTemplateParameter(unsigned Depth, unsigned Position) {
|
||||
// Parse the declaration-specifiers (i.e., the type).
|
||||
// FIXME: The type should probably be restricted in some way... Not all
|
||||
|
|
|
@ -792,7 +792,7 @@ static void maybeDiagnoseTemplateParameterShadow(Sema &SemaRef, Scope *S,
|
|||
/// ParamNameLoc is the location of the parameter name (if any).
|
||||
/// If the type parameter has a default argument, it will be added
|
||||
/// later via ActOnTypeParameterDefault.
|
||||
Decl *Sema::ActOnTypeParameter(Scope *S, bool Typename,
|
||||
NamedDecl *Sema::ActOnTypeParameter(Scope *S, bool Typename,
|
||||
SourceLocation EllipsisLoc,
|
||||
SourceLocation KeyLoc,
|
||||
IdentifierInfo *ParamName,
|
||||
|
@ -922,7 +922,7 @@ QualType Sema::CheckNonTypeTemplateParameterType(QualType T,
|
|||
return QualType();
|
||||
}
|
||||
|
||||
Decl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D,
|
||||
NamedDecl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D,
|
||||
unsigned Depth,
|
||||
unsigned Position,
|
||||
SourceLocation EqualLoc,
|
||||
|
@ -1053,7 +1053,7 @@ Decl *Sema::ActOnNonTypeTemplateParameter(Scope *S, Declarator &D,
|
|||
/// ActOnTemplateTemplateParameter - Called when a C++ template template
|
||||
/// parameter (e.g. T in template <template \<typename> class T> class array)
|
||||
/// has been parsed. S is the current scope.
|
||||
Decl *Sema::ActOnTemplateTemplateParameter(Scope* S,
|
||||
NamedDecl *Sema::ActOnTemplateTemplateParameter(Scope* S,
|
||||
SourceLocation TmpLoc,
|
||||
TemplateParameterList *Params,
|
||||
SourceLocation EllipsisLoc,
|
||||
|
|
Loading…
Reference in New Issue