diff options
Diffstat (limited to 'src/libs/3rdparty/cplusplus/ASTClone.cpp')
-rw-r--r-- | src/libs/3rdparty/cplusplus/ASTClone.cpp | 133 |
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; +} |