ast: Add body parameter to ast::Function constructors In a near-future change, AST nodes, such as ast::BlockStatement will no longer be std::unique_ptrs, and will have to be constructed and owned by an external class. This means AST nodes can no longer allocate default child nodes. Bug: tint:322 Change-Id: Iddb5605b9bc0de80ad2710ced0e429f89410af2f Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/32675 Commit-Queue: dan sinclair <dsinclair@chromium.org> Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/ast/function.cc b/src/ast/function.cc index ab1b735..7ff3774 100644 --- a/src/ast/function.cc +++ b/src/ast/function.cc
@@ -28,22 +28,24 @@ Function::Function(const std::string& name, VariableList params, - type::Type* return_type) + type::Type* return_type, + std::unique_ptr<BlockStatement> body) : Node(), name_(name), params_(std::move(params)), return_type_(return_type), - body_(std::make_unique<BlockStatement>()) {} + body_(std::move(body)) {} Function::Function(const Source& source, const std::string& name, VariableList params, - type::Type* return_type) + type::Type* return_type, + std::unique_ptr<BlockStatement> body) : Node(source), name_(name), params_(std::move(params)), return_type_(return_type), - body_(std::make_unique<BlockStatement>()) {} + body_(std::move(body)) {} Function::Function(Function&&) = default;
diff --git a/src/ast/function.h b/src/ast/function.h index 2dbeab4..cbd4d20 100644 --- a/src/ast/function.h +++ b/src/ast/function.h
@@ -56,18 +56,22 @@ /// @param name the function name /// @param params the function parameters /// @param return_type the return type + /// @param body the function body Function(const std::string& name, VariableList params, - type::Type* return_type); + type::Type* return_type, + std::unique_ptr<BlockStatement> body); /// Create a function /// @param source the variable source /// @param name the function name /// @param params the function parameters /// @param return_type the return type + /// @param body the function body Function(const Source& source, const std::string& name, VariableList params, - type::Type* return_type); + type::Type* return_type, + std::unique_ptr<BlockStatement> body); /// Move constructor Function(Function&&);
diff --git a/src/ast/function_test.cc b/src/ast/function_test.cc index 91785bc..0eb838d 100644 --- a/src/ast/function_test.cc +++ b/src/ast/function_test.cc
@@ -40,7 +40,8 @@ params.push_back(create<Variable>("var", StorageClass::kNone, &i32)); auto* var_ptr = params[0].get(); - Function f("func", std::move(params), &void_type); + Function f("func", std::move(params), &void_type, + create<ast::BlockStatement>()); EXPECT_EQ(f.name(), "func"); ASSERT_EQ(f.params().size(), 1u); EXPECT_EQ(f.return_type(), &void_type); @@ -55,7 +56,7 @@ params.push_back(create<Variable>("var", StorageClass::kNone, &i32)); Function f(Source{Source::Location{20, 2}}, "func", std::move(params), - &void_type); + &void_type, create<ast::BlockStatement>()); auto src = f.source(); EXPECT_EQ(src.range.begin.line, 20u); EXPECT_EQ(src.range.begin.column, 2u); @@ -66,7 +67,7 @@ type::I32Type i32; Variable v("var", StorageClass::kInput, &i32); - Function f("func", VariableList{}, &void_type); + Function f("func", VariableList{}, &void_type, create<ast::BlockStatement>()); f.add_referenced_module_variable(&v); ASSERT_EQ(f.referenced_module_variables().size(), 1u); @@ -108,7 +109,7 @@ create<ast::BuiltinDecoration>(ast::Builtin::kFragDepth, Source{})); builtin2.set_decorations(std::move(decos)); - Function f("func", VariableList{}, &void_type); + Function f("func", VariableList{}, &void_type, create<ast::BlockStatement>()); f.add_referenced_module_variable(&loc1); f.add_referenced_module_variable(&builtin1); @@ -151,7 +152,7 @@ create<ast::BuiltinDecoration>(ast::Builtin::kFragDepth, Source{})); builtin2.set_decorations(std::move(decos)); - Function f("func", VariableList{}, &void_type); + Function f("func", VariableList{}, &void_type, create<ast::BlockStatement>()); f.add_referenced_module_variable(&loc1); f.add_referenced_module_variable(&builtin1); @@ -169,7 +170,7 @@ TEST_F(FunctionTest, AddDuplicateEntryPoints) { ast::type::VoidType void_type; - Function f("func", VariableList{}, &void_type); + Function f("func", VariableList{}, &void_type, create<ast::BlockStatement>()); f.add_ancestor_entry_point("main"); ASSERT_EQ(1u, f.ancestor_entry_points().size()); @@ -190,7 +191,8 @@ auto block = create<ast::BlockStatement>(); block->append(create<DiscardStatement>()); - Function f("func", std::move(params), &void_type); + Function f("func", std::move(params), &void_type, + create<ast::BlockStatement>()); f.set_body(std::move(block)); EXPECT_TRUE(f.IsValid()); } @@ -202,7 +204,7 @@ VariableList params; params.push_back(create<Variable>("var", StorageClass::kNone, &i32)); - Function f("", std::move(params), &void_type); + Function f("", std::move(params), &void_type, create<ast::BlockStatement>()); EXPECT_FALSE(f.IsValid()); } @@ -212,7 +214,7 @@ VariableList params; params.push_back(create<Variable>("var", StorageClass::kNone, &i32)); - Function f("func", std::move(params), nullptr); + Function f("func", std::move(params), nullptr, create<ast::BlockStatement>()); EXPECT_FALSE(f.IsValid()); } @@ -224,7 +226,8 @@ params.push_back(create<Variable>("var", StorageClass::kNone, &i32)); params.push_back(nullptr); - Function f("func", std::move(params), &void_type); + Function f("func", std::move(params), &void_type, + create<ast::BlockStatement>()); EXPECT_FALSE(f.IsValid()); } @@ -234,7 +237,8 @@ VariableList params; params.push_back(create<Variable>("var", StorageClass::kNone, nullptr)); - Function f("func", std::move(params), &void_type); + Function f("func", std::move(params), &void_type, + create<ast::BlockStatement>()); EXPECT_FALSE(f.IsValid()); } @@ -249,7 +253,8 @@ block->append(create<DiscardStatement>()); block->append(nullptr); - Function f("func", std::move(params), &void_type); + Function f("func", std::move(params), &void_type, + create<ast::BlockStatement>()); f.set_body(std::move(block)); EXPECT_FALSE(f.IsValid()); } @@ -265,7 +270,8 @@ block->append(create<DiscardStatement>()); block->append(nullptr); - Function f("func", std::move(params), &void_type); + Function f("func", std::move(params), &void_type, + create<ast::BlockStatement>()); f.set_body(std::move(block)); EXPECT_FALSE(f.IsValid()); } @@ -277,7 +283,7 @@ auto block = create<ast::BlockStatement>(); block->append(create<DiscardStatement>()); - Function f("func", {}, &void_type); + Function f("func", {}, &void_type, create<ast::BlockStatement>()); f.set_body(std::move(block)); std::ostringstream out; @@ -297,7 +303,7 @@ auto block = create<ast::BlockStatement>(); block->append(create<DiscardStatement>()); - Function f("func", {}, &void_type); + Function f("func", {}, &void_type, create<ast::BlockStatement>()); f.set_body(std::move(block)); f.add_decoration(create<WorkgroupDecoration>(2, 4, 6, Source{})); @@ -322,7 +328,8 @@ auto block = create<ast::BlockStatement>(); block->append(create<DiscardStatement>()); - Function f("func", std::move(params), &void_type); + Function f("func", std::move(params), &void_type, + create<ast::BlockStatement>()); f.set_body(std::move(block)); std::ostringstream out; @@ -344,7 +351,7 @@ TEST_F(FunctionTest, TypeName) { type::VoidType void_type; - Function f("func", {}, &void_type); + Function f("func", {}, &void_type, create<ast::BlockStatement>()); EXPECT_EQ(f.type_name(), "__func__void"); } @@ -357,7 +364,8 @@ params.push_back(create<Variable>("var1", StorageClass::kNone, &i32)); params.push_back(create<Variable>("var2", StorageClass::kNone, &f32)); - Function f("func", std::move(params), &void_type); + Function f("func", std::move(params), &void_type, + create<ast::BlockStatement>()); EXPECT_EQ(f.type_name(), "__func__void__i32__f32"); } @@ -369,7 +377,8 @@ auto stmt = create<DiscardStatement>(); auto* stmt_ptr = stmt.get(); body->append(std::move(stmt)); - Function f("func", std::move(params), &void_type); + Function f("func", std::move(params), &void_type, + create<ast::BlockStatement>()); f.set_body(std::move(body)); EXPECT_EQ(f.get_last_statement(), stmt_ptr); @@ -380,7 +389,8 @@ VariableList params; auto body = create<ast::BlockStatement>(); - Function f("func", std::move(params), &void_type); + Function f("func", std::move(params), &void_type, + create<ast::BlockStatement>()); f.set_body(std::move(body)); EXPECT_EQ(f.get_last_statement(), nullptr); @@ -388,7 +398,7 @@ TEST_F(FunctionTest, WorkgroupSize_NoneSet) { type::VoidType void_type; - Function f("f", {}, &void_type); + Function f("f", {}, &void_type, create<ast::BlockStatement>()); uint32_t x = 0; uint32_t y = 0; uint32_t z = 0; @@ -400,7 +410,7 @@ TEST_F(FunctionTest, WorkgroupSize) { type::VoidType void_type; - Function f("f", {}, &void_type); + Function f("f", {}, &void_type, create<ast::BlockStatement>()); f.add_decoration(create<WorkgroupDecoration>(2u, 4u, 6u, Source{})); uint32_t x = 0;
diff --git a/src/ast/module_test.cc b/src/ast/module_test.cc index eaddc07..9b6af13 100644 --- a/src/ast/module_test.cc +++ b/src/ast/module_test.cc
@@ -48,7 +48,8 @@ type::F32Type f32; Module m; - auto func = create<Function>("main", VariableList{}, &f32); + auto func = create<Function>("main", VariableList{}, &f32, + create<ast::BlockStatement>()); auto* func_ptr = func.get(); m.AddFunction(std::move(func)); EXPECT_EQ(func_ptr, m.FindFunctionByName("main")); @@ -124,7 +125,8 @@ TEST_F(ModuleTest, IsValid_Function) { type::F32Type f32; - auto func = create<Function>("main", VariableList(), &f32); + auto func = create<Function>("main", VariableList(), &f32, + create<ast::BlockStatement>()); Module m; m.AddFunction(std::move(func));
diff --git a/src/inspector/inspector_test.cc b/src/inspector/inspector_test.cc index da3848e..03104bd 100644 --- a/src/inspector/inspector_test.cc +++ b/src/inspector/inspector_test.cc
@@ -81,10 +81,8 @@ std::unique_ptr<ast::Function> MakeEmptyBodyFunction(std::string name) { auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - std::unique_ptr<ast::Function> func = - create<ast::Function>(name, ast::VariableList(), void_type()); - func->set_body(std::move(body)); - return func; + return create<ast::Function>(name, ast::VariableList(), void_type(), + std::move(body)); } /// Generates a function that calls another @@ -99,10 +97,8 @@ ast::ExpressionList()); body->append(create<ast::CallStatement>(std::move(call_expr))); body->append(create<ast::ReturnStatement>()); - std::unique_ptr<ast::Function> func = - create<ast::Function>(caller, ast::VariableList(), void_type()); - func->set_body(std::move(body)); - return func; + return create<ast::Function>(caller, ast::VariableList(), void_type(), + std::move(body)); } /// Add In/Out variables to the global variables @@ -139,9 +135,8 @@ create<ast::IdentifierExpression>(in))); } body->append(create<ast::ReturnStatement>()); - auto func = create<ast::Function>(name, ast::VariableList(), void_type()); - func->set_body(std::move(body)); - return func; + return create<ast::Function>(name, ast::VariableList(), void_type(), + std::move(body)); } /// Generates a function that references in/out variables and calls another @@ -168,9 +163,8 @@ ast::ExpressionList()); body->append(create<ast::CallStatement>(std::move(call_expr))); body->append(create<ast::ReturnStatement>()); - auto func = create<ast::Function>(caller, ast::VariableList(), void_type()); - func->set_body(std::move(body)); - return func; + return create<ast::Function>(caller, ast::VariableList(), void_type(), + std::move(body)); } /// Add a Constant ID to the global variables. @@ -415,10 +409,8 @@ } body->append(create<ast::ReturnStatement>()); - auto func = - create<ast::Function>(func_name, ast::VariableList(), void_type()); - func->set_body(std::move(body)); - return func; + return create<ast::Function>(func_name, ast::VariableList(), void_type(), + std::move(body)); } /// Adds a regular sampler variable to the module @@ -539,10 +531,8 @@ std::move(call_expr))); body->append(create<ast::ReturnStatement>()); - auto func = - create<ast::Function>(func_name, ast::VariableList(), void_type()); - func->set_body(std::move(body)); - return func; + return create<ast::Function>(func_name, ast::VariableList(), void_type(), + std::move(body)); } /// Generates a function that references a specific comparison sampler @@ -582,10 +572,8 @@ std::move(call_expr))); body->append(create<ast::ReturnStatement>()); - auto func = - create<ast::Function>(func_name, ast::VariableList(), void_type()); - func->set_body(std::move(body)); - return func; + return create<ast::Function>(func_name, ast::VariableList(), void_type(), + std::move(body)); } /// Gets an appropriate type for the data in a given texture type. @@ -1345,9 +1333,8 @@ AddFuncCall(body.get(), "ub_baz_func"); body->append(create<ast::ReturnStatement>()); - std::unique_ptr<ast::Function> func = - create<ast::Function>("ep_func", ast::VariableList(), void_type()); - func->set_body(std::move(body)); + std::unique_ptr<ast::Function> func = create<ast::Function>( + "ep_func", ast::VariableList(), void_type(), std::move(body)); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); @@ -1486,9 +1473,8 @@ AddFuncCall(body.get(), "sb_baz_func"); body->append(create<ast::ReturnStatement>()); - std::unique_ptr<ast::Function> func = - create<ast::Function>("ep_func", ast::VariableList(), void_type()); - func->set_body(std::move(body)); + std::unique_ptr<ast::Function> func = create<ast::Function>( + "ep_func", ast::VariableList(), void_type(), std::move(body)); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); @@ -1652,9 +1638,8 @@ AddFuncCall(body.get(), "sb_baz_func"); body->append(create<ast::ReturnStatement>()); - std::unique_ptr<ast::Function> func = - create<ast::Function>("ep_func", ast::VariableList(), void_type()); - func->set_body(std::move(body)); + std::unique_ptr<ast::Function> func = create<ast::Function>( + "ep_func", ast::VariableList(), void_type(), std::move(body)); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}));
diff --git a/src/reader/spirv/function.cc b/src/reader/spirv/function.cc index b42713f..2ab7cf5 100644 --- a/src/reader/spirv/function.cc +++ b/src/reader/spirv/function.cc
@@ -646,7 +646,8 @@ } auto ast_fn = - std::make_unique<ast::Function>(name, std::move(ast_params), ret_ty); + std::make_unique<ast::Function>(name, std::move(ast_params), ret_ty, + std::make_unique<ast::BlockStatement>()); if (ep_info_ != nullptr) { ast_fn->add_decoration(
diff --git a/src/reader/wgsl/parser_impl.cc b/src/reader/wgsl/parser_impl.cc index d3c357b..e70d2a4 100644 --- a/src/reader/wgsl/parser_impl.cc +++ b/src/reader/wgsl/parser_impl.cc
@@ -1231,8 +1231,9 @@ if (errored) return Failure::kErrored; - return std::make_unique<ast::Function>(source, name.value, - std::move(params.value), type.value); + return std::make_unique<ast::Function>( + source, name.value, std::move(params.value), type.value, + std::make_unique<ast::BlockStatement>()); } // param_list
diff --git a/src/transform/bound_array_accessors_transform_test.cc b/src/transform/bound_array_accessors_transform_test.cc index e165ef0..26c8973 100644 --- a/src/transform/bound_array_accessors_transform_test.cc +++ b/src/transform/bound_array_accessors_transform_test.cc
@@ -52,10 +52,10 @@ BoundArrayAccessorsTest() : td_(&ctx_, &mod_), transform_(&ctx_, &mod_) {} ast::BlockStatement* SetupFunctionAndBody() { - auto func = create<ast::Function>("func", ast::VariableList{}, &void_type_); auto block = create<ast::BlockStatement>(); body_ = block.get(); - func->set_body(std::move(block)); + auto func = create<ast::Function>("func", ast::VariableList{}, &void_type_, + std::move(block)); mod_.AddFunction(std::move(func)); return body_; }
diff --git a/src/transform/vertex_pulling_transform_test.cc b/src/transform/vertex_pulling_transform_test.cc index a9b0c8c..2b2d34b 100644 --- a/src/transform/vertex_pulling_transform_test.cc +++ b/src/transform/vertex_pulling_transform_test.cc
@@ -43,7 +43,8 @@ void InitBasicModule() { auto func = create<ast::Function>( "main", ast::VariableList{}, - ctx_.type_mgr().Get(std::make_unique<ast::type::VoidType>())); + ctx_.type_mgr().Get(std::make_unique<ast::type::VoidType>()), + create<ast::BlockStatement>()); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage ::kVertex, Source{})); mod()->AddFunction(std::move(func)); @@ -118,7 +119,8 @@ TEST_F(VertexPullingTransformTest, Error_EntryPointWrongStage) { auto func = create<ast::Function>( "main", ast::VariableList{}, - ctx()->type_mgr().Get(std::make_unique<ast::type::VoidType>())); + ctx()->type_mgr().Get(std::make_unique<ast::type::VoidType>()), + create<ast::BlockStatement>()); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod()->AddFunction(std::move(func));
diff --git a/src/type_determiner_test.cc b/src/type_determiner_test.cc index 970c0bf..089a14c 100644 --- a/src/type_determiner_test.cc +++ b/src/type_determiner_test.cc
@@ -381,7 +381,8 @@ ast::type::F32Type f32; ast::VariableList params; - auto func = create<ast::Function>("my_func", std::move(params), &f32); + auto func = create<ast::Function>("my_func", std::move(params), &f32, + create<ast::BlockStatement>()); mod()->AddFunction(std::move(func)); // Register the function @@ -408,17 +409,17 @@ Source{Source::Location{12, 34}}, "func"), std::move(call_params)); ast::VariableList params0; - auto func_main = create<ast::Function>("main", std::move(params0), &f32); auto main_body = create<ast::BlockStatement>(); main_body->append(create<ast::CallStatement>(std::move(call_expr))); main_body->append(create<ast::ReturnStatement>()); - func_main->set_body(std::move(main_body)); + auto func_main = create<ast::Function>("main", std::move(params0), &f32, + std::move(main_body)); mod()->AddFunction(std::move(func_main)); - auto func = create<ast::Function>("func", std::move(params0), &f32); auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = + create<ast::Function>("func", std::move(params0), &f32, std::move(body)); mod()->AddFunction(std::move(func)); EXPECT_FALSE(td()->Determine()) << td()->error(); @@ -625,7 +626,8 @@ ast::type::F32Type f32; ast::VariableList params; - auto func = create<ast::Function>("my_func", std::move(params), &f32); + auto func = create<ast::Function>("my_func", std::move(params), &f32, + create<ast::BlockStatement>()); mod()->AddFunction(std::move(func)); // Register the function @@ -643,7 +645,8 @@ ast::type::F32Type f32; ast::VariableList params; - auto func = create<ast::Function>("my_func", std::move(params), &f32); + auto func = create<ast::Function>("my_func", std::move(params), &f32, + create<ast::BlockStatement>()); mod()->AddFunction(std::move(func)); // Register the function @@ -769,8 +772,7 @@ body->append(create<ast::AssignmentStatement>( std::move(my_var), create<ast::IdentifierExpression>("my_var"))); - ast::Function f("my_func", {}, &f32); - f.set_body(std::move(body)); + ast::Function f("my_func", {}, &f32, std::move(body)); EXPECT_TRUE(td()->DetermineFunction(&f)); @@ -791,8 +793,7 @@ body->append(create<ast::AssignmentStatement>( std::move(my_var), create<ast::IdentifierExpression>("my_var"))); - ast::Function f("my_func", {}, &f32); - f.set_body(std::move(body)); + ast::Function f("my_func", {}, &f32, std::move(body)); EXPECT_TRUE(td()->DetermineFunction(&f)); @@ -815,8 +816,7 @@ body->append(create<ast::AssignmentStatement>( std::move(my_var), create<ast::IdentifierExpression>("my_var"))); - ast::Function f("my_func", {}, &f32); - f.set_body(std::move(body)); + ast::Function f("my_func", {}, &f32, std::move(body)); EXPECT_TRUE(td()->DetermineFunction(&f)); @@ -829,7 +829,8 @@ ast::type::F32Type f32; ast::VariableList params; - auto func = create<ast::Function>("my_func", std::move(params), &f32); + auto func = create<ast::Function>("my_func", std::move(params), &f32, + create<ast::BlockStatement>()); mod()->AddFunction(std::move(func)); // Register the function @@ -873,9 +874,6 @@ mod()->AddGlobalVariable(std::move(priv_var)); ast::VariableList params; - auto func = create<ast::Function>("my_func", std::move(params), &f32); - auto* func_ptr = func.get(); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("out_var"), @@ -889,7 +887,9 @@ body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("priv_var"), create<ast::IdentifierExpression>("priv_var"))); - func->set_body(std::move(body)); + auto func = create<ast::Function>("my_func", std::move(params), &f32, + std::move(body)); + auto* func_ptr = func.get(); mod()->AddFunction(std::move(func)); @@ -931,9 +931,6 @@ mod()->AddGlobalVariable(std::move(wg_var)); mod()->AddGlobalVariable(std::move(priv_var)); - ast::VariableList params; - auto func = create<ast::Function>("my_func", std::move(params), &f32); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("out_var"), @@ -947,19 +944,20 @@ body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("priv_var"), create<ast::IdentifierExpression>("priv_var"))); - func->set_body(std::move(body)); + ast::VariableList params; + auto func = create<ast::Function>("my_func", std::move(params), &f32, + std::move(body)); mod()->AddFunction(std::move(func)); - auto func2 = create<ast::Function>("func", std::move(params), &f32); - auto* func2_ptr = func2.get(); - body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("out_var"), create<ast::CallExpression>(create<ast::IdentifierExpression>("my_func"), ast::ExpressionList{}))); - func2->set_body(std::move(body)); + auto func2 = + create<ast::Function>("func", std::move(params), &f32, std::move(body)); + auto* func2_ptr = func2.get(); mod()->AddFunction(std::move(func2)); @@ -981,17 +979,17 @@ auto var = create<ast::Variable>("in_var", ast::StorageClass::kFunction, &f32); - ast::VariableList params; - auto func = create<ast::Function>("my_func", std::move(params), &f32); - auto* func_ptr = func.get(); - auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("var"), create<ast::ScalarConstructorExpression>( create<ast::FloatLiteral>(&f32, 1.f)))); - func->set_body(std::move(body)); + + ast::VariableList params; + auto func = create<ast::Function>("my_func", std::move(params), &f32, + std::move(body)); + auto* func_ptr = func.get(); mod()->AddFunction(std::move(func)); @@ -2339,11 +2337,10 @@ auto* var_ptr = var.get(); auto stmt = create<ast::VariableDeclStatement>(std::move(var)); - auto func = create<ast::Function>("func", ast::VariableList{}, &i32); - auto body = create<ast::BlockStatement>(); body->append(std::move(stmt)); - func->set_body(std::move(body)); + auto func = + create<ast::Function>("func", ast::VariableList{}, &i32, std::move(body)); mod()->AddFunction(std::move(func)); @@ -2359,11 +2356,10 @@ auto* var_ptr = var.get(); auto stmt = create<ast::VariableDeclStatement>(std::move(var)); - auto func = create<ast::Function>("func", ast::VariableList{}, &i32); - auto body = create<ast::BlockStatement>(); body->append(std::move(stmt)); - func->set_body(std::move(body)); + auto func = + create<ast::Function>("func", ast::VariableList{}, &i32, std::move(body)); mod()->AddFunction(std::move(func)); @@ -2377,11 +2373,10 @@ auto var = create<ast::Variable>("var", ast::StorageClass::kWorkgroup, &i32); auto stmt = create<ast::VariableDeclStatement>(std::move(var)); - auto func = create<ast::Function>("func", ast::VariableList{}, &i32); - auto body = create<ast::BlockStatement>(); body->append(std::move(stmt)); - func->set_body(std::move(body)); + auto func = + create<ast::Function>("func", ast::VariableList{}, &i32, std::move(body)); mod()->AddFunction(std::move(func)); @@ -4583,36 +4578,28 @@ // ep_2 -> {} ast::VariableList params; - auto func_b = create<ast::Function>("b", std::move(params), &f32); - auto* func_b_ptr = func_b.get(); - auto body = create<ast::BlockStatement>(); - func_b->set_body(std::move(body)); - - auto func_c = create<ast::Function>("c", std::move(params), &f32); - auto* func_c_ptr = func_c.get(); + auto func_b = + create<ast::Function>("b", std::move(params), &f32, std::move(body)); + auto* func_b_ptr = func_b.get(); body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("second"), create<ast::CallExpression>(create<ast::IdentifierExpression>("b"), ast::ExpressionList{}))); - func_c->set_body(std::move(body)); - - auto func_a = create<ast::Function>("a", std::move(params), &f32); - auto* func_a_ptr = func_a.get(); + auto func_c = + create<ast::Function>("c", std::move(params), &f32, std::move(body)); + auto* func_c_ptr = func_c.get(); body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("first"), create<ast::CallExpression>(create<ast::IdentifierExpression>("c"), ast::ExpressionList{}))); - func_a->set_body(std::move(body)); - - auto ep_1 = create<ast::Function>("ep_1", std::move(params), &f32); - ep_1->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); - auto* ep_1_ptr = ep_1.get(); + auto func_a = + create<ast::Function>("a", std::move(params), &f32, std::move(body)); + auto* func_a_ptr = func_a.get(); body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( @@ -4623,19 +4610,22 @@ create<ast::IdentifierExpression>("call_b"), create<ast::CallExpression>(create<ast::IdentifierExpression>("b"), ast::ExpressionList{}))); - ep_1->set_body(std::move(body)); - - auto ep_2 = create<ast::Function>("ep_2", std::move(params), &f32); - ep_2->add_decoration( + auto ep_1 = + create<ast::Function>("ep_1", std::move(params), &f32, std::move(body)); + ep_1->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); - auto* ep_2_ptr = ep_2.get(); + auto* ep_1_ptr = ep_1.get(); body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("call_c"), create<ast::CallExpression>(create<ast::IdentifierExpression>("c"), ast::ExpressionList{}))); - ep_2->set_body(std::move(body)); + auto ep_2 = + create<ast::Function>("ep_2", std::move(params), &f32, std::move(body)); + ep_2->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); + auto* ep_2_ptr = ep_2.get(); mod()->AddFunction(std::move(func_b)); mod()->AddFunction(std::move(func_c));
diff --git a/src/validator/validator_function_test.cc b/src/validator/validator_function_test.cc index 6ad4acd..97abf87 100644 --- a/src/validator/validator_function_test.cc +++ b/src/validator/validator_function_test.cc
@@ -45,11 +45,11 @@ ast::VariableList params; ast::type::VoidType void_type; - auto func = create<ast::Function>(Source{Source::Location{12, 34}}, "func", - std::move(params), &void_type); auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); - func->set_body(std::move(body)); + auto func = + create<ast::Function>(Source{Source::Location{12, 34}}, "func", + std::move(params), &void_type, std::move(body)); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); mod()->AddFunction(std::move(func)); @@ -65,7 +65,8 @@ ast::type::VoidType void_type; ast::VariableList params; auto func = create<ast::Function>(Source{Source::Location{12, 34}}, "func", - std::move(params), &void_type); + std::move(params), &void_type, + create<ast::BlockStatement>()); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); mod()->AddFunction(std::move(func)); @@ -84,11 +85,10 @@ ast::VariableList params; ast::type::VoidType void_type; - auto func = create<ast::Function>(Source{Source::Location{12, 34}}, "func", - std::move(params), &i32); auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); - func->set_body(std::move(body)); + auto func = create<ast::Function>(Source{Source::Location{12, 34}}, "func", + std::move(params), &i32, std::move(body)); mod()->AddFunction(std::move(func)); EXPECT_TRUE(td()->Determine()) << td()->error(); @@ -104,7 +104,8 @@ ast::type::I32Type i32; ast::VariableList params; auto func = create<ast::Function>(Source{Source::Location{12, 34}}, "func", - std::move(params), &i32); + std::move(params), &i32, + create<ast::BlockStatement>()); mod()->AddFunction(std::move(func)); EXPECT_TRUE(td()->Determine()) << td()->error(); @@ -120,10 +121,10 @@ ast::type::VoidType void_type; ast::VariableList params; - auto func = create<ast::Function>("func", std::move(params), &void_type); auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("func", std::move(params), &void_type, + std::move(body)); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); mod()->AddFunction(std::move(func)); @@ -137,14 +138,14 @@ ast::type::VoidType void_type; ast::type::I32Type i32; ast::VariableList params; - auto func = create<ast::Function>("func", std::move(params), &void_type); auto body = create<ast::BlockStatement>(); auto return_expr = create<ast::ScalarConstructorExpression>( create<ast::SintLiteral>(&i32, 2)); body->append(create<ast::ReturnStatement>(Source{Source::Location{12, 34}}, std::move(return_expr))); - func->set_body(std::move(body)); + auto func = create<ast::Function>("func", std::move(params), &void_type, + std::move(body)); mod()->AddFunction(std::move(func)); EXPECT_TRUE(td()->Determine()) << td()->error(); @@ -160,14 +161,14 @@ ast::type::I32Type i32; ast::type::F32Type f32; ast::VariableList params; - auto func = create<ast::Function>("func", std::move(params), &f32); auto body = create<ast::BlockStatement>(); auto return_expr = create<ast::ScalarConstructorExpression>( create<ast::SintLiteral>(&i32, 2)); body->append(create<ast::ReturnStatement>(Source{Source::Location{12, 34}}, std::move(return_expr))); - func->set_body(std::move(body)); + auto func = + create<ast::Function>("func", std::move(params), &f32, std::move(body)); mod()->AddFunction(std::move(func)); EXPECT_TRUE(td()->Determine()) << td()->error(); @@ -185,23 +186,23 @@ ast::type::I32Type i32; ast::VariableList params; - auto func = create<ast::Function>("func", std::move(params), &i32); auto body = create<ast::BlockStatement>(); auto return_expr = create<ast::ScalarConstructorExpression>( create<ast::SintLiteral>(&i32, 2)); body->append(create<ast::ReturnStatement>(std::move(return_expr))); - func->set_body(std::move(body)); + auto func = + create<ast::Function>("func", std::move(params), &i32, std::move(body)); ast::VariableList params_copy; - auto func_copy = create<ast::Function>(Source{Source::Location{12, 34}}, - "func", std::move(params_copy), &i32); auto body_copy = create<ast::BlockStatement>(); auto return_expr_copy = create<ast::ScalarConstructorExpression>( create<ast::SintLiteral>(&i32, 2)); body_copy->append(create<ast::ReturnStatement>(std::move(return_expr_copy))); - func_copy->set_body(std::move(body_copy)); + auto func_copy = + create<ast::Function>(Source{Source::Location{12, 34}}, "func", + std::move(params_copy), &i32, std::move(body_copy)); mod()->AddFunction(std::move(func)); mod()->AddFunction(std::move(func_copy)); @@ -221,11 +222,11 @@ Source{Source::Location{12, 34}}, create<ast::IdentifierExpression>("func"), std::move(call_params)); ast::VariableList params0; - auto func0 = create<ast::Function>("func", std::move(params0), &f32); auto body0 = create<ast::BlockStatement>(); body0->append(create<ast::CallStatement>(std::move(call_expr))); body0->append(create<ast::ReturnStatement>()); - func0->set_body(std::move(body0)); + auto func0 = + create<ast::Function>("func", std::move(params0), &f32, std::move(body0)); mod()->AddFunction(std::move(func0)); EXPECT_TRUE(td()->Determine()) << td()->error(); @@ -243,14 +244,14 @@ create<ast::IdentifierExpression>("func"), std::move(call_params)); var->set_constructor(std::move(call_expr)); ast::VariableList params0; - auto func0 = create<ast::Function>("func", std::move(params0), &i32); auto body0 = create<ast::BlockStatement>(); body0->append(create<ast::VariableDeclStatement>(std::move(var))); auto return_expr = create<ast::ScalarConstructorExpression>( create<ast::SintLiteral>(&i32, 2)); body0->append(create<ast::ReturnStatement>(std::move(return_expr))); - func0->set_body(std::move(body0)); + auto func0 = + create<ast::Function>("func", std::move(params0), &i32, std::move(body0)); mod()->AddFunction(std::move(func0)); EXPECT_TRUE(td()->Determine()) << td()->error(); @@ -263,14 +264,14 @@ // fn vtx_main() -> i32 { return 0; } ast::type::I32Type i32; ast::VariableList params; - auto func = create<ast::Function>(Source{Source::Location{12, 34}}, - "vtx_main", std::move(params), &i32); auto return_expr = create<ast::ScalarConstructorExpression>( create<ast::SintLiteral>(&i32, 0)); auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>(std::move(return_expr))); - func->set_body(std::move(body)); + auto func = + create<ast::Function>(Source{Source::Location{12, 34}}, "vtx_main", + std::move(params), &i32, std::move(body)); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); @@ -288,11 +289,11 @@ ast::type::VoidType void_type; ast::VariableList params; params.push_back(create<ast::Variable>("a", ast::StorageClass::kNone, &i32)); - auto func = create<ast::Function>(Source{Source::Location{12, 34}}, - "vtx_func", std::move(params), &void_type); auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = + create<ast::Function>(Source{Source::Location{12, 34}}, "vtx_func", + std::move(params), &void_type, std::move(body)); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); @@ -310,11 +311,11 @@ // fn main() -> void { return; } ast::type::VoidType void_type; ast::VariableList params; - auto func = create<ast::Function>(Source{Source::Location{12, 34}}, "main", - std::move(params), &void_type); auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = + create<ast::Function>(Source{Source::Location{12, 34}}, "main", + std::move(params), &void_type, std::move(body)); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); func->add_decoration( @@ -332,10 +333,10 @@ // fn vtx_func() -> void { return; } ast::type::VoidType void_type; ast::VariableList params; - auto func = create<ast::Function>("vtx_func", std::move(params), &void_type); auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("vtx_func", std::move(params), &void_type, + std::move(body)); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); mod()->AddFunction(std::move(func)); @@ -348,10 +349,10 @@ // fn vtx_func() -> void { return; } ast::type::VoidType void_type; ast::VariableList params; - auto func = create<ast::Function>("vtx_func", std::move(params), &void_type); auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("vtx_func", std::move(params), &void_type, + std::move(body)); mod()->AddFunction(std::move(func)); EXPECT_TRUE(td()->Determine()) << td()->error();
diff --git a/src/validator/validator_test.cc b/src/validator/validator_test.cc index a6bed90..4e955f9 100644 --- a/src/validator/validator_test.cc +++ b/src/validator/validator_test.cc
@@ -297,12 +297,12 @@ create<ast::FloatLiteral>(&f32, 3.14f)); ast::VariableList params; - auto func = create<ast::Function>("my_func", std::move(params), &f32); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( Source{Source::Location{12, 34}}, std::move(lhs), std::move(rhs))); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("my_func", std::move(params), &f32, + std::move(body)); mod()->AddFunction(std::move(func)); EXPECT_FALSE(v()->Validate(mod())); @@ -329,13 +329,13 @@ create<ast::FloatLiteral>(&f32, 3.14f)); ast::VariableList params; - auto func = create<ast::Function>("my_func", std::move(params), &void_type); auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( Source{Source::Location{12, 34}}, std::move(lhs), std::move(rhs))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("my_func", std::move(params), &void_type, + std::move(body)); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); mod()->AddFunction(std::move(func)); @@ -507,11 +507,11 @@ var->set_constructor(create<ast::ScalarConstructorExpression>( create<ast::FloatLiteral>(&f32, 2.0))); ast::VariableList params; - auto func = create<ast::Function>("my_func", std::move(params), &void_type); auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>( Source{Source::Location{12, 34}}, std::move(var))); - func->set_body(std::move(body)); + auto func = create<ast::Function>("my_func", std::move(params), &void_type, + std::move(body)); auto* func_ptr = func.get(); mod()->AddFunction(std::move(func)); @@ -538,12 +538,12 @@ create<ast::FloatLiteral>(&f32, 0.1))); ast::VariableList params; - auto func = create<ast::Function>("my_func", std::move(params), &void_type); auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::VariableDeclStatement>( Source{Source::Location{12, 34}}, std::move(var_a_float))); - func->set_body(std::move(body)); + auto func = create<ast::Function>("my_func", std::move(params), &void_type, + std::move(body)); auto* func_ptr = func.get(); mod()->AddFunction(std::move(func)); @@ -631,20 +631,20 @@ create<ast::FloatLiteral>(&f32, 1.0))); ast::VariableList params0; - auto func0 = create<ast::Function>("func0", std::move(params0), &void_type); auto body0 = create<ast::BlockStatement>(); body0->append(create<ast::VariableDeclStatement>( Source{Source::Location{12, 34}}, std::move(var0))); body0->append(create<ast::ReturnStatement>()); - func0->set_body(std::move(body0)); + auto func0 = create<ast::Function>("func0", std::move(params0), &void_type, + std::move(body0)); ast::VariableList params1; - auto func1 = create<ast::Function>("func1", std::move(params1), &void_type); auto body1 = create<ast::BlockStatement>(); body1->append(create<ast::VariableDeclStatement>( Source{Source::Location{13, 34}}, std::move(var1))); body1->append(create<ast::ReturnStatement>()); - func1->set_body(std::move(body1)); + auto func1 = create<ast::Function>("func1", std::move(params1), &void_type, + std::move(body1)); func1->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{}));
diff --git a/src/writer/hlsl/generator_impl_binary_test.cc b/src/writer/hlsl/generator_impl_binary_test.cc index c201f47..32918bd 100644 --- a/src/writer/hlsl/generator_impl_binary_test.cc +++ b/src/writer/hlsl/generator_impl_binary_test.cc
@@ -326,7 +326,8 @@ ast::type::VoidType void_type; - auto func = create<ast::Function>("foo", ast::VariableList{}, &void_type); + auto func = create<ast::Function>("foo", ast::VariableList{}, &void_type, + create<ast::BlockStatement>()); mod.AddFunction(std::move(func)); ast::ExpressionList params;
diff --git a/src/writer/hlsl/generator_impl_call_test.cc b/src/writer/hlsl/generator_impl_call_test.cc index 6a50881..afac31a 100644 --- a/src/writer/hlsl/generator_impl_call_test.cc +++ b/src/writer/hlsl/generator_impl_call_test.cc
@@ -35,7 +35,8 @@ auto id = create<ast::IdentifierExpression>("my_func"); ast::CallExpression call(std::move(id), {}); - auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type); + auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type, + create<ast::BlockStatement>()); mod.AddFunction(std::move(func)); ASSERT_TRUE(gen.EmitExpression(pre, out, &call)) << gen.error(); @@ -51,7 +52,8 @@ params.push_back(create<ast::IdentifierExpression>("param2")); ast::CallExpression call(std::move(id), std::move(params)); - auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type); + auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type, + create<ast::BlockStatement>()); mod.AddFunction(std::move(func)); ASSERT_TRUE(gen.EmitExpression(pre, out, &call)) << gen.error(); @@ -68,7 +70,8 @@ ast::CallStatement call( create<ast::CallExpression>(std::move(id), std::move(params))); - auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type); + auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type, + create<ast::BlockStatement>()); mod.AddFunction(std::move(func)); gen.increment_indent(); ASSERT_TRUE(gen.EmitStatement(out, &call)) << gen.error();
diff --git a/src/writer/hlsl/generator_impl_function_entry_point_data_test.cc b/src/writer/hlsl/generator_impl_function_entry_point_data_test.cc index 1803fd0..594442f 100644 --- a/src/writer/hlsl/generator_impl_function_entry_point_data_test.cc +++ b/src/writer/hlsl/generator_impl_function_entry_point_data_test.cc
@@ -72,11 +72,6 @@ mod.AddGlobalVariable(std::move(bar_var)); ast::VariableList params; - auto func = create<ast::Function>("vtx_main", std::move(params), &f32); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); - auto* func_ptr = func.get(); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("foo"), @@ -84,7 +79,12 @@ body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("bar"), create<ast::IdentifierExpression>("bar"))); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("vtx_main", std::move(params), &f32, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); + auto* func_ptr = func.get(); mod.AddFunction(std::move(func)); @@ -132,10 +132,6 @@ mod.AddGlobalVariable(std::move(bar_var)); ast::VariableList params; - auto func = create<ast::Function>("vtx_main", std::move(params), &f32); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); - auto* func_ptr = func.get(); auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( @@ -144,7 +140,12 @@ body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("bar"), create<ast::IdentifierExpression>("bar"))); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("vtx_main", std::move(params), &f32, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); + auto* func_ptr = func.get(); mod.AddFunction(std::move(func)); @@ -192,10 +193,6 @@ mod.AddGlobalVariable(std::move(bar_var)); ast::VariableList params; - auto func = create<ast::Function>("main", std::move(params), &f32); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); - auto* func_ptr = func.get(); auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( @@ -204,7 +201,12 @@ body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("bar"), create<ast::IdentifierExpression>("bar"))); - func->set_body(std::move(body)); + + auto func = + create<ast::Function>("main", std::move(params), &f32, std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); + auto* func_ptr = func.get(); mod.AddFunction(std::move(func)); @@ -252,11 +254,6 @@ mod.AddGlobalVariable(std::move(bar_var)); ast::VariableList params; - auto func = create<ast::Function>("main", std::move(params), &f32); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto* func_ptr = func.get(); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("foo"), @@ -264,7 +261,12 @@ body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("bar"), create<ast::IdentifierExpression>("bar"))); - func->set_body(std::move(body)); + + auto func = + create<ast::Function>("main", std::move(params), &f32, std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); + auto* func_ptr = func.get(); mod.AddFunction(std::move(func)); @@ -309,11 +311,6 @@ mod.AddGlobalVariable(std::move(bar_var)); ast::VariableList params; - auto func = create<ast::Function>("main", std::move(params), &f32); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); - auto* func_ptr = func.get(); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("foo"), @@ -321,7 +318,12 @@ body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("bar"), create<ast::IdentifierExpression>("bar"))); - func->set_body(std::move(body)); + + auto func = + create<ast::Function>("main", std::move(params), &f32, std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); + auto* func_ptr = func.get(); mod.AddFunction(std::move(func)); @@ -361,11 +363,6 @@ mod.AddGlobalVariable(std::move(bar_var)); ast::VariableList params; - auto func = create<ast::Function>("main", std::move(params), &f32); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); - auto* func_ptr = func.get(); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("foo"), @@ -373,7 +370,12 @@ body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("bar"), create<ast::IdentifierExpression>("bar"))); - func->set_body(std::move(body)); + + auto func = + create<ast::Function>("main", std::move(params), &f32, std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); + auto* func_ptr = func.get(); mod.AddFunction(std::move(func)); @@ -422,18 +424,18 @@ mod.AddGlobalVariable(std::move(depth_var)); ast::VariableList params; - auto func = create<ast::Function>("main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto* func_ptr = func.get(); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("depth"), create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("coord"), create<ast::IdentifierExpression>("x")))); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); + auto* func_ptr = func.get(); mod.AddFunction(std::move(func));
diff --git a/src/writer/hlsl/generator_impl_function_test.cc b/src/writer/hlsl/generator_impl_function_test.cc index a4e9df3..dd0c106 100644 --- a/src/writer/hlsl/generator_impl_function_test.cc +++ b/src/writer/hlsl/generator_impl_function_test.cc
@@ -57,11 +57,10 @@ TEST_F(HlslGeneratorImplTest_Function, Emit_Function) { ast::type::VoidType void_type; - auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type); - auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type, + std::move(body)); mod.AddFunction(std::move(func)); gen.increment_indent(); @@ -77,12 +76,10 @@ TEST_F(HlslGeneratorImplTest_Function, Emit_Function_Name_Collision) { ast::type::VoidType void_type; - auto func = - create<ast::Function>("GeometryShader", ast::VariableList{}, &void_type); - auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("GeometryShader", ast::VariableList{}, + &void_type, std::move(body)); mod.AddFunction(std::move(func)); gen.increment_indent(); @@ -104,11 +101,11 @@ params.push_back(create<ast::Variable>("b", ast::StorageClass::kNone, &i32)); ast::type::VoidType void_type; - auto func = create<ast::Function>("my_func", std::move(params), &void_type); auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("my_func", std::move(params), &void_type, + std::move(body)); mod.AddFunction(std::move(func)); gen.increment_indent(); @@ -145,16 +142,15 @@ mod.AddGlobalVariable(std::move(bar_var)); ast::VariableList params; - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("bar"), create<ast::IdentifierExpression>("foo"))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -204,10 +200,6 @@ mod.AddGlobalVariable(std::move(depth_var)); ast::VariableList params; - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("depth"), @@ -215,7 +207,10 @@ create<ast::IdentifierExpression>("coord"), create<ast::IdentifierExpression>("x")))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -256,10 +251,6 @@ mod.AddGlobalVariable(std::move(coord_var)); ast::VariableList params; - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto var = create<ast::Variable>("v", ast::StorageClass::kFunction, &f32); var->set_constructor(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("coord"), @@ -268,7 +259,10 @@ auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -315,10 +309,6 @@ mod.AddGlobalVariable(std::move(coord_var)); ast::VariableList params; - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto var = create<ast::Variable>("v", ast::StorageClass::kFunction, &f32); var->set_constructor(create<ast::MemberAccessorExpression>( create<ast::MemberAccessorExpression>( @@ -329,7 +319,10 @@ auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -382,10 +375,6 @@ mod.AddGlobalVariable(std::move(coord_var)); ast::VariableList params; - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto var = create<ast::Variable>("v", ast::StorageClass::kFunction, &f32); var->set_constructor(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("coord"), @@ -394,7 +383,10 @@ auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -443,10 +435,6 @@ mod.AddGlobalVariable(std::move(coord_var)); ast::VariableList params; - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto var = create<ast::Variable>("v", ast::StorageClass::kFunction, &f32); var->set_constructor(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("coord"), @@ -455,7 +443,10 @@ auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -505,10 +496,6 @@ mod.AddGlobalVariable(std::move(coord_var)); ast::VariableList params; - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto assign = create<ast::AssignmentStatement>( create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("coord"), @@ -519,7 +506,10 @@ auto body = create<ast::BlockStatement>(); body->append(std::move(assign)); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -569,7 +559,6 @@ ast::VariableList params; params.push_back( create<ast::Variable>("param", ast::StorageClass::kFunction, &f32)); - auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32); auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( @@ -580,14 +569,11 @@ create<ast::IdentifierExpression>("param"))); body->append( create<ast::ReturnStatement>(create<ast::IdentifierExpression>("foo"))); - sub_func->set_body(std::move(body)); + auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32, + std::move(body)); mod.AddFunction(std::move(sub_func)); - auto func_1 = create<ast::Function>("ep_1", std::move(params), &void_type); - func_1->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - ast::ExpressionList expr; expr.push_back(create<ast::ScalarConstructorExpression>( create<ast::FloatLiteral>(&f32, 1.0f))); @@ -598,7 +584,10 @@ create<ast::CallExpression>(create<ast::IdentifierExpression>("sub_func"), std::move(expr)))); body->append(create<ast::ReturnStatement>()); - func_1->set_body(std::move(body)); + auto func_1 = create<ast::Function>("ep_1", std::move(params), &void_type, + std::move(body)); + func_1->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func_1)); @@ -649,19 +638,15 @@ ast::VariableList params; params.push_back( create<ast::Variable>("param", ast::StorageClass::kFunction, &f32)); - auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32); auto body = create<ast::BlockStatement>(); body->append( create<ast::ReturnStatement>(create<ast::IdentifierExpression>("param"))); - sub_func->set_body(std::move(body)); + auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32, + std::move(body)); mod.AddFunction(std::move(sub_func)); - auto func_1 = create<ast::Function>("ep_1", std::move(params), &void_type); - func_1->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - ast::ExpressionList expr; expr.push_back(create<ast::ScalarConstructorExpression>( create<ast::FloatLiteral>(&f32, 1.0f))); @@ -672,7 +657,10 @@ create<ast::CallExpression>(create<ast::IdentifierExpression>("sub_func"), std::move(expr)))); body->append(create<ast::ReturnStatement>()); - func_1->set_body(std::move(body)); + auto func_1 = create<ast::Function>("ep_1", std::move(params), &void_type, + std::move(body)); + func_1->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func_1)); @@ -725,7 +713,6 @@ ast::VariableList params; params.push_back( create<ast::Variable>("param", ast::StorageClass::kFunction, &f32)); - auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32); auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( @@ -735,14 +722,11 @@ create<ast::IdentifierExpression>("x")))); body->append( create<ast::ReturnStatement>(create<ast::IdentifierExpression>("param"))); - sub_func->set_body(std::move(body)); + auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32, + std::move(body)); mod.AddFunction(std::move(sub_func)); - auto func_1 = create<ast::Function>("ep_1", std::move(params), &void_type); - func_1->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - ast::ExpressionList expr; expr.push_back(create<ast::ScalarConstructorExpression>( create<ast::FloatLiteral>(&f32, 1.0f))); @@ -753,7 +737,10 @@ create<ast::CallExpression>(create<ast::IdentifierExpression>("sub_func"), std::move(expr)))); body->append(create<ast::ReturnStatement>()); - func_1->set_body(std::move(body)); + auto func_1 = create<ast::Function>("ep_1", std::move(params), &void_type, + std::move(body)); + func_1->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func_1)); @@ -802,21 +789,17 @@ ast::VariableList params; params.push_back( create<ast::Variable>("param", ast::StorageClass::kFunction, &f32)); - auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32); auto body = create<ast::BlockStatement>(); body->append( create<ast::ReturnStatement>(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("coord"), create<ast::IdentifierExpression>("x")))); - sub_func->set_body(std::move(body)); + auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32, + std::move(body)); mod.AddFunction(std::move(sub_func)); - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - ast::ExpressionList expr; expr.push_back(create<ast::ScalarConstructorExpression>( create<ast::FloatLiteral>(&f32, 1.0f))); @@ -828,7 +811,10 @@ body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -871,21 +857,17 @@ ast::VariableList params; params.push_back( create<ast::Variable>("param", ast::StorageClass::kFunction, &f32)); - auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32); auto body = create<ast::BlockStatement>(); body->append( create<ast::ReturnStatement>(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("coord"), create<ast::IdentifierExpression>("x")))); - sub_func->set_body(std::move(body)); + auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32, + std::move(body)); mod.AddFunction(std::move(sub_func)); - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - ast::ExpressionList expr; expr.push_back(create<ast::ScalarConstructorExpression>( create<ast::FloatLiteral>(&f32, 1.0f))); @@ -897,7 +879,10 @@ body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -933,10 +918,6 @@ mod.AddGlobalVariable(std::move(bar_var)); ast::VariableList params; - auto func_1 = create<ast::Function>("ep_1", std::move(params), &void_type); - func_1->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("bar"), @@ -955,7 +936,10 @@ std::move(list))); body->append(create<ast::ReturnStatement>()); - func_1->set_body(std::move(body)); + auto func_1 = create<ast::Function>("ep_1", std::move(params), &void_type, + std::move(body)); + func_1->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func_1)); @@ -981,8 +965,8 @@ Emit_FunctionDecoration_EntryPoint_WithNameCollision) { ast::type::VoidType void_type; - auto func = - create<ast::Function>("GeometryShader", ast::VariableList{}, &void_type); + auto func = create<ast::Function>("GeometryShader", ast::VariableList{}, + &void_type, create<ast::BlockStatement>()); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); @@ -1000,13 +984,12 @@ ast::type::VoidType void_type; ast::VariableList params; - auto func = create<ast::Function>("main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); - auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); mod.AddFunction(std::move(func)); @@ -1025,15 +1008,14 @@ ast::type::VoidType void_type; ast::VariableList params; - auto func = create<ast::Function>("main", std::move(params), &void_type); + auto body = create<ast::BlockStatement>(); + body->append(create<ast::ReturnStatement>()); + auto func = create<ast::Function>("main", std::move(params), &void_type, + std::move(body)); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); func->add_decoration(create<ast::WorkgroupDecoration>(2u, 4u, 6u, Source{})); - auto body = create<ast::BlockStatement>(); - body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); - mod.AddFunction(std::move(func)); ASSERT_TRUE(td.Determine()) << td.error(); @@ -1054,11 +1036,11 @@ params.push_back(create<ast::Variable>("a", ast::StorageClass::kNone, &ary)); ast::type::VoidType void_type; - auto func = create<ast::Function>("my_func", std::move(params), &void_type); auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("my_func", std::move(params), &void_type, + std::move(body)); mod.AddFunction(std::move(func)); gen.increment_indent(); @@ -1119,10 +1101,6 @@ { ast::VariableList params; - auto func = create<ast::Function>("a", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); - auto var = create<ast::Variable>("v", ast::StorageClass::kFunction, &f32); var->set_constructor(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("data"), @@ -1131,17 +1109,16 @@ auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("a", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); mod.AddFunction(std::move(func)); } { ast::VariableList params; - auto func = create<ast::Function>("b", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); - auto var = create<ast::Variable>("v", ast::StorageClass::kFunction, &f32); var->set_constructor(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("data"), @@ -1150,7 +1127,10 @@ auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("b", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); mod.AddFunction(std::move(func)); }
diff --git a/src/writer/hlsl/generator_impl_test.cc b/src/writer/hlsl/generator_impl_test.cc index a92a5ed..9e09772 100644 --- a/src/writer/hlsl/generator_impl_test.cc +++ b/src/writer/hlsl/generator_impl_test.cc
@@ -29,7 +29,8 @@ TEST_F(HlslGeneratorImplTest, Generate) { ast::type::VoidType void_type; - auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type); + auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type, + create<ast::BlockStatement>()); mod.AddFunction(std::move(func)); ASSERT_TRUE(gen.Generate(out)) << gen.error();
diff --git a/src/writer/msl/generator_impl_call_test.cc b/src/writer/msl/generator_impl_call_test.cc index e01f87b..6a6b07c 100644 --- a/src/writer/msl/generator_impl_call_test.cc +++ b/src/writer/msl/generator_impl_call_test.cc
@@ -37,7 +37,8 @@ auto id = create<ast::IdentifierExpression>("my_func"); ast::CallExpression call(std::move(id), {}); - auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type); + auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type, + create<ast::BlockStatement>()); mod.AddFunction(std::move(func)); ASSERT_TRUE(gen.EmitExpression(&call)) << gen.error(); @@ -53,7 +54,8 @@ params.push_back(create<ast::IdentifierExpression>("param2")); ast::CallExpression call(std::move(id), std::move(params)); - auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type); + auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type, + create<ast::BlockStatement>()); mod.AddFunction(std::move(func)); ASSERT_TRUE(gen.EmitExpression(&call)) << gen.error(); @@ -70,7 +72,8 @@ ast::CallStatement call( create<ast::CallExpression>(std::move(id), std::move(params))); - auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type); + auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type, + create<ast::BlockStatement>()); mod.AddFunction(std::move(func)); gen.increment_indent();
diff --git a/src/writer/msl/generator_impl_function_entry_point_data_test.cc b/src/writer/msl/generator_impl_function_entry_point_data_test.cc index 4a0a400..3bf391f 100644 --- a/src/writer/msl/generator_impl_function_entry_point_data_test.cc +++ b/src/writer/msl/generator_impl_function_entry_point_data_test.cc
@@ -71,11 +71,6 @@ mod.AddGlobalVariable(std::move(bar_var)); ast::VariableList params; - auto func = create<ast::Function>("vtx_main", std::move(params), &f32); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); - auto* func_ptr = func.get(); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("foo"), @@ -83,7 +78,12 @@ body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("bar"), create<ast::IdentifierExpression>("bar"))); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("vtx_main", std::move(params), &f32, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); + auto* func_ptr = func.get(); mod.AddFunction(std::move(func)); @@ -129,11 +129,6 @@ mod.AddGlobalVariable(std::move(bar_var)); ast::VariableList params; - auto func = create<ast::Function>("vtx_main", std::move(params), &f32); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); - auto* func_ptr = func.get(); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("foo"), @@ -141,7 +136,12 @@ body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("bar"), create<ast::IdentifierExpression>("bar"))); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("vtx_main", std::move(params), &f32, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); + auto* func_ptr = func.get(); mod.AddFunction(std::move(func)); @@ -187,11 +187,6 @@ mod.AddGlobalVariable(std::move(bar_var)); ast::VariableList params; - auto func = create<ast::Function>("main", std::move(params), &f32); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto* func_ptr = func.get(); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("foo"), @@ -199,7 +194,11 @@ body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("bar"), create<ast::IdentifierExpression>("bar"))); - func->set_body(std::move(body)); + auto func = + create<ast::Function>("main", std::move(params), &f32, std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); + auto* func_ptr = func.get(); mod.AddFunction(std::move(func)); @@ -245,11 +244,6 @@ mod.AddGlobalVariable(std::move(bar_var)); ast::VariableList params; - auto func = create<ast::Function>("main", std::move(params), &f32); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto* func_ptr = func.get(); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("foo"), @@ -257,7 +251,12 @@ body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("bar"), create<ast::IdentifierExpression>("bar"))); - func->set_body(std::move(body)); + + auto func = + create<ast::Function>("main", std::move(params), &f32, std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); + auto* func_ptr = func.get(); mod.AddFunction(std::move(func)); @@ -300,11 +299,6 @@ mod.AddGlobalVariable(std::move(bar_var)); ast::VariableList params; - auto func = create<ast::Function>("main", std::move(params), &f32); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); - auto* func_ptr = func.get(); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("foo"), @@ -312,7 +306,12 @@ body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("bar"), create<ast::IdentifierExpression>("bar"))); - func->set_body(std::move(body)); + + auto func = + create<ast::Function>("main", std::move(params), &f32, std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); + auto* func_ptr = func.get(); mod.AddFunction(std::move(func)); @@ -350,11 +349,6 @@ mod.AddGlobalVariable(std::move(bar_var)); ast::VariableList params; - auto func = create<ast::Function>("main", std::move(params), &f32); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); - auto* func_ptr = func.get(); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("foo"), @@ -362,7 +356,12 @@ body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("bar"), create<ast::IdentifierExpression>("bar"))); - func->set_body(std::move(body)); + + auto func = + create<ast::Function>("main", std::move(params), &f32, std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); + auto* func_ptr = func.get(); mod.AddFunction(std::move(func)); @@ -408,10 +407,6 @@ mod.AddGlobalVariable(std::move(depth_var)); ast::VariableList params; - auto func = create<ast::Function>("main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto* func_ptr = func.get(); auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( @@ -419,7 +414,12 @@ create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("coord"), create<ast::IdentifierExpression>("x")))); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); + auto* func_ptr = func.get(); mod.AddFunction(std::move(func));
diff --git a/src/writer/msl/generator_impl_function_test.cc b/src/writer/msl/generator_impl_function_test.cc index 093e952..6f13cf9 100644 --- a/src/writer/msl/generator_impl_function_test.cc +++ b/src/writer/msl/generator_impl_function_test.cc
@@ -60,11 +60,10 @@ TEST_F(MslGeneratorImplTest, Emit_Function) { ast::type::VoidType void_type; - auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type); - auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type, + std::move(body)); mod.AddFunction(std::move(func)); gen.increment_indent(); @@ -82,11 +81,10 @@ TEST_F(MslGeneratorImplTest, Emit_Function_Name_Collision) { ast::type::VoidType void_type; - auto func = create<ast::Function>("main", ast::VariableList{}, &void_type); - auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("main", ast::VariableList{}, &void_type, + std::move(body)); mod.AddFunction(std::move(func)); gen.increment_indent(); @@ -110,11 +108,11 @@ params.push_back(create<ast::Variable>("b", ast::StorageClass::kNone, &i32)); ast::type::VoidType void_type; - auto func = create<ast::Function>("my_func", std::move(params), &void_type); auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("my_func", std::move(params), &void_type, + std::move(body)); mod.AddFunction(std::move(func)); gen.increment_indent(); @@ -152,16 +150,16 @@ mod.AddGlobalVariable(std::move(bar_var)); ast::VariableList params; - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("bar"), create<ast::IdentifierExpression>("foo"))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -214,10 +212,6 @@ mod.AddGlobalVariable(std::move(depth_var)); ast::VariableList params; - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("depth"), @@ -225,7 +219,11 @@ create<ast::IdentifierExpression>("coord"), create<ast::IdentifierExpression>("x")))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -265,10 +263,6 @@ mod.AddGlobalVariable(std::move(coord_var)); ast::VariableList params; - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto var = create<ast::Variable>("v", ast::StorageClass::kFunction, &f32); var->set_constructor(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("coord"), @@ -277,7 +271,11 @@ auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -330,10 +328,6 @@ mod.AddGlobalVariable(std::move(coord_var)); ast::VariableList params; - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto var = create<ast::Variable>("v", ast::StorageClass::kFunction, &f32); var->set_constructor(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("coord"), @@ -342,7 +336,11 @@ auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -399,9 +397,6 @@ mod.AddGlobalVariable(std::move(coord_var)); ast::VariableList params; - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); auto var = create<ast::Variable>("v", ast::StorageClass::kFunction, &f32); var->set_constructor(create<ast::MemberAccessorExpression>( @@ -411,7 +406,11 @@ auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -467,7 +466,6 @@ ast::VariableList params; params.push_back( create<ast::Variable>("param", ast::StorageClass::kFunction, &f32)); - auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32); auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( @@ -478,14 +476,11 @@ create<ast::IdentifierExpression>("param"))); body->append( create<ast::ReturnStatement>(create<ast::IdentifierExpression>("foo"))); - sub_func->set_body(std::move(body)); + auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32, + std::move(body)); mod.AddFunction(std::move(sub_func)); - auto func_1 = create<ast::Function>("ep_1", std::move(params), &void_type); - func_1->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - ast::ExpressionList expr; expr.push_back(create<ast::ScalarConstructorExpression>( create<ast::FloatLiteral>(&f32, 1.0f))); @@ -496,7 +491,10 @@ create<ast::CallExpression>(create<ast::IdentifierExpression>("sub_func"), std::move(expr)))); body->append(create<ast::ReturnStatement>()); - func_1->set_body(std::move(body)); + auto func_1 = create<ast::Function>("ep_1", std::move(params), &void_type, + std::move(body)); + func_1->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func_1)); @@ -550,19 +548,15 @@ ast::VariableList params; params.push_back( create<ast::Variable>("param", ast::StorageClass::kFunction, &f32)); - auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32); auto body = create<ast::BlockStatement>(); body->append( create<ast::ReturnStatement>(create<ast::IdentifierExpression>("param"))); - sub_func->set_body(std::move(body)); + auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32, + std::move(body)); mod.AddFunction(std::move(sub_func)); - auto func_1 = create<ast::Function>("ep_1", std::move(params), &void_type); - func_1->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - ast::ExpressionList expr; expr.push_back(create<ast::ScalarConstructorExpression>( create<ast::FloatLiteral>(&f32, 1.0f))); @@ -573,7 +567,11 @@ create<ast::CallExpression>(create<ast::IdentifierExpression>("sub_func"), std::move(expr)))); body->append(create<ast::ReturnStatement>()); - func_1->set_body(std::move(body)); + + auto func_1 = create<ast::Function>("ep_1", std::move(params), &void_type, + std::move(body)); + func_1->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func_1)); @@ -629,7 +627,6 @@ ast::VariableList params; params.push_back( create<ast::Variable>("param", ast::StorageClass::kFunction, &f32)); - auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32); auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( @@ -639,14 +636,11 @@ create<ast::IdentifierExpression>("x")))); body->append( create<ast::ReturnStatement>(create<ast::IdentifierExpression>("param"))); - sub_func->set_body(std::move(body)); + auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32, + std::move(body)); mod.AddFunction(std::move(sub_func)); - auto func_1 = create<ast::Function>("ep_1", std::move(params), &void_type); - func_1->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - ast::ExpressionList expr; expr.push_back(create<ast::ScalarConstructorExpression>( create<ast::FloatLiteral>(&f32, 1.0f))); @@ -657,7 +651,10 @@ create<ast::CallExpression>(create<ast::IdentifierExpression>("sub_func"), std::move(expr)))); body->append(create<ast::ReturnStatement>()); - func_1->set_body(std::move(body)); + auto func_1 = create<ast::Function>("ep_1", std::move(params), &void_type, + std::move(body)); + func_1->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func_1)); @@ -704,21 +701,17 @@ ast::VariableList params; params.push_back( create<ast::Variable>("param", ast::StorageClass::kFunction, &f32)); - auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32); auto body = create<ast::BlockStatement>(); body->append( create<ast::ReturnStatement>(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("coord"), create<ast::IdentifierExpression>("x")))); - sub_func->set_body(std::move(body)); + auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32, + std::move(body)); mod.AddFunction(std::move(sub_func)); - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - ast::ExpressionList expr; expr.push_back(create<ast::ScalarConstructorExpression>( create<ast::FloatLiteral>(&f32, 1.0f))); @@ -730,7 +723,11 @@ body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -787,21 +784,17 @@ ast::VariableList params; params.push_back( create<ast::Variable>("param", ast::StorageClass::kFunction, &f32)); - auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32); auto body = create<ast::BlockStatement>(); body->append( create<ast::ReturnStatement>(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("coord"), create<ast::IdentifierExpression>("b")))); - sub_func->set_body(std::move(body)); + auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32, + std::move(body)); mod.AddFunction(std::move(sub_func)); - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - ast::ExpressionList expr; expr.push_back(create<ast::ScalarConstructorExpression>( create<ast::FloatLiteral>(&f32, 1.0f))); @@ -813,7 +806,11 @@ body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -876,21 +873,17 @@ ast::VariableList params; params.push_back( create<ast::Variable>("param", ast::StorageClass::kFunction, &f32)); - auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32); auto body = create<ast::BlockStatement>(); body->append( create<ast::ReturnStatement>(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("coord"), create<ast::IdentifierExpression>("b")))); - sub_func->set_body(std::move(body)); + auto sub_func = create<ast::Function>("sub_func", std::move(params), &f32, + std::move(body)); mod.AddFunction(std::move(sub_func)); - auto func = create<ast::Function>("frag_main", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - ast::ExpressionList expr; expr.push_back(create<ast::ScalarConstructorExpression>( create<ast::FloatLiteral>(&f32, 1.0f))); @@ -902,7 +895,11 @@ body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("frag_main", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func)); @@ -944,10 +941,6 @@ mod.AddGlobalVariable(std::move(bar_var)); ast::VariableList params; - auto func_1 = create<ast::Function>("ep_1", std::move(params), &void_type); - func_1->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - auto body = create<ast::BlockStatement>(); body->append(create<ast::AssignmentStatement>( create<ast::IdentifierExpression>("bar"), @@ -966,7 +959,11 @@ std::move(list))); body->append(create<ast::ReturnStatement>()); - func_1->set_body(std::move(body)); + + auto func_1 = create<ast::Function>("ep_1", std::move(params), &void_type, + std::move(body)); + func_1->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod.AddFunction(std::move(func_1)); @@ -994,7 +991,8 @@ Emit_FunctionDecoration_EntryPoint_WithNameCollision) { ast::type::VoidType void_type; - auto func = create<ast::Function>("main", ast::VariableList{}, &void_type); + auto func = create<ast::Function>("main", ast::VariableList{}, &void_type, + create<ast::BlockStatement>()); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); @@ -1017,11 +1015,11 @@ params.push_back(create<ast::Variable>("a", ast::StorageClass::kNone, &ary)); ast::type::VoidType void_type; - auto func = create<ast::Function>("my_func", std::move(params), &void_type); auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + auto func = create<ast::Function>("my_func", std::move(params), &void_type, + std::move(body)); mod.AddFunction(std::move(func)); @@ -1086,10 +1084,6 @@ { ast::VariableList params; - auto func = create<ast::Function>("a", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); - auto var = create<ast::Variable>("v", ast::StorageClass::kFunction, &f32); var->set_constructor(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("data"), @@ -1098,17 +1092,17 @@ auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("a", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); mod.AddFunction(std::move(func)); } { ast::VariableList params; - auto func = create<ast::Function>("b", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); - auto var = create<ast::Variable>("v", ast::StorageClass::kFunction, &f32); var->set_constructor(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("data"), @@ -1117,7 +1111,11 @@ auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("b", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); mod.AddFunction(std::move(func)); }
diff --git a/src/writer/msl/generator_impl_test.cc b/src/writer/msl/generator_impl_test.cc index 7c70ede..1da1144 100644 --- a/src/writer/msl/generator_impl_test.cc +++ b/src/writer/msl/generator_impl_test.cc
@@ -50,7 +50,8 @@ TEST_F(MslGeneratorImplTest, Generate) { ast::type::VoidType void_type; - auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type); + auto func = create<ast::Function>("my_func", ast::VariableList{}, &void_type, + create<ast::BlockStatement>()); func->add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); mod.AddFunction(std::move(func));
diff --git a/src/writer/spirv/builder_call_test.cc b/src/writer/spirv/builder_call_test.cc index 5bcadc5..a7afb76 100644 --- a/src/writer/spirv/builder_call_test.cc +++ b/src/writer/spirv/builder_call_test.cc
@@ -49,15 +49,13 @@ func_params.push_back( create<ast::Variable>("b", ast::StorageClass::kFunction, &f32)); - ast::Function a_func("a_func", std::move(func_params), &f32); - auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>(create<ast::BinaryExpression>( ast::BinaryOp::kAdd, create<ast::IdentifierExpression>("a"), create<ast::IdentifierExpression>("b")))); - a_func.set_body(std::move(body)); + ast::Function a_func("a_func", std::move(func_params), &f32, std::move(body)); - ast::Function func("main", {}, &void_type); + ast::Function func("main", {}, &void_type, create<ast::BlockStatement>()); ast::ExpressionList call_params; call_params.push_back(create<ast::ScalarConstructorExpression>( @@ -111,15 +109,15 @@ func_params.push_back( create<ast::Variable>("b", ast::StorageClass::kFunction, &f32)); - ast::Function a_func("a_func", std::move(func_params), &void_type); - auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>(create<ast::BinaryExpression>( ast::BinaryOp::kAdd, create<ast::IdentifierExpression>("a"), create<ast::IdentifierExpression>("b")))); - a_func.set_body(std::move(body)); - ast::Function func("main", {}, &void_type); + ast::Function a_func("a_func", std::move(func_params), &void_type, + std::move(body)); + + ast::Function func("main", {}, &void_type, create<ast::BlockStatement>()); ast::ExpressionList call_params; call_params.push_back(create<ast::ScalarConstructorExpression>(
diff --git a/src/writer/spirv/builder_function_decoration_test.cc b/src/writer/spirv/builder_function_decoration_test.cc index 4a22a79..740c5d7 100644 --- a/src/writer/spirv/builder_function_decoration_test.cc +++ b/src/writer/spirv/builder_function_decoration_test.cc
@@ -42,7 +42,7 @@ TEST_F(BuilderTest, FunctionDecoration_Stage) { ast::type::VoidType void_type; - ast::Function func("main", {}, &void_type); + ast::Function func("main", {}, &void_type, create<ast::BlockStatement>()); func.add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); @@ -66,7 +66,7 @@ ast::type::VoidType void_type; - ast::Function func("main", {}, &void_type); + ast::Function func("main", {}, &void_type, create<ast::BlockStatement>()); func.add_decoration(create<ast::StageDecoration>(params.stage, Source{})); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -92,7 +92,7 @@ ast::type::F32Type f32; ast::type::VoidType void_type; - ast::Function func("main", {}, &void_type); + ast::Function func("main", {}, &void_type, create<ast::BlockStatement>()); func.add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); auto v_in = create<ast::Variable>("my_in", ast::StorageClass::kInput, &f32); @@ -135,7 +135,7 @@ ast::type::F32Type f32; ast::type::VoidType void_type; - ast::Function func("main", {}, &void_type); + ast::Function func("main", {}, &void_type, create<ast::BlockStatement>()); func.add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kVertex, Source{})); @@ -197,7 +197,7 @@ TEST_F(BuilderTest, FunctionDecoration_ExecutionMode_Fragment_OriginUpperLeft) { ast::type::VoidType void_type; - ast::Function func("main", {}, &void_type); + ast::Function func("main", {}, &void_type, create<ast::BlockStatement>()); func.add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); @@ -210,7 +210,7 @@ TEST_F(BuilderTest, FunctionDecoration_WorkgroupSize_Default) { ast::type::VoidType void_type; - ast::Function func("main", {}, &void_type); + ast::Function func("main", {}, &void_type, create<ast::BlockStatement>()); func.add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); @@ -223,7 +223,7 @@ TEST_F(BuilderTest, FunctionDecoration_WorkgroupSize) { ast::type::VoidType void_type; - ast::Function func("main", {}, &void_type); + ast::Function func("main", {}, &void_type, create<ast::BlockStatement>()); func.add_decoration(create<ast::WorkgroupDecoration>(2u, 4u, 6u, Source{})); func.add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); @@ -237,11 +237,11 @@ TEST_F(BuilderTest, FunctionDecoration_ExecutionMode_MultipleFragment) { ast::type::VoidType void_type; - ast::Function func1("main1", {}, &void_type); + ast::Function func1("main1", {}, &void_type, create<ast::BlockStatement>()); func1.add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - ast::Function func2("main2", {}, &void_type); + ast::Function func2("main2", {}, &void_type, create<ast::BlockStatement>()); func2.add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{}));
diff --git a/src/writer/spirv/builder_function_test.cc b/src/writer/spirv/builder_function_test.cc index e7549f7..4855fef 100644 --- a/src/writer/spirv/builder_function_test.cc +++ b/src/writer/spirv/builder_function_test.cc
@@ -48,7 +48,7 @@ TEST_F(BuilderTest, Function_Empty) { ast::type::VoidType void_type; - ast::Function func("a_func", {}, &void_type); + ast::Function func("a_func", {}, &void_type, create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)); EXPECT_EQ(DumpInstructions(b.debug()), R"(OpName %3 "tint_615f66756e63" @@ -76,12 +76,10 @@ var_b->set_is_const(true); params.push_back(std::move(var_b)); - ast::Function func("a_func", std::move(params), &f32); - auto body = create<ast::BlockStatement>(); body->append( create<ast::ReturnStatement>(create<ast::IdentifierExpression>("a"))); - func.set_body(std::move(body)); + ast::Function func("a_func", std::move(params), &f32, std::move(body)); td.RegisterVariableForTesting(func.params()[0].get()); td.RegisterVariableForTesting(func.params()[1].get()); @@ -109,8 +107,7 @@ auto body = create<ast::BlockStatement>(); body->append(create<ast::ReturnStatement>()); - ast::Function func("a_func", {}, &void_type); - func.set_body(std::move(body)); + ast::Function func("a_func", {}, &void_type, std::move(body)); ASSERT_TRUE(b.GenerateFunction(&func)); EXPECT_EQ(DumpBuilder(b), R"(OpName %3 "tint_615f66756e63" @@ -125,7 +122,7 @@ TEST_F(BuilderTest, FunctionType) { ast::type::VoidType void_type; - ast::Function func("a_func", {}, &void_type); + ast::Function func("a_func", {}, &void_type, create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)); EXPECT_EQ(DumpInstructions(b.types()), R"(%2 = OpTypeVoid @@ -135,8 +132,8 @@ TEST_F(BuilderTest, FunctionType_DeDuplicate) { ast::type::VoidType void_type; - ast::Function func1("a_func", {}, &void_type); - ast::Function func2("b_func", {}, &void_type); + ast::Function func1("a_func", {}, &void_type, create<ast::BlockStatement>()); + ast::Function func2("b_func", {}, &void_type, create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func1)); ASSERT_TRUE(b.GenerateFunction(&func2)); @@ -193,10 +190,6 @@ { ast::VariableList params; - auto func = create<ast::Function>("a", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); - auto var = create<ast::Variable>("v", ast::StorageClass::kFunction, &f32); var->set_constructor(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("data"), @@ -205,17 +198,17 @@ auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("a", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); mod.AddFunction(std::move(func)); } { ast::VariableList params; - auto func = create<ast::Function>("b", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); - auto var = create<ast::Variable>("v", ast::StorageClass::kFunction, &f32); var->set_constructor(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("data"), @@ -224,7 +217,11 @@ auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("b", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); mod.AddFunction(std::move(func)); }
diff --git a/src/writer/spirv/builder_intrinsic_test.cc b/src/writer/spirv/builder_intrinsic_test.cc index 033d83a..88b9b23 100644 --- a/src/writer/spirv/builder_intrinsic_test.cc +++ b/src/writer/spirv/builder_intrinsic_test.cc
@@ -940,7 +940,7 @@ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error(); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -971,7 +971,7 @@ auto expr = call_expr(param.name, 1.0f); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -996,7 +996,7 @@ auto expr = call_expr(param.name, construct(vec(f32(), 2), 1.0f, 1.0f)); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1047,7 +1047,7 @@ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1069,7 +1069,7 @@ auto expr = call_expr("length", construct(vec(f32(), 2), 1.0f, 1.0f)); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1093,7 +1093,7 @@ auto expr = call_expr("normalize", construct(vec(f32(), 2), 1.0f, 1.0f)); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1121,7 +1121,7 @@ auto expr = call_expr(param.name, 1.0f, 1.0f); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1149,7 +1149,7 @@ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1182,7 +1182,7 @@ auto expr = call_expr("distance", 1.0f, 1.0f); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1207,7 +1207,7 @@ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1234,7 +1234,7 @@ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1262,7 +1262,7 @@ auto expr = call_expr(param.name, 1.0f, 1.0f, 1.0f); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1291,7 +1291,7 @@ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1329,7 +1329,7 @@ auto expr = call_expr(param.name, 1); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1354,7 +1354,7 @@ auto expr = call_expr(param.name, construct(vec(i32(), 2), 1, 1)); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1386,7 +1386,7 @@ auto expr = call_expr(param.name, 1u); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1411,7 +1411,7 @@ auto expr = call_expr(param.name, construct(vec(u32(), 2), 1u, 1u)); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1443,7 +1443,7 @@ auto expr = call_expr(param.name, 1, 1); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1470,7 +1470,7 @@ call_expr(param.name, construct(vec2, 1, 1), construct(vec2, 1, 1)); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1503,7 +1503,7 @@ auto expr = call_expr(param.name, 1u, 1u); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1531,7 +1531,7 @@ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1564,7 +1564,7 @@ auto expr = call_expr(param.name, 1, 1, 1); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1592,7 +1592,7 @@ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1624,7 +1624,7 @@ auto expr = call_expr(param.name, 1u, 1u, 1u); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1652,7 +1652,7 @@ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1682,7 +1682,7 @@ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); @@ -1725,7 +1725,7 @@ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error(); @@ -1765,7 +1765,7 @@ ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error(); @@ -1810,7 +1810,7 @@ auto expr = call_expr("arrayLength", "ptr_var"); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, void_type()); + ast::Function func("a_func", {}, void_type(), create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateFunction(&func)) << b.error(); ASSERT_TRUE(b.GenerateGlobalVariable(var.get())) << b.error();
diff --git a/src/writer/spirv/builder_switch_test.cc b/src/writer/spirv/builder_switch_test.cc index ed4b35e..639af98 100644 --- a/src/writer/spirv/builder_switch_test.cc +++ b/src/writer/spirv/builder_switch_test.cc
@@ -111,7 +111,7 @@ td.RegisterVariableForTesting(a.get()); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, &i32); + ast::Function func("a_func", {}, &i32, create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateGlobalVariable(v.get())) << b.error(); ASSERT_TRUE(b.GenerateGlobalVariable(a.get())) << b.error(); @@ -175,7 +175,7 @@ td.RegisterVariableForTesting(a.get()); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, &i32); + ast::Function func("a_func", {}, &i32, create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateGlobalVariable(v.get())) << b.error(); ASSERT_TRUE(b.GenerateGlobalVariable(a.get())) << b.error(); @@ -260,7 +260,7 @@ td.RegisterVariableForTesting(a.get()); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, &i32); + ast::Function func("a_func", {}, &i32, create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateGlobalVariable(v.get())) << b.error(); ASSERT_TRUE(b.GenerateGlobalVariable(a.get())) << b.error(); @@ -354,7 +354,7 @@ td.RegisterVariableForTesting(a.get()); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, &i32); + ast::Function func("a_func", {}, &i32, create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateGlobalVariable(v.get())) << b.error(); ASSERT_TRUE(b.GenerateGlobalVariable(a.get())) << b.error(); @@ -426,7 +426,7 @@ td.RegisterVariableForTesting(a.get()); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, &i32); + ast::Function func("a_func", {}, &i32, create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateGlobalVariable(v.get())) << b.error(); ASSERT_TRUE(b.GenerateGlobalVariable(a.get())) << b.error(); @@ -479,7 +479,7 @@ td.RegisterVariableForTesting(a.get()); ASSERT_TRUE(td.DetermineResultType(&expr)) << td.error(); - ast::Function func("a_func", {}, &i32); + ast::Function func("a_func", {}, &i32, create<ast::BlockStatement>()); ASSERT_TRUE(b.GenerateGlobalVariable(v.get())) << b.error(); ASSERT_TRUE(b.GenerateGlobalVariable(a.get())) << b.error();
diff --git a/src/writer/wgsl/generator_impl_function_test.cc b/src/writer/wgsl/generator_impl_function_test.cc index 85dac8e..c7f0b30 100644 --- a/src/writer/wgsl/generator_impl_function_test.cc +++ b/src/writer/wgsl/generator_impl_function_test.cc
@@ -48,8 +48,7 @@ body->append(create<ast::ReturnStatement>()); ast::type::VoidType void_type; - ast::Function func("my_func", {}, &void_type); - func.set_body(std::move(body)); + ast::Function func("my_func", {}, &void_type, std::move(body)); gen.increment_indent(); @@ -73,8 +72,7 @@ params.push_back(create<ast::Variable>("b", ast::StorageClass::kNone, &i32)); ast::type::VoidType void_type; - ast::Function func("my_func", std::move(params), &void_type); - func.set_body(std::move(body)); + ast::Function func("my_func", std::move(params), &void_type, std::move(body)); gen.increment_indent(); @@ -92,9 +90,8 @@ body->append(create<ast::ReturnStatement>()); ast::type::VoidType void_type; - ast::Function func("my_func", {}, &void_type); + ast::Function func("my_func", {}, &void_type, std::move(body)); func.add_decoration(create<ast::WorkgroupDecoration>(2u, 4u, 6u, Source{})); - func.set_body(std::move(body)); gen.increment_indent(); @@ -113,10 +110,9 @@ body->append(create<ast::ReturnStatement>()); ast::type::VoidType void_type; - ast::Function func("my_func", {}, &void_type); + ast::Function func("my_func", {}, &void_type, std::move(body)); func.add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); - func.set_body(std::move(body)); gen.increment_indent(); @@ -135,11 +131,10 @@ body->append(create<ast::ReturnStatement>()); ast::type::VoidType void_type; - ast::Function func("my_func", {}, &void_type); + ast::Function func("my_func", {}, &void_type, std::move(body)); func.add_decoration( create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); func.add_decoration(create<ast::WorkgroupDecoration>(2u, 4u, 6u, Source{})); - func.set_body(std::move(body)); gen.increment_indent(); @@ -202,10 +197,6 @@ { ast::VariableList params; - auto func = create<ast::Function>("a", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); - auto var = create<ast::Variable>("v", ast::StorageClass::kFunction, &f32); var->set_constructor(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("data"), @@ -214,17 +205,17 @@ auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("a", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); mod.AddFunction(std::move(func)); } { ast::VariableList params; - auto func = create<ast::Function>("b", std::move(params), &void_type); - func->add_decoration( - create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); - auto var = create<ast::Variable>("v", ast::StorageClass::kFunction, &f32); var->set_constructor(create<ast::MemberAccessorExpression>( create<ast::IdentifierExpression>("data"), @@ -233,7 +224,11 @@ auto body = create<ast::BlockStatement>(); body->append(create<ast::VariableDeclStatement>(std::move(var))); body->append(create<ast::ReturnStatement>()); - func->set_body(std::move(body)); + + auto func = create<ast::Function>("b", std::move(params), &void_type, + std::move(body)); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kCompute, Source{})); mod.AddFunction(std::move(func)); }
diff --git a/src/writer/wgsl/generator_impl_test.cc b/src/writer/wgsl/generator_impl_test.cc index 20f72f4..d9ea548 100644 --- a/src/writer/wgsl/generator_impl_test.cc +++ b/src/writer/wgsl/generator_impl_test.cc
@@ -32,8 +32,9 @@ TEST_F(WgslGeneratorImplTest, Generate) { ast::type::VoidType void_type; - mod.AddFunction( - create<ast::Function>("my_func", ast::VariableList{}, &void_type)); + mod.AddFunction(create<ast::Function>("my_func", ast::VariableList{}, + &void_type, + create<ast::BlockStatement>())); ASSERT_TRUE(gen.Generate(mod)) << gen.error(); EXPECT_EQ(gen.result(), R"(fn my_func() -> void {