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