forked from qt-creator/qt-creator
CPlusPlus: Support requires clause in parser
Change-Id: Ice6a7a287453516a1cfc296e2c9f16160b3ea130 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
18
src/libs/3rdparty/cplusplus/Parser.cpp
vendored
18
src/libs/3rdparty/cplusplus/Parser.cpp
vendored
@@ -1247,6 +1247,8 @@ bool Parser::parseTemplateDeclaration(DeclarationAST *&node)
|
||||
ast->less_token = consumeToken();
|
||||
if (maybeSplitGreaterGreaterToken() || LA() == T_GREATER || parseTemplateParameterList(ast->template_parameter_list))
|
||||
match(T_GREATER, &ast->greater_token);
|
||||
if (!parseRequiresClauseOpt(ast->requiresClause))
|
||||
return false;
|
||||
}
|
||||
|
||||
while (LA()) {
|
||||
@@ -1402,6 +1404,20 @@ bool Parser::parseRequirement()
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Parser::parseRequiresClauseOpt(RequiresClauseAST *&node)
|
||||
{
|
||||
if (!_languageFeatures.cxx20Enabled)
|
||||
return true;
|
||||
if (LA() != T_REQUIRES)
|
||||
return true;
|
||||
const auto ast = new (_pool) RequiresClauseAST;
|
||||
ast->requires_token = consumeToken();
|
||||
if (!parseLogicalOrExpression(ast->constraint))
|
||||
return false;
|
||||
node = ast;
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Parser::parseRequiresExpression(ExpressionAST *&node)
|
||||
{
|
||||
if (!_languageFeatures.cxx20Enabled)
|
||||
@@ -2999,6 +3015,8 @@ bool Parser::parseInitDeclarator(DeclaratorAST *&node, SpecifierListAST *decl_sp
|
||||
} else if (node->core_declarator && node->core_declarator->asDecompositionDeclarator()) {
|
||||
error(cursor(), "structured binding needs initializer");
|
||||
return false;
|
||||
} else if (!parseRequiresClauseOpt(node->requiresClause)) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user