Add list helpers This CL adds various using statements for the std::vector<std::unique_ptr<CLASS>> constructs found in the AST. Change-Id: Ic9a2357cd73b2aafd99e961a38727f2f9874cde5 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/18920 Reviewed-by: David Neto <dneto@google.com>
diff --git a/src/reader/spirv/parser_impl.cc b/src/reader/spirv/parser_impl.cc index 4b25c61..0dc415e 100644 --- a/src/reader/spirv/parser_impl.cc +++ b/src/reader/spirv/parser_impl.cc
@@ -549,7 +549,7 @@ } // Compute members - std::vector<std::unique_ptr<ast::StructMember>> ast_members; + ast::StructMemberList ast_members; const auto members = struct_ty->element_types(); for (uint32_t member_index = 0; member_index < members.size(); ++member_index) { @@ -558,8 +558,7 @@ // Already emitted diagnostics. return nullptr; } - std::vector<std::unique_ptr<ast::StructMemberDecoration>> - ast_member_decorations; + ast::StructMemberDecorationList ast_member_decorations; for (auto& deco : GetDecorationsForMember(type_id, member_index)) { auto ast_member_decoration = ConvertMemberDecoration(deco); if (ast_member_decoration == nullptr) { @@ -710,7 +709,7 @@ auto ast_var = std::make_unique<ast::Variable>(Name(id), sc, type); - std::vector<std::unique_ptr<ast::VariableDecoration>> ast_decorations; + ast::VariableDecorationList ast_decorations; for (auto& deco : GetDecorationsFor(id)) { if (deco.empty()) { Fail() << "malformed decoration on ID " << id << ": it is empty"; @@ -774,7 +773,7 @@ << f.result_id(); } - std::vector<std::unique_ptr<ast::Variable>> ast_params; + ast::VariableList ast_params; f.ForEachParam([this, &ast_params](const spvtools::opt::Instruction* param) { auto* ast_type = ConvertType(param->type_id()); if (ast_type != nullptr) {
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc index 5916e70..dcc7229 100644 --- a/src/reader/wgsl/parser_impl.cc +++ b/src/reader/wgsl/parser_impl.cc
@@ -15,6 +15,7 @@ #include "src/reader/wgsl/parser_impl.h" #include <memory> +#include <vector> #include "src/ast/array_accessor_expression.h" #include "src/ast/as_expression.h" @@ -396,9 +397,8 @@ // variable_decoration_list // : ATTR_LEFT variable_decoration (COMMA variable_decoration)* ATTR_RIGHT -std::vector<std::unique_ptr<ast::VariableDecoration>> -ParserImpl::variable_decoration_list() { - std::vector<std::unique_ptr<ast::VariableDecoration>> decos; +ast::VariableDecorationList ParserImpl::variable_decoration_list() { + ast::VariableDecorationList decos; auto t = peek(); if (!t.IsAttrLeft()) @@ -1045,7 +1045,7 @@ // struct_body_decl // : BRACKET_LEFT struct_member* BRACKET_RIGHT -std::vector<std::unique_ptr<ast::StructMember>> ParserImpl::struct_body_decl() { +ast::StructMemberList ParserImpl::struct_body_decl() { auto t = peek(); if (!t.IsBracketLeft()) return {}; @@ -1056,7 +1056,7 @@ if (t.IsBracketRight()) return {}; - std::vector<std::unique_ptr<ast::StructMember>> members; + ast::StructMemberList members; for (;;) { auto mem = struct_member(); if (has_error()) @@ -1116,8 +1116,7 @@ // : // | ATTR_LEFT (struct_member_decoration COMMA)* // struct_member_decoration ATTR_RIGHT -std::vector<std::unique_ptr<ast::StructMemberDecoration>> -ParserImpl::struct_member_decoration_decl() { +ast::StructMemberDecorationList ParserImpl::struct_member_decoration_decl() { auto t = peek(); if (!t.IsAttrLeft()) return {}; @@ -1130,7 +1129,7 @@ return {}; } - std::vector<std::unique_ptr<ast::StructMemberDecoration>> decos; + ast::StructMemberDecorationList decos; bool found_offset = false; for (;;) { auto deco = struct_member_decoration(); @@ -1266,11 +1265,11 @@ // param_list // : // | (variable_ident_decl COMMA)* variable_ident_decl -std::vector<std::unique_ptr<ast::Variable>> ParserImpl::param_list() { +ast::VariableList ParserImpl::param_list() { auto t = peek(); auto source = t.source(); - std::vector<std::unique_ptr<ast::Variable>> ret; + ast::VariableList ret; std::string name; ast::type::Type* type; @@ -1380,7 +1379,7 @@ // body_stmt // : BRACKET_LEFT statements BRACKET_RIGHT -std::vector<std::unique_ptr<ast::Statement>> ParserImpl::body_stmt() { +ast::StatementList ParserImpl::body_stmt() { auto t = peek(); if (!t.IsBracketLeft()) return {}; @@ -1429,8 +1428,8 @@ // statements // : statement* -std::vector<std::unique_ptr<ast::Statement>> ParserImpl::statements() { - std::vector<std::unique_ptr<ast::Statement>> ret; +ast::StatementList ParserImpl::statements() { + ast::StatementList ret; for (;;) { auto stmt = statement(); @@ -1782,12 +1781,12 @@ // elseif_stmt // : ELSE_IF paren_rhs_stmt body_stmt elseif_stmt? -std::vector<std::unique_ptr<ast::ElseStatement>> ParserImpl::elseif_stmt() { +ast::ElseStatementList ParserImpl::elseif_stmt() { auto t = peek(); if (!t.IsElseIf()) return {}; - std::vector<std::unique_ptr<ast::ElseStatement>> ret; + ast::ElseStatementList ret; for (;;) { auto source = t.source(); next(); // Consume the peek @@ -1846,7 +1845,7 @@ // premerge_stmt // : PREMERGE body_stmt -std::vector<std::unique_ptr<ast::Statement>> ParserImpl::premerge_stmt() { +ast::StatementList ParserImpl::premerge_stmt() { auto t = peek(); if (!t.IsPremerge()) return {}; @@ -1931,7 +1930,7 @@ return nullptr; } - std::vector<std::unique_ptr<ast::CaseStatement>> body; + ast::CaseStatementList body; for (;;) { auto stmt = switch_body(); if (has_error()) @@ -2006,8 +2005,8 @@ // : // | statement case_body // | FALLTHROUGH SEMICOLON -std::vector<std::unique_ptr<ast::Statement>> ParserImpl::case_body() { - std::vector<std::unique_ptr<ast::Statement>> ret; +ast::StatementList ParserImpl::case_body() { + ast::StatementList ret; for (;;) { auto t = peek(); if (t.IsFallthrough()) { @@ -2072,7 +2071,7 @@ // continuing_stmt // : CONTINUING body_stmt -std::vector<std::unique_ptr<ast::Statement>> ParserImpl::continuing_stmt() { +ast::StatementList ParserImpl::continuing_stmt() { auto t = peek(); if (!t.IsContinuing()) return {}; @@ -2148,7 +2147,7 @@ return nullptr; } - std::vector<std::unique_ptr<ast::Expression>> params; + ast::ExpressionList params; auto param = const_expr(); if (has_error()) return nullptr; @@ -2313,8 +2312,7 @@ // argument_expression_list // : (logical_or_expression COMMA)* logical_or_expression -std::vector<std::unique_ptr<ast::Expression>> -ParserImpl::argument_expression_list() { +ast::ExpressionList ParserImpl::argument_expression_list() { auto arg = logical_or_expression(); if (has_error()) return {}; @@ -2323,7 +2321,7 @@ return {}; } - std::vector<std::unique_ptr<ast::Expression>> ret; + ast::ExpressionList ret; ret.push_back(std::move(arg)); for (;;) { @@ -2379,7 +2377,7 @@ next(); // Consume the peek t = peek(); - std::vector<std::unique_ptr<ast::Expression>> params; + ast::ExpressionList params; if (!t.IsParenRight() && !t.IsEof()) { params = argument_expression_list(); if (has_error()) @@ -2501,7 +2499,7 @@ set_error(t, "missing identifier for method call"); return nullptr; } - std::vector<std::unique_ptr<ast::Expression>> ident; + ast::ExpressionList ident; ident.push_back( std::make_unique<ast::IdentifierExpression>(source, t.to_str())); @@ -2531,7 +2529,7 @@ set_error(t, "missing identifier for method call"); return nullptr; } - std::vector<std::unique_ptr<ast::Expression>> ident; + ast::ExpressionList ident; ident.push_back( std::make_unique<ast::IdentifierExpression>(source, t.to_str()));
diff --git a/src/reader/wgsl/parser_impl.h b/src/reader/wgsl/parser_impl.h index ad39e3d..6027d1e 100644 --- a/src/reader/wgsl/parser_impl.h +++ b/src/reader/wgsl/parser_impl.h
@@ -20,12 +20,12 @@ #include <string> #include <unordered_map> #include <utility> -#include <vector> #include "src/ast/assignment_statement.h" #include "src/ast/builtin.h" #include "src/ast/constructor_expression.h" #include "src/ast/derivative_modifier.h" +#include "src/ast/else_statement.h" #include "src/ast/entry_point.h" #include "src/ast/function.h" #include "src/ast/import.h" @@ -113,9 +113,8 @@ /// @returns the const object or nullptr std::unique_ptr<ast::Variable> global_constant_decl(); /// Parses a `variable_decoration_list` grammar element - /// @returns a vector of parsed variable decorations - std::vector<std::unique_ptr<ast::VariableDecoration>> - variable_decoration_list(); + /// @returns the parsed variable decorations + ast::VariableDecorationList variable_decoration_list(); /// Parses a `variable_decoration` grammar element /// @returns the variable decoration or nullptr if an error is encountered std::unique_ptr<ast::VariableDecoration> variable_decoration(); @@ -152,14 +151,13 @@ ast::StructDecoration struct_decoration(); /// Parses a `struct_body_decl` grammar element /// @returns the struct members - std::vector<std::unique_ptr<ast::StructMember>> struct_body_decl(); + ast::StructMemberList struct_body_decl(); /// Parses a `struct_member` grammar element /// @returns the struct member or nullptr std::unique_ptr<ast::StructMember> struct_member(); /// Parses a `struct_member_decoration_decl` grammar element /// @returns the list of decorations - std::vector<std::unique_ptr<ast::StructMemberDecoration>> - struct_member_decoration_decl(); + ast::StructMemberDecorationList struct_member_decoration_decl(); /// Parses a `struct_member_decoration` grammar element /// @returns the decoration or nullptr if none found std::unique_ptr<ast::StructMemberDecoration> struct_member_decoration(); @@ -174,7 +172,7 @@ std::unique_ptr<ast::Function> function_header(); /// Parses a `param_list` grammar element /// @returns the parsed variables - std::vector<std::unique_ptr<ast::Variable>> param_list(); + ast::VariableList param_list(); /// Parses a `entry_point_decl` grammar element /// @returns the EntryPoint or nullptr on error std::unique_ptr<ast::EntryPoint> entry_point_decl(); @@ -183,13 +181,13 @@ ast::PipelineStage pipeline_stage(); /// Parses a `body_stmt` grammar element /// @returns the parsed statements - std::vector<std::unique_ptr<ast::Statement>> body_stmt(); + ast::StatementList body_stmt(); /// Parses a `paren_rhs_stmt` grammar element /// @returns the parsed element or nullptr std::unique_ptr<ast::Expression> paren_rhs_stmt(); /// Parses a `statements` grammar element /// @returns the statements parsed - std::vector<std::unique_ptr<ast::Statement>> statements(); + ast::StatementList statements(); /// Parses a `statement` grammar element /// @returns the parsed statement or nullptr std::unique_ptr<ast::Statement> statement(); @@ -207,13 +205,13 @@ std::unique_ptr<ast::IfStatement> if_stmt(); /// Parses a `elseif_stmt` grammar element /// @returns the parsed elements - std::vector<std::unique_ptr<ast::ElseStatement>> elseif_stmt(); + ast::ElseStatementList elseif_stmt(); /// Parses a `else_stmt` grammar element /// @returns the parsed statement or nullptr std::unique_ptr<ast::ElseStatement> else_stmt(); /// Parses a `premerge_stmt` grammar element /// @returns the parsed statements - std::vector<std::unique_ptr<ast::Statement>> premerge_stmt(); + ast::StatementList premerge_stmt(); /// Parses a `unless_stmt` grammar element /// @returns the parsed element or nullptr std::unique_ptr<ast::UnlessStatement> unless_stmt(); @@ -228,13 +226,13 @@ std::unique_ptr<ast::CaseStatement> switch_body(); /// Parses a `case_body` grammar element /// @returns the parsed statements - std::vector<std::unique_ptr<ast::Statement>> case_body(); + ast::StatementList case_body(); /// Parses a `loop_stmt` grammar element /// @returns the parsed loop or nullptr std::unique_ptr<ast::LoopStatement> loop_stmt(); /// Parses a `continuing_stmt` grammar element /// @returns the parsed statements - std::vector<std::unique_ptr<ast::Statement>> continuing_stmt(); + ast::StatementList continuing_stmt(); /// Parses a `const_literal` grammar element /// @returns the const literal parsed or nullptr if none found std::unique_ptr<ast::Literal> const_literal(); @@ -246,7 +244,7 @@ std::unique_ptr<ast::Expression> primary_expression(); /// Parses a `argument_expression_list` grammar element /// @returns the list of arguments - std::vector<std::unique_ptr<ast::Expression>> argument_expression_list(); + ast::ExpressionList argument_expression_list(); /// Parses the recursive portion of the postfix_expression /// @param prefix the left side of the expression /// @returns the parsed expression or nullptr