forked from qt-creator/qt-creator
Accepts trailing return types.
This commit is contained in:
@@ -1014,7 +1014,10 @@ unsigned FunctionDeclaratorAST::firstToken() const
|
||||
|
||||
unsigned FunctionDeclaratorAST::lastToken() const
|
||||
{
|
||||
if (exception_specification)
|
||||
if (trailing_return_type)
|
||||
return trailing_return_type->lastToken();
|
||||
|
||||
else if (exception_specification)
|
||||
return exception_specification->lastToken();
|
||||
|
||||
else if (cv_qualifier_list)
|
||||
|
||||
@@ -1421,6 +1421,7 @@ public:
|
||||
unsigned rparen_token;
|
||||
SpecifierListAST *cv_qualifier_list;
|
||||
ExceptionSpecificationAST *exception_specification;
|
||||
TrailingReturnTypeAST *trailing_return_type;
|
||||
ExpressionAST *as_cpp_initializer;
|
||||
|
||||
public: // annotations
|
||||
@@ -1433,6 +1434,7 @@ public:
|
||||
, rparen_token(0)
|
||||
, cv_qualifier_list(0)
|
||||
, exception_specification(0)
|
||||
, trailing_return_type(0)
|
||||
, as_cpp_initializer(0)
|
||||
, symbol(0)
|
||||
{}
|
||||
|
||||
@@ -474,6 +474,8 @@ FunctionDeclaratorAST *FunctionDeclaratorAST::clone(MemoryPool *pool) const
|
||||
*ast_iter = new (pool) SpecifierListAST((iter->value) ? iter->value->clone(pool) : 0);
|
||||
if (exception_specification)
|
||||
ast->exception_specification = exception_specification->clone(pool);
|
||||
if (trailing_return_type)
|
||||
ast->trailing_return_type = trailing_return_type->clone(pool);
|
||||
if (as_cpp_initializer)
|
||||
ast->as_cpp_initializer = as_cpp_initializer->clone(pool);
|
||||
return ast;
|
||||
|
||||
@@ -780,6 +780,11 @@ bool ASTMatcher::match(FunctionDeclaratorAST *node, FunctionDeclaratorAST *patte
|
||||
else if (! AST::match(node->exception_specification, pattern->exception_specification, this))
|
||||
return false;
|
||||
|
||||
if (! pattern->trailing_return_type)
|
||||
pattern->trailing_return_type = node->trailing_return_type;
|
||||
else if (! AST::match(node->trailing_return_type, pattern->trailing_return_type, this))
|
||||
return false;
|
||||
|
||||
if (! pattern->as_cpp_initializer)
|
||||
pattern->as_cpp_initializer = node->as_cpp_initializer;
|
||||
else if (! AST::match(node->as_cpp_initializer, pattern->as_cpp_initializer, this))
|
||||
|
||||
@@ -350,6 +350,7 @@ void FunctionDeclaratorAST::accept0(ASTVisitor *visitor)
|
||||
accept(parameters, visitor);
|
||||
accept(cv_qualifier_list, visitor);
|
||||
accept(exception_specification, visitor);
|
||||
accept(trailing_return_type, visitor);
|
||||
accept(as_cpp_initializer, visitor);
|
||||
}
|
||||
visitor->endVisit(this);
|
||||
|
||||
@@ -1315,8 +1315,14 @@ bool Parser::parseDeclarator(DeclaratorAST *&node, bool stopAtCppInitializer)
|
||||
}
|
||||
|
||||
ast->rparen_token = consumeToken();
|
||||
// ### parse attributes
|
||||
parseCvQualifiers(ast->cv_qualifier_list);
|
||||
// ### parse ref-qualifiers
|
||||
parseExceptionSpecification(ast->exception_specification);
|
||||
|
||||
if (_cxx0xEnabled && ! node->ptr_operator_list && LA() == T_ARROW)
|
||||
parseTrailingReturnType(ast->trailing_return_type);
|
||||
|
||||
*postfix_ptr = new (_pool) PostfixDeclaratorListAST(ast);
|
||||
postfix_ptr = &(*postfix_ptr)->next;
|
||||
} else if (LA() == T_LBRACKET) {
|
||||
|
||||
Reference in New Issue
Block a user