tint: Add ast::ParameterList, use it This is currently identical to ast::VariableList, but once we break ast::Variable up, this will become a different vector type. Bug: tint:1580 Change-Id: Ib2db5772996a63cd1989e36f1034dc1fbd3b371a Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/93601 Reviewed-by: Antonio Maiorano <amaiorano@google.com> Commit-Queue: Ben Clayton <bclayton@chromium.org>
diff --git a/src/tint/ast/function.cc b/src/tint/ast/function.cc index d8485d6..2fb64f1 100644 --- a/src/tint/ast/function.cc +++ b/src/tint/ast/function.cc
@@ -25,7 +25,7 @@ Function::Function(ProgramID pid, const Source& src, Symbol sym, - VariableList parameters, + ParameterList parameters, const Type* return_ty, const BlockStatement* b, AttributeList attrs,
diff --git a/src/tint/ast/function.h b/src/tint/ast/function.h index 843877e..585f1c8 100644 --- a/src/tint/ast/function.h +++ b/src/tint/ast/function.h
@@ -31,6 +31,9 @@ namespace tint::ast { +/// ParameterList is a list of function parameters +using ParameterList = std::vector<const Variable*>; + /// A Function statement. class Function final : public Castable<Function, Node> { public: @@ -46,7 +49,7 @@ Function(ProgramID program_id, const Source& source, Symbol symbol, - VariableList params, + ParameterList params, const Type* return_type, const BlockStatement* body, AttributeList attributes, @@ -72,7 +75,7 @@ const Symbol symbol; /// The function params - const VariableList params; + const ParameterList params; /// The function return type const Type* const return_type;
diff --git a/src/tint/ast/function_test.cc b/src/tint/ast/function_test.cc index 6b79af9..4fb6b91 100644 --- a/src/tint/ast/function_test.cc +++ b/src/tint/ast/function_test.cc
@@ -26,7 +26,7 @@ using FunctionTest = TestHelper; TEST_F(FunctionTest, Creation) { - VariableList params{Param("var", ty.i32())}; + ParameterList params{Param("var", ty.i32())}; auto* var = params[0]; auto* f = Func("func", params, ty.void_(), {}); @@ -37,7 +37,7 @@ } TEST_F(FunctionTest, Creation_WithSource) { - VariableList params{Param("var", ty.i32())}; + ParameterList params{Param("var", ty.i32())}; auto* f = Func(Source{Source::Location{20, 2}}, "func", params, ty.void_(), {}); auto src = f->source; @@ -67,7 +67,7 @@ EXPECT_FATAL_FAILURE( { ProgramBuilder b; - VariableList params; + ParameterList params; params.push_back(b.Param("var", b.ty.i32())); params.push_back(nullptr); @@ -126,7 +126,7 @@ EXPECT_FATAL_FAILURE( { ProgramBuilder b; - VariableList params; + ParameterList params; params.push_back(b.Var("var", b.ty.i32(), ast::StorageClass::kNone)); b.Func("f", params, b.ty.void_(), {});
diff --git a/src/tint/ast/module_test.cc b/src/tint/ast/module_test.cc index 5944f2a..4a2884b 100644 --- a/src/tint/ast/module_test.cc +++ b/src/tint/ast/module_test.cc
@@ -61,7 +61,7 @@ ProgramBuilder b1; ProgramBuilder b2; b1.AST().AddFunction(b2.create<ast::Function>(b2.Symbols().Register("func"), - VariableList{}, b2.ty.f32(), b2.Block(), + ParameterList{}, b2.ty.f32(), b2.Block(), AttributeList{}, AttributeList{})); }, "internal compiler error");
diff --git a/src/tint/program_builder.h b/src/tint/program_builder.h index 5f47efb..960f3d7 100644 --- a/src/tint/program_builder.h +++ b/src/tint/program_builder.h
@@ -1941,7 +1941,7 @@ template <typename NAME> const ast::Function* Func(const Source& source, NAME&& name, - ast::VariableList params, + ast::ParameterList params, const ast::Type* type, ast::StatementList body, ast::AttributeList attributes = {}, @@ -1964,7 +1964,7 @@ /// @returns the function pointer template <typename NAME> const ast::Function* Func(NAME&& name, - ast::VariableList params, + ast::ParameterList params, const ast::Type* type, ast::StatementList body, ast::AttributeList attributes = {},
diff --git a/src/tint/reader/spirv/function.cc b/src/tint/reader/spirv/function.cc index db1b033..72cc93b 100644 --- a/src/tint/reader/spirv/function.cc +++ b/src/tint/reader/spirv/function.cc
@@ -949,7 +949,7 @@ std::vector<int> index_prefix, const Type* tip_type, const Type* forced_param_type, - ast::VariableList* params, + ast::ParameterList* params, ast::StatementList* statements) { // TODO(dneto): Handle structs where the locations are annotated on members. tip_type = tip_type->UnwrapAlias(); @@ -1399,7 +1399,7 @@ << function_.result_id(); } - ast::VariableList ast_params; + ast::ParameterList ast_params; function_.ForEachParam([this, &ast_params](const spvtools::opt::Instruction* param) { auto* type = parser_impl_.ConvertType(param->type_id()); if (type != nullptr) {
diff --git a/src/tint/reader/spirv/function.h b/src/tint/reader/spirv/function.h index dbfd327..5c50e21 100644 --- a/src/tint/reader/spirv/function.h +++ b/src/tint/reader/spirv/function.h
@@ -459,7 +459,7 @@ std::vector<int> index_prefix, const Type* tip_type, const Type* forced_param_type, - ast::VariableList* params, + ast::ParameterList* params, ast::StatementList* statements); /// Creates one or more struct members from an output variable, and the @@ -951,7 +951,7 @@ /// Function name std::string name; /// Function parameters - ast::VariableList params; + ast::ParameterList params; /// Function return type const Type* return_type; /// Function attributes
diff --git a/src/tint/reader/wgsl/parser_impl.cc b/src/tint/reader/wgsl/parser_impl.cc index ddd9e96..13194780 100644 --- a/src/tint/reader/wgsl/parser_impl.cc +++ b/src/tint/reader/wgsl/parser_impl.cc
@@ -210,7 +210,7 @@ ParserImpl::FunctionHeader::FunctionHeader(Source src, std::string n, - ast::VariableList p, + ast::ParameterList p, const ast::Type* ret_ty, ast::AttributeList ret_attrs) : source(src), name(n), params(p), return_type(ret_ty), return_type_attributes(ret_attrs) {} @@ -1443,8 +1443,8 @@ // param_list // : // | (param COMMA)* param COMMA? -Expect<ast::VariableList> ParserImpl::expect_param_list() { - ast::VariableList ret; +Expect<ast::ParameterList> ParserImpl::expect_param_list() { + ast::ParameterList ret; while (continue_parsing()) { // Check for the end of the list. auto t = peek();
diff --git a/src/tint/reader/wgsl/parser_impl.h b/src/tint/reader/wgsl/parser_impl.h index 67d0004..0c95159 100644 --- a/src/tint/reader/wgsl/parser_impl.h +++ b/src/tint/reader/wgsl/parser_impl.h
@@ -232,7 +232,7 @@ /// @param ret_attrs return type attributes FunctionHeader(Source src, std::string n, - ast::VariableList p, + ast::ParameterList p, const ast::Type* ret_ty, ast::AttributeList ret_attrs); /// Destructor @@ -247,7 +247,7 @@ /// Function name std::string name; /// Function parameters - ast::VariableList params; + ast::ParameterList params; /// Function return type const ast::Type* return_type = nullptr; /// Function return type attributes @@ -459,7 +459,7 @@ Maybe<FunctionHeader> function_header(); /// Parses a `param_list` grammar element, erroring on parse failure. /// @returns the parsed variables - Expect<ast::VariableList> expect_param_list(); + Expect<ast::ParameterList> expect_param_list(); /// Parses a `param` grammar element, erroring on parse failure. /// @returns the parsed variable Expect<ast::Variable*> expect_param();
diff --git a/src/tint/resolver/call_test.cc b/src/tint/resolver/call_test.cc index 39a6eb4..5351623 100644 --- a/src/tint/resolver/call_test.cc +++ b/src/tint/resolver/call_test.cc
@@ -81,7 +81,7 @@ }; TEST_F(ResolverCallTest, Valid) { - ast::VariableList params; + ast::ParameterList params; ast::ExpressionList args; for (auto& p : all_param_types) { params.push_back(Param(Sym(), p.create_type(*this)));
diff --git a/src/tint/resolver/dependency_graph_test.cc b/src/tint/resolver/dependency_graph_test.cc index 82b0a69..f562afb 100644 --- a/src/tint/resolver/dependency_graph_test.cc +++ b/src/tint/resolver/dependency_graph_test.cc
@@ -384,11 +384,11 @@ /// The program builder ProgramBuilder* const builder; /// Parameters to a function that may need to be built - std::vector<const ast::Variable*> parameters; + ast::ParameterList parameters; /// Shallow function var / let declaration statements - std::vector<const ast::Statement*> statements; + ast::StatementList statements; /// Nested function local var / let declaration statements - std::vector<const ast::Statement*> nested_statements; + ast::StatementList nested_statements; /// Function attributes ast::AttributeList func_attrs; @@ -717,8 +717,10 @@ // } // var G: f32 = 2.1; - Func("F", ast::VariableList{}, ty.void_(), - {Block(Assign(Expr(Source{{12, 34}}, "G"), 3.14_f))}); + Func("F", {}, ty.void_(), + { + Block(Assign(Expr(Source{{12, 34}}, "G"), 3.14_f)), + }); Global(Source{{56, 78}}, "G", ty.f32(), ast::StorageClass::kPrivate, Expr(2.1_f));
diff --git a/src/tint/resolver/function_validation_test.cc b/src/tint/resolver/function_validation_test.cc index ac4e01f..06817aa 100644 --- a/src/tint/resolver/function_validation_test.cc +++ b/src/tint/resolver/function_validation_test.cc
@@ -733,7 +733,7 @@ } TEST_F(ResolverFunctionValidationTest, ParametersAtLimit) { - ast::VariableList params; + ast::ParameterList params; for (int i = 0; i < 255; i++) { params.emplace_back(Param("param_" + std::to_string(i), ty.i32())); } @@ -743,7 +743,7 @@ } TEST_F(ResolverFunctionValidationTest, ParametersOverLimit) { - ast::VariableList params; + ast::ParameterList params; for (int i = 0; i < 256; i++) { params.emplace_back(Param("param_" + std::to_string(i), ty.i32())); }
diff --git a/src/tint/resolver/uniformity_test.cc b/src/tint/resolver/uniformity_test.cc index d661099..7c07357 100644 --- a/src/tint/resolver/uniformity_test.cc +++ b/src/tint/resolver/uniformity_test.cc
@@ -5001,7 +5001,7 @@ // ... // *p254 = rhs; // } - ast::VariableList params; + ast::ParameterList params; ast::StatementList foo_body; const ast::Expression* rhs_init = b.Deref("p0"); for (int i = 1; i < 255; i++) {
diff --git a/src/tint/transform/calculate_array_length.cc b/src/tint/transform/calculate_array_length.cc index bdda1cd..9cf1175 100644 --- a/src/tint/transform/calculate_array_length.cc +++ b/src/tint/transform/calculate_array_length.cc
@@ -98,7 +98,7 @@ ctx.dst->Disable(ast::DisabledValidation::kIgnoreConstructibleFunctionParameter); ctx.dst->AST().AddFunction(ctx.dst->create<ast::Function>( name, - ast::VariableList{ + ast::ParameterList{ // Note: The buffer parameter requires the kStorage StorageClass // in order for HLSL to emit this as a ByteAddressBuffer. ctx.dst->create<ast::Variable>(ctx.dst->Sym("buffer"),
diff --git a/src/tint/transform/canonicalize_entry_point_io.cc b/src/tint/transform/canonicalize_entry_point_io.cc index 44d577b..104429b 100644 --- a/src/tint/transform/canonicalize_entry_point_io.cc +++ b/src/tint/transform/canonicalize_entry_point_io.cc
@@ -100,7 +100,7 @@ const sem::Function* func_sem; /// The new entry point wrapper function's parameters. - ast::VariableList wrapper_ep_parameters; + ast::ParameterList wrapper_ep_parameters; /// The members of the wrapper function's struct parameter. ast::StructMemberList wrapper_struct_param_members; /// The name of the wrapper function's struct parameter.
diff --git a/src/tint/transform/combine_samplers.cc b/src/tint/transform/combine_samplers.cc index c9d4913..8cd3a6d 100644 --- a/src/tint/transform/combine_samplers.cc +++ b/src/tint/transform/combine_samplers.cc
@@ -169,7 +169,7 @@ if (pairs.empty()) { return nullptr; } - ast::VariableList params; + ast::ParameterList params; for (auto pair : func->TextureSamplerPairs()) { const sem::Variable* texture_var = pair.first; const sem::Variable* sampler_var = pair.second;
diff --git a/src/tint/transform/decompose_memory_access.cc b/src/tint/transform/decompose_memory_access.cc index a90a6e2..f89d9ab 100644 --- a/src/tint/transform/decompose_memory_access.cc +++ b/src/tint/transform/decompose_memory_access.cc
@@ -437,7 +437,7 @@ auto* disable_validation = b.Disable(ast::DisabledValidation::kIgnoreConstructibleFunctionParameter); - ast::VariableList params = { + ast::ParameterList params = { // Note: The buffer parameter requires the StorageClass in // order for HLSL to emit this as a ByteAddressBuffer or cbuffer // array. @@ -528,7 +528,7 @@ auto* el_ast_ty = CreateASTTypeFor(ctx, el_ty); auto* disable_validation = b.Disable(ast::DisabledValidation::kIgnoreConstructibleFunctionParameter); - ast::VariableList params{ + ast::ParameterList params{ // Note: The buffer parameter requires the StorageClass in // order for HLSL to emit this as a ByteAddressBuffer. @@ -621,7 +621,7 @@ // The first parameter to all WGSL atomics is the expression to the // atomic. This is replaced with two parameters: the buffer and offset. - ast::VariableList params = { + ast::ParameterList params = { // Note: The buffer parameter requires the kStorage StorageClass in // order for HLSL to emit this as a ByteAddressBuffer. b.create<ast::Variable>(b.Sym("buffer"), ast::StorageClass::kStorage,
diff --git a/src/tint/transform/remove_phonies.cc b/src/tint/transform/remove_phonies.cc index 7ca1194..1cac0b7 100644 --- a/src/tint/transform/remove_phonies.cc +++ b/src/tint/transform/remove_phonies.cc
@@ -132,7 +132,7 @@ } auto sink = utils::GetOrCreate(sinks, sig, [&] { auto name = ctx.dst->Symbols().New("phony_sink"); - ast::VariableList params; + ast::ParameterList params; for (auto* ty : sig.types) { auto* ast_ty = CreateASTTypeFor(ctx, ty); params.push_back(
diff --git a/src/tint/transform/vertex_pulling.cc b/src/tint/transform/vertex_pulling.cc index e297c90..31e4e7c 100644 --- a/src/tint/transform/vertex_pulling.cc +++ b/src/tint/transform/vertex_pulling.cc
@@ -228,7 +228,7 @@ Symbol pulling_position_name; Symbol struct_buffer_name; std::unordered_map<uint32_t, Symbol> vertex_buffer_names; - ast::VariableList new_function_parameters; + ast::ParameterList new_function_parameters; /// Generate the vertex buffer binding name /// @param index index to append to buffer name