aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/3rdparty/cplusplus/ASTClone.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/libs/3rdparty/cplusplus/ASTClone.cpp')
-rw-r--r--src/libs/3rdparty/cplusplus/ASTClone.cpp133
1 files changed, 133 insertions, 0 deletions
diff --git a/src/libs/3rdparty/cplusplus/ASTClone.cpp b/src/libs/3rdparty/cplusplus/ASTClone.cpp
index 65350e3eab..c9c2fc8294 100644
--- a/src/libs/3rdparty/cplusplus/ASTClone.cpp
+++ b/src/libs/3rdparty/cplusplus/ASTClone.cpp
@@ -81,6 +81,31 @@ GnuAttributeSpecifierAST *GnuAttributeSpecifierAST::clone(MemoryPool *pool) cons
return ast;
}
+MsvcDeclspecSpecifierAST *MsvcDeclspecSpecifierAST::clone(MemoryPool *pool) const
+{
+ MsvcDeclspecSpecifierAST *ast = new (pool) MsvcDeclspecSpecifierAST;
+ ast->attribute_token = attribute_token;
+ ast->lparen_token = lparen_token;
+ for (GnuAttributeListAST *iter = attribute_list, **ast_iter = &ast->attribute_list;
+ iter; iter = iter->next, ast_iter = &(*ast_iter)->next)
+ *ast_iter = new (pool) GnuAttributeListAST((iter->value) ? iter->value->clone(pool) : nullptr);
+ ast->rparen_token = rparen_token;
+ return ast;
+}
+
+StdAttributeSpecifierAST *StdAttributeSpecifierAST::clone(MemoryPool *pool) const
+{
+ StdAttributeSpecifierAST *ast = new (pool) StdAttributeSpecifierAST;
+ ast->first_lbracket_token = first_lbracket_token;
+ ast->second_lbracket_token = second_lbracket_token;
+ for (GnuAttributeListAST *iter = attribute_list, **ast_iter = &ast->attribute_list;
+ iter; iter = iter->next, ast_iter = &(*ast_iter)->next)
+ *ast_iter = new (pool) GnuAttributeListAST((iter->value) ? iter->value->clone(pool) : nullptr);
+ ast->first_rbracket_token = first_rbracket_token;
+ ast->second_rbracket_token = second_rbracket_token;
+ return ast;
+}
+
GnuAttributeAST *GnuAttributeAST::clone(MemoryPool *pool) const
{
GnuAttributeAST *ast = new (pool) GnuAttributeAST;
@@ -116,6 +141,34 @@ DecltypeSpecifierAST *DecltypeSpecifierAST::clone(MemoryPool *pool) const
return ast;
}
+TypeConstraintAST *TypeConstraintAST::clone(MemoryPool *pool) const
+{
+ const auto ast = new (pool) TypeConstraintAST;
+ for (NestedNameSpecifierListAST *iter = nestedName, **ast_iter = &ast->nestedName; iter;
+ iter = iter->next, ast_iter = &(*ast_iter)->next)
+ *ast_iter = new (pool) NestedNameSpecifierListAST((iter->value) ? iter->value->clone(pool) : nullptr);
+ if (conceptName)
+ ast->conceptName = conceptName->clone(pool);
+ ast->lessToken = lessToken;
+ for (ExpressionListAST *iter = templateArgs, **ast_iter = &ast->templateArgs;
+ iter; iter = iter->next, ast_iter = &(*ast_iter)->next)
+ *ast_iter = new (pool) ExpressionListAST((iter->value) ? iter->value->clone(pool) : nullptr);
+ ast->greaterToken = greaterToken;
+ return ast;
+}
+
+PlaceholderTypeSpecifierAST *PlaceholderTypeSpecifierAST::clone(MemoryPool *pool) const
+{
+ const auto ast = new (pool) PlaceholderTypeSpecifierAST;
+ if (typeConstraint)
+ ast->typeConstraint = typeConstraint->clone(pool);
+ ast->lparenToken = lparenToken;
+ ast->declTypetoken = declTypetoken;
+ ast->autoToken = autoToken;
+ ast->rparenToken = rparenToken;
+ return ast;
+}
+
DeclaratorAST *DeclaratorAST::clone(MemoryPool *pool) const
{
DeclaratorAST *ast = new (pool) DeclaratorAST;
@@ -730,7 +783,10 @@ IfStatementAST *IfStatementAST::clone(MemoryPool *pool) const
{
IfStatementAST *ast = new (pool) IfStatementAST;
ast->if_token = if_token;
+ ast->constexpr_token = constexpr_token;
ast->lparen_token = lparen_token;
+ if (initStmt)
+ ast->initStmt = initStmt->clone(pool);
if (condition)
ast->condition = condition->clone(pool);
ast->rparen_token = rparen_token;
@@ -1253,11 +1309,50 @@ TemplateDeclarationAST *TemplateDeclarationAST::clone(MemoryPool *pool) const
iter; iter = iter->next, ast_iter = &(*ast_iter)->next)
*ast_iter = new (pool) DeclarationListAST((iter->value) ? iter->value->clone(pool) : nullptr);
ast->greater_token = greater_token;
+ if (requiresClause)
+ ast->requiresClause = requiresClause->clone(pool);
if (declaration)
ast->declaration = declaration->clone(pool);
return ast;
}
+ConceptDeclarationAST *ConceptDeclarationAST::clone(MemoryPool *pool) const
+{
+ const auto ast = new (pool) ConceptDeclarationAST;
+ ast->concept_token = concept_token;
+ ast->name = name->clone(pool);
+ ast->equals_token = equals_token;
+ ast->semicolon_token = semicolon_token;
+ for (SpecifierListAST *iter = attributes, **ast_iter = &ast->attributes;
+ iter; iter = iter->next, ast_iter = &(*ast_iter)->next) {
+ *ast_iter = new (pool) SpecifierListAST((iter->value) ? iter->value->clone(pool) : nullptr);
+ }
+ ast->constraint = constraint->clone(pool);
+ return ast;
+}
+
+RequiresExpressionAST *RequiresExpressionAST::clone(MemoryPool *pool) const
+{
+ const auto ast = new (pool) RequiresExpressionAST;
+ ast->requires_token = requires_token;
+ ast->lparen_token = lparen_token;
+ if (parameters)
+ ast->parameters = parameters->clone(pool);
+ ast->rparen_token = rparen_token;
+ ast->lbrace_token = lbrace_token;
+ ast->rbrace_token = rbrace_token;
+ return ast;
+}
+
+RequiresClauseAST *RequiresClauseAST::clone(MemoryPool *pool) const
+{
+ const auto ast = new (pool) RequiresClauseAST;
+ ast->requires_token = requires_token;
+ if (constraint)
+ ast->constraint = constraint->clone(pool);
+ return ast;
+}
+
ThrowExpressionAST *ThrowExpressionAST::clone(MemoryPool *pool) const
{
ThrowExpressionAST *ast = new (pool) ThrowExpressionAST;
@@ -1267,6 +1362,24 @@ ThrowExpressionAST *ThrowExpressionAST::clone(MemoryPool *pool) const
return ast;
}
+YieldExpressionAST *YieldExpressionAST::clone(MemoryPool *pool) const
+{
+ const auto ast = new (pool) YieldExpressionAST;
+ ast->yield_token = yield_token;
+ if (expression)
+ ast->expression = expression->clone(pool);
+ return ast;
+}
+
+AwaitExpressionAST *AwaitExpressionAST::clone(MemoryPool *pool) const
+{
+ const auto ast = new (pool) AwaitExpressionAST;
+ ast->await_token = await_token;
+ if (castExpression)
+ ast->castExpression = castExpression->clone(pool);
+ return ast;
+}
+
NoExceptOperatorExpressionAST *NoExceptOperatorExpressionAST::clone(MemoryPool *pool) const
{
NoExceptOperatorExpressionAST *ast = new (pool) NoExceptOperatorExpressionAST;
@@ -1338,6 +1451,8 @@ TemplateTypeParameterAST *TemplateTypeParameterAST::clone(MemoryPool *pool) cons
{
TemplateTypeParameterAST *ast = new (pool) TemplateTypeParameterAST;
ast->template_token = template_token;
+ if (typeConstraint)
+ ast->typeConstraint = typeConstraint->clone(pool);
ast->less_token = less_token;
for (DeclarationListAST *iter = template_parameter_list, **ast_iter = &ast->template_parameter_list;
iter; iter = iter->next, ast_iter = &(*ast_iter)->next)
@@ -1703,6 +1818,14 @@ LambdaExpressionAST *LambdaExpressionAST::clone(MemoryPool *pool) const
LambdaExpressionAST *ast = new (pool) LambdaExpressionAST;
if (lambda_introducer)
ast->lambda_introducer = lambda_introducer->clone(pool);
+ for (DeclarationListAST *iter = templateParameters, **ast_iter = &ast->templateParameters;
+ iter; iter = iter->next, ast_iter = &(*ast_iter)->next)
+ *ast_iter = new (pool) DeclarationListAST((iter->value) ? iter->value->clone(pool) : nullptr);
+ if (requiresClause)
+ ast->requiresClause = requiresClause->clone(pool);
+ for (SpecifierListAST *iter = attributes, **ast_iter = &ast->attributes;
+ iter; iter = iter->next, ast_iter = &(*ast_iter)->next)
+ *ast_iter = new (pool) SpecifierListAST((iter->value) ? iter->value->clone(pool) : nullptr);
if (lambda_declarator)
ast->lambda_declarator = lambda_declarator->clone(pool);
if (statement)
@@ -1754,6 +1877,8 @@ LambdaDeclaratorAST *LambdaDeclaratorAST::clone(MemoryPool *pool) const
ast->exception_specification = exception_specification->clone(pool);
if (trailing_return_type)
ast->trailing_return_type = trailing_return_type->clone(pool);
+ if (requiresClause)
+ ast->requiresClause = requiresClause->clone(pool);
return ast;
}
@@ -1814,3 +1939,11 @@ DesignatedInitializerAST *DesignatedInitializerAST::clone(MemoryPool *pool) cons
return ast;
}
+DecompositionDeclaratorAST *DecompositionDeclaratorAST::clone(MemoryPool *pool) const
+{
+ const auto theClone = new (pool) DecompositionDeclaratorAST;
+ for (NameListAST *iter = identifiers, **ast_iter = &theClone->identifiers;
+ iter; iter = iter->next, ast_iter = &(*ast_iter)->next)
+ *ast_iter = new (pool) NameListAST((iter->value) ? iter->value->clone(pool) : nullptr);
+ return theClone;
+}