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