Add helper for function creation. This CL adds a Func helper to the ast builder class. The helper is then used through the various files to simplify function creation. Change-Id: Ie93777586e9311d82cff5932dfba2c4ca763ae08 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/35823 Commit-Queue: dan sinclair <dsinclair@chromium.org> Reviewed-by: Ben Clayton <bclayton@google.com>
diff --git a/src/writer/hlsl/generator_impl_binary_test.cc b/src/writer/hlsl/generator_impl_binary_test.cc index cce256a..457acde 100644 --- a/src/writer/hlsl/generator_impl_binary_test.cc +++ b/src/writer/hlsl/generator_impl_binary_test.cc
@@ -459,10 +459,8 @@ TEST_F(HlslGeneratorImplTest_Binary, Call_WithLogical) { // foo(a && b, c || d, (a || c) && (b || d)) - auto* func = create<ast::Function>( - mod->RegisterSymbol("foo"), "foo", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("foo", ast::VariableList{}, ty.void_, ast::StatementList{}, + ast::FunctionDecorationList{}); mod->AddFunction(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 5cb1e0a..c9b40b4 100644 --- a/src/writer/hlsl/generator_impl_call_test.cc +++ b/src/writer/hlsl/generator_impl_call_test.cc
@@ -32,10 +32,8 @@ TEST_F(HlslGeneratorImplTest_Call, EmitExpression_Call_WithoutParams) { auto* call = Call("my_func"); - auto* func = create<ast::Function>( - mod->RegisterSymbol("my_func"), "my_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("my_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); mod->AddFunction(func); ASSERT_TRUE(gen.EmitExpression(pre, out, call)) << gen.error(); @@ -45,10 +43,8 @@ TEST_F(HlslGeneratorImplTest_Call, EmitExpression_Call_WithParams) { auto* call = Call("my_func", "param1", "param2"); - auto* func = create<ast::Function>( - mod->RegisterSymbol("my_func"), "my_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("my_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); mod->AddFunction(func); ASSERT_TRUE(gen.EmitExpression(pre, out, call)) << gen.error(); @@ -58,10 +54,8 @@ TEST_F(HlslGeneratorImplTest_Call, EmitStatement_Call) { auto* call = create<ast::CallStatement>(Call("my_func", "param1", "param2")); - auto* func = create<ast::Function>( - mod->RegisterSymbol("my_func"), "my_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("my_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); mod->AddFunction(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 366ab7a..6bce585 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
@@ -60,16 +60,15 @@ mod->AddGlobalVariable(foo_var); mod->AddGlobalVariable(bar_var); - ast::VariableList params; - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(Expr("foo"), Expr("foo")), - create<ast::AssignmentStatement>(Expr("bar"), Expr("bar")), - }); - auto* func = create<ast::Function>( - mod->RegisterSymbol("vtx_main"), "vtx_main", params, ty.f32, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kVertex), - }); + auto* func = + Func("vtx_main", ast::VariableList{}, ty.f32, + ast::StatementList{ + create<ast::AssignmentStatement>(Expr("foo"), Expr("foo")), + create<ast::AssignmentStatement>(Expr("bar"), Expr("bar")), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kVertex), + }); mod->AddFunction(func); @@ -111,17 +110,15 @@ mod->AddGlobalVariable(foo_var); mod->AddGlobalVariable(bar_var); - ast::VariableList params; - - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(Expr("foo"), Expr("foo")), - create<ast::AssignmentStatement>(Expr("bar"), Expr("bar")), - }); - auto* func = create<ast::Function>( - mod->RegisterSymbol("vtx_main"), "vtx_main", params, ty.f32, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kVertex), - }); + auto* func = + Func("vtx_main", ast::VariableList{}, ty.f32, + ast::StatementList{ + create<ast::AssignmentStatement>(Expr("foo"), Expr("foo")), + create<ast::AssignmentStatement>(Expr("bar"), Expr("bar")), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kVertex), + }); mod->AddFunction(func); @@ -163,17 +160,15 @@ mod->AddGlobalVariable(foo_var); mod->AddGlobalVariable(bar_var); - ast::VariableList params; - - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(Expr("foo"), Expr("foo")), - create<ast::AssignmentStatement>(Expr("bar"), Expr("bar")), - }); - auto* func = create<ast::Function>( - mod->RegisterSymbol("main"), "main", params, ty.f32, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kVertex), - }); + auto* func = + Func("main", ast::VariableList{}, ty.f32, + ast::StatementList{ + create<ast::AssignmentStatement>(Expr("foo"), Expr("foo")), + create<ast::AssignmentStatement>(Expr("bar"), Expr("bar")), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kVertex), + }); mod->AddFunction(func); @@ -215,16 +210,15 @@ mod->AddGlobalVariable(foo_var); mod->AddGlobalVariable(bar_var); - ast::VariableList params; - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(Expr("foo"), Expr("foo")), - create<ast::AssignmentStatement>(Expr("bar"), Expr("bar")), - }); - auto* func = create<ast::Function>( - mod->RegisterSymbol("main"), "main", params, ty.f32, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kFragment), - }); + auto* func = + Func("main", ast::VariableList{}, ty.f32, + ast::StatementList{ + create<ast::AssignmentStatement>(Expr("foo"), Expr("foo")), + create<ast::AssignmentStatement>(Expr("bar"), Expr("bar")), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kFragment), + }); mod->AddFunction(func); @@ -263,16 +257,15 @@ mod->AddGlobalVariable(foo_var); mod->AddGlobalVariable(bar_var); - ast::VariableList params; - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(Expr("foo"), Expr("foo")), - create<ast::AssignmentStatement>(Expr("bar"), Expr("bar")), - }); - auto* func = create<ast::Function>( - mod->RegisterSymbol("main"), "main", params, ty.f32, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kCompute), - }); + auto* func = + Func("main", ast::VariableList{}, ty.f32, + ast::StatementList{ + create<ast::AssignmentStatement>(Expr("foo"), Expr("foo")), + create<ast::AssignmentStatement>(Expr("bar"), Expr("bar")), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kCompute), + }); mod->AddFunction(func); @@ -306,16 +299,15 @@ mod->AddGlobalVariable(foo_var); mod->AddGlobalVariable(bar_var); - ast::VariableList params; - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(Expr("foo"), Expr("foo")), - create<ast::AssignmentStatement>(Expr("bar"), Expr("bar")), - }); - auto* func = create<ast::Function>( - mod->RegisterSymbol("main"), "main", params, ty.f32, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kCompute), - }); + auto* func = + Func("main", ast::VariableList{}, ty.f32, + ast::StatementList{ + create<ast::AssignmentStatement>(Expr("foo"), Expr("foo")), + create<ast::AssignmentStatement>(Expr("bar"), Expr("bar")), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kCompute), + }); mod->AddFunction(func); @@ -357,16 +349,15 @@ mod->AddGlobalVariable(coord_var); mod->AddGlobalVariable(depth_var); - ast::VariableList params; - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(Expr("depth"), - MemberAccessor("coord", "x")), - }); - auto* func = create<ast::Function>( - mod->RegisterSymbol("main"), "main", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kFragment), - }); + auto* func = + Func("main", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::AssignmentStatement>(Expr("depth"), + MemberAccessor("coord", "x")), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kFragment), + }); mod->AddFunction(func);
diff --git a/src/writer/hlsl/generator_impl_function_test.cc b/src/writer/hlsl/generator_impl_function_test.cc index 7ac56d4..7f3741e 100644 --- a/src/writer/hlsl/generator_impl_function_test.cc +++ b/src/writer/hlsl/generator_impl_function_test.cc
@@ -53,12 +53,11 @@ using HlslGeneratorImplTest_Function = TestHelper; TEST_F(HlslGeneratorImplTest_Function, Emit_Function) { - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::ReturnStatement>(), - }); - auto* func = create<ast::Function>(mod->RegisterSymbol("my_func"), "my_func", - ast::VariableList{}, ty.void_, body, - ast::FunctionDecorationList{}); + auto* func = Func("my_func", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{}); mod->AddFunction(func); gen.increment_indent(); @@ -72,12 +71,11 @@ } TEST_F(HlslGeneratorImplTest_Function, Emit_Function_Name_Collision) { - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::ReturnStatement>(), - }); - auto* func = create<ast::Function>( - mod->RegisterSymbol("GeometryShader"), "GeometryShader", - ast::VariableList{}, ty.void_, body, ast::FunctionDecorationList{}); + auto* func = Func("GeometryShader", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{}); mod->AddFunction(func); gen.increment_indent(); @@ -91,16 +89,15 @@ } TEST_F(HlslGeneratorImplTest_Function, Emit_Function_WithParams) { - ast::VariableList params; - params.push_back(Var("a", ast::StorageClass::kNone, ty.f32)); - params.push_back(Var("b", ast::StorageClass::kNone, ty.i32)); - - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::ReturnStatement>(), - }); auto* func = - create<ast::Function>(mod->RegisterSymbol("my_func"), "my_func", params, - ty.void_, body, ast::FunctionDecorationList{}); + Func("my_func", + ast::VariableList{Var("a", ast::StorageClass::kNone, ty.f32), + Var("b", ast::StorageClass::kNone, ty.i32)}, + ty.void_, + ast::StatementList{ + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{}); mod->AddFunction(func); gen.increment_indent(); @@ -131,16 +128,15 @@ mod->AddGlobalVariable(foo_var); mod->AddGlobalVariable(bar_var); - ast::VariableList params; - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(Expr("bar"), Expr("foo")), - create<ast::ReturnStatement>(), - }); - auto* func = create<ast::Function>( - mod->RegisterSymbol("frag_main"), "frag_main", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kFragment), - }); + auto* func = + Func("frag_main", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::AssignmentStatement>(Expr("bar"), Expr("foo")), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kFragment), + }); mod->AddFunction(func); @@ -183,17 +179,16 @@ mod->AddGlobalVariable(coord_var); mod->AddGlobalVariable(depth_var); - ast::VariableList params; - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(Expr("depth"), - MemberAccessor("coord", "x")), - create<ast::ReturnStatement>(), - }); - auto* func = create<ast::Function>( - mod->RegisterSymbol("frag_main"), "frag_main", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kFragment), - }); + auto* func = + Func("frag_main", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::AssignmentStatement>(Expr("depth"), + MemberAccessor("coord", "x")), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kFragment), + }); mod->AddFunction(func); @@ -228,19 +223,18 @@ td.RegisterVariableForTesting(coord_var); mod->AddGlobalVariable(coord_var); - ast::VariableList params; auto* var = Var("v", ast::StorageClass::kFunction, ty.f32, MemberAccessor("coord", "x"), ast::VariableDecorationList{}); - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::VariableDeclStatement>(var), - create<ast::ReturnStatement>(), - }); - auto* func = create<ast::Function>( - mod->RegisterSymbol("frag_main"), "frag_main", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kFragment), - }); + auto* func = + Func("frag_main", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::VariableDeclStatement>(var), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kFragment), + }); mod->AddFunction(func); @@ -277,21 +271,20 @@ td.RegisterVariableForTesting(coord_var); mod->AddGlobalVariable(coord_var); - ast::VariableList params; auto* var = Var("v", ast::StorageClass::kFunction, ty.f32, create<ast::MemberAccessorExpression>( MemberAccessor("uniforms", "coord"), Expr("x")), ast::VariableDecorationList{}); - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::VariableDeclStatement>(var), - create<ast::ReturnStatement>(), - }); - auto* func = create<ast::Function>( - mod->RegisterSymbol("frag_main"), "frag_main", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kFragment), - }); + auto* func = + Func("frag_main", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::VariableDeclStatement>(var), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kFragment), + }); mod->AddFunction(func); @@ -331,19 +324,18 @@ td.RegisterVariableForTesting(coord_var); mod->AddGlobalVariable(coord_var); - ast::VariableList params; auto* var = Var("v", ast::StorageClass::kFunction, ty.f32, MemberAccessor("coord", "b"), ast::VariableDecorationList{}); - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::VariableDeclStatement>(var), - create<ast::ReturnStatement>(), - }); - auto* func = create<ast::Function>( - mod->RegisterSymbol("frag_main"), "frag_main", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kFragment), - }); + auto* func = + Func("frag_main", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::VariableDeclStatement>(var), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kFragment), + }); mod->AddFunction(func); @@ -380,19 +372,18 @@ td.RegisterVariableForTesting(coord_var); mod->AddGlobalVariable(coord_var); - ast::VariableList params; auto* var = Var("v", ast::StorageClass::kFunction, ty.f32, MemberAccessor("coord", "b"), ast::VariableDecorationList{}); - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::VariableDeclStatement>(var), - create<ast::ReturnStatement>(), - }); - auto* func = create<ast::Function>( - mod->RegisterSymbol("frag_main"), "frag_main", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kFragment), - }); + auto* func = + Func("frag_main", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::VariableDeclStatement>(var), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kFragment), + }); mod->AddFunction(func); @@ -426,21 +417,18 @@ }); td.RegisterVariableForTesting(coord_var); - mod->AddGlobalVariable(coord_var); - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(MemberAccessor("coord", "b"), - Expr(2.0f)), - create<ast::ReturnStatement>(), - }); - - auto* func = create<ast::Function>( - mod->RegisterSymbol("frag_main"), "frag_main", ast::VariableList{}, - ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kFragment), - }); + auto* func = + Func("frag_main", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::AssignmentStatement>(MemberAccessor("coord", "b"), + Expr(2.0f)), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kFragment), + }); mod->AddFunction(func); @@ -483,26 +471,25 @@ mod->AddGlobalVariable(bar_var); mod->AddGlobalVariable(val_var); - ast::VariableList params; - params.push_back(Var("param", ast::StorageClass::kFunction, ty.f32)); - - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(Expr("bar"), Expr("foo")), - create<ast::AssignmentStatement>(Expr("val"), Expr("param")), - create<ast::ReturnStatement>(Expr("foo")), - }); - auto* sub_func = - create<ast::Function>(mod->RegisterSymbol("sub_func"), "sub_func", params, - ty.f32, body, ast::FunctionDecorationList{}); + auto* sub_func = Func( + "sub_func", + ast::VariableList{Var("param", ast::StorageClass::kFunction, ty.f32)}, + ty.f32, + ast::StatementList{ + create<ast::AssignmentStatement>(Expr("bar"), Expr("foo")), + create<ast::AssignmentStatement>(Expr("val"), Expr("param")), + create<ast::ReturnStatement>(Expr("foo")), + }, + ast::FunctionDecorationList{}); mod->AddFunction(sub_func); - body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(Expr("bar"), Call("sub_func", 1.0f)), - create<ast::ReturnStatement>(), - }); - auto* func_1 = create<ast::Function>( - mod->RegisterSymbol("ep_1"), "ep_1", params, ty.void_, body, + auto* func_1 = Func( + "ep_1", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::AssignmentStatement>(Expr("bar"), Call("sub_func", 1.0f)), + create<ast::ReturnStatement>(), + }, ast::FunctionDecorationList{ create<ast::StageDecoration>(ast::PipelineStage::kFragment), }); @@ -547,27 +534,27 @@ mod->AddGlobalVariable(depth_var); - ast::VariableList params; - params.push_back(Var("param", ast::StorageClass::kFunction, ty.f32)); - - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::ReturnStatement>(Expr("param")), - }); - auto* sub_func = - create<ast::Function>(mod->RegisterSymbol("sub_func"), "sub_func", params, - ty.f32, body, ast::FunctionDecorationList{}); + auto* sub_func = Func( + "sub_func", + ast::VariableList{Var("param", ast::StorageClass::kFunction, ty.f32)}, + ty.f32, + ast::StatementList{ + create<ast::ReturnStatement>(Expr("param")), + }, + ast::FunctionDecorationList{}); mod->AddFunction(sub_func); - body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(Expr("depth"), Call("sub_func", 1.0f)), - create<ast::ReturnStatement>(), - }); - auto* func_1 = create<ast::Function>( - mod->RegisterSymbol("ep_1"), "ep_1", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kFragment), - }); + auto* func_1 = + Func("ep_1", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::AssignmentStatement>(Expr("depth"), + Call("sub_func", 1.0f)), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kFragment), + }); mod->AddFunction(func_1); @@ -612,29 +599,29 @@ mod->AddGlobalVariable(coord_var); mod->AddGlobalVariable(depth_var); - ast::VariableList params; - params.push_back(Var("param", ast::StorageClass::kFunction, ty.f32)); - - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(Expr("depth"), - MemberAccessor("coord", "x")), - create<ast::ReturnStatement>(Expr("param")), - }); - auto* sub_func = - create<ast::Function>(mod->RegisterSymbol("sub_func"), "sub_func", params, - ty.f32, body, ast::FunctionDecorationList{}); + auto* sub_func = Func( + "sub_func", + ast::VariableList{Var("param", ast::StorageClass::kFunction, ty.f32)}, + ty.f32, + ast::StatementList{ + create<ast::AssignmentStatement>(Expr("depth"), + MemberAccessor("coord", "x")), + create<ast::ReturnStatement>(Expr("param")), + }, + ast::FunctionDecorationList{}); mod->AddFunction(sub_func); - body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(Expr("depth"), Call("sub_func", 1.0f)), - create<ast::ReturnStatement>(), - }); - auto* func_1 = create<ast::Function>( - mod->RegisterSymbol("ep_1"), "ep_1", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kFragment), - }); + auto* func_1 = + Func("ep_1", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::AssignmentStatement>(Expr("depth"), + Call("sub_func", 1.0f)), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kFragment), + }); mod->AddFunction(func_1); @@ -675,32 +662,29 @@ mod->AddGlobalVariable(coord_var); - ast::VariableList params; - params.push_back(Var("param", ast::StorageClass::kFunction, ty.f32)); - - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::ReturnStatement>(MemberAccessor("coord", "x")), - }); - - auto* sub_func = - create<ast::Function>(mod->RegisterSymbol("sub_func"), "sub_func", params, - ty.f32, body, ast::FunctionDecorationList{}); + auto* sub_func = Func( + "sub_func", + ast::VariableList{Var("param", ast::StorageClass::kFunction, ty.f32)}, + ty.f32, + ast::StatementList{ + create<ast::ReturnStatement>(MemberAccessor("coord", "x")), + }, + ast::FunctionDecorationList{}); mod->AddFunction(sub_func); auto* var = Var("v", ast::StorageClass::kFunction, ty.f32, Call("sub_func", 1.0f), ast::VariableDecorationList{}); - body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::VariableDeclStatement>(var), - create<ast::ReturnStatement>(), - }); - - auto* func = create<ast::Function>( - mod->RegisterSymbol("frag_main"), "frag_main", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kFragment), - }); + auto* func = + Func("frag_main", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::VariableDeclStatement>(var), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kFragment), + }); mod->AddFunction(func); @@ -736,32 +720,29 @@ mod->AddGlobalVariable(coord_var); - ast::VariableList params; - params.push_back(Var("param", ast::StorageClass::kFunction, ty.f32)); - - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::ReturnStatement>(MemberAccessor("coord", "x")), - }); - - auto* sub_func = - create<ast::Function>(mod->RegisterSymbol("sub_func"), "sub_func", params, - ty.f32, body, ast::FunctionDecorationList{}); + auto* sub_func = Func( + "sub_func", + ast::VariableList{Var("param", ast::StorageClass::kFunction, ty.f32)}, + ty.f32, + ast::StatementList{ + create<ast::ReturnStatement>(MemberAccessor("coord", "x")), + }, + ast::FunctionDecorationList{}); mod->AddFunction(sub_func); auto* var = Var("v", ast::StorageClass::kFunction, ty.f32, Call("sub_func", 1.0f), ast::VariableDecorationList{}); - body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::VariableDeclStatement>(var), - create<ast::ReturnStatement>(), - }); - - auto* func = create<ast::Function>( - mod->RegisterSymbol("frag_main"), "frag_main", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kFragment), - }); + auto* func = + Func("frag_main", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::VariableDeclStatement>(var), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kFragment), + }); mod->AddFunction(func); @@ -795,17 +776,15 @@ create<ast::ReturnStatement>(), }); - ast::VariableList params; - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(Expr("bar"), Expr(1.0f)), - create<ast::IfStatement>(create<ast::BinaryExpression>( - ast::BinaryOp::kEqual, Expr(1), Expr(1)), - list, ast::ElseStatementList{}), - create<ast::ReturnStatement>(), - }); - - auto* func_1 = create<ast::Function>( - mod->RegisterSymbol("ep_1"), "ep_1", params, ty.void_, body, + auto* func_1 = Func( + "ep_1", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::AssignmentStatement>(Expr("bar"), Expr(1.0f)), + create<ast::IfStatement>(create<ast::BinaryExpression>( + ast::BinaryOp::kEqual, Expr(1), Expr(1)), + list, ast::ElseStatementList{}), + create<ast::ReturnStatement>(), + }, ast::FunctionDecorationList{ create<ast::StageDecoration>(ast::PipelineStage::kFragment), }); @@ -832,10 +811,8 @@ TEST_F(HlslGeneratorImplTest_Function, Emit_FunctionDecoration_EntryPoint_WithNameCollision) { - auto* func = create<ast::Function>( - mod->RegisterSymbol("GeometryShader"), "GeometryShader", - ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), + auto* func = Func( + "GeometryShader", ast::VariableList{}, ty.void_, ast::StatementList{}, ast::FunctionDecorationList{ create<ast::StageDecoration>(ast::PipelineStage::kFragment), }); @@ -851,16 +828,14 @@ TEST_F(HlslGeneratorImplTest_Function, Emit_FunctionDecoration_EntryPoint_Compute) { - ast::VariableList params; - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::ReturnStatement>(), - }); - - auto* func = create<ast::Function>( - mod->RegisterSymbol("main"), "main", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kCompute), - }); + auto* func = + Func("main", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kCompute), + }); mod->AddFunction(func); @@ -876,17 +851,15 @@ TEST_F(HlslGeneratorImplTest_Function, Emit_FunctionDecoration_EntryPoint_Compute_WithWorkgroup) { - ast::VariableList params; - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::ReturnStatement>(), - }); - - auto* func = create<ast::Function>( - mod->RegisterSymbol("main"), "main", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kCompute), - create<ast::WorkgroupDecoration>(2u, 4u, 6u), - }); + auto* func = + Func("main", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kCompute), + create<ast::WorkgroupDecoration>(2u, 4u, 6u), + }); mod->AddFunction(func); @@ -903,15 +876,13 @@ TEST_F(HlslGeneratorImplTest_Function, Emit_Function_WithArrayParams) { ast::type::Array ary(ty.f32, 5, ast::ArrayDecorationList{}); - ast::VariableList params; - params.push_back(Var("a", ast::StorageClass::kNone, &ary)); - - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::ReturnStatement>(), - }); - auto* func = - create<ast::Function>(mod->RegisterSymbol("my_func"), "my_func", params, - ty.void_, body, ast::FunctionDecorationList{}); + auto* func = Func("my_func", + ast::VariableList{Var("a", ast::StorageClass::kNone, &ary)}, + ty.void_, + ast::StatementList{ + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{}); mod->AddFunction(func); gen.increment_indent(); @@ -960,39 +931,35 @@ mod->AddGlobalVariable(data_var); { - ast::VariableList params; auto* var = Var("v", ast::StorageClass::kFunction, ty.f32, MemberAccessor("data", "d"), ast::VariableDecorationList{}); - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::VariableDeclStatement>(var), - create<ast::ReturnStatement>(), - }); - - auto* func = create<ast::Function>( - mod->RegisterSymbol("a"), "a", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kCompute), - }); + auto* func = + Func("a", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::VariableDeclStatement>(var), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kCompute), + }); mod->AddFunction(func); } { - ast::VariableList params; auto* var = Var("v", ast::StorageClass::kFunction, ty.f32, MemberAccessor("data", "d"), ast::VariableDecorationList{}); - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::VariableDeclStatement>(var), - create<ast::ReturnStatement>(), - }); - - auto* func = create<ast::Function>( - mod->RegisterSymbol("b"), "b", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kCompute), - }); + auto* func = + Func("b", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::VariableDeclStatement>(var), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kCompute), + }); mod->AddFunction(func); }
diff --git a/src/writer/hlsl/generator_impl_test.cc b/src/writer/hlsl/generator_impl_test.cc index 0d1baa6..a3f2af4 100644 --- a/src/writer/hlsl/generator_impl_test.cc +++ b/src/writer/hlsl/generator_impl_test.cc
@@ -29,10 +29,8 @@ TEST_F(HlslGeneratorImplTest, Generate) { ast::type::Void void_type; - auto* func = create<ast::Function>( - mod->RegisterSymbol("my_func"), "my_func", ast::VariableList{}, - &void_type, create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("my_func", ast::VariableList{}, &void_type, + ast::StatementList{}, ast::FunctionDecorationList{}); mod->AddFunction(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 da88386..ea149a3 100644 --- a/src/writer/msl/generator_impl_call_test.cc +++ b/src/writer/msl/generator_impl_call_test.cc
@@ -38,10 +38,8 @@ Source{}, mod->RegisterSymbol("my_func"), "my_func"); ast::CallExpression call(Source{}, id, {}); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("my_func"), "my_func", ast::VariableList{}, - &void_type, create<ast::BlockStatement>(Source{}, ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("my_func", ast::VariableList{}, &void_type, + ast::StatementList{}, ast::FunctionDecorationList{}); mod->AddFunction(func); ASSERT_TRUE(gen.EmitExpression(&call)) << gen.error(); @@ -60,10 +58,8 @@ Source{}, mod->RegisterSymbol("param2"), "param2")); ast::CallExpression call(Source{}, id, params); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("my_func"), "my_func", ast::VariableList{}, - &void_type, create<ast::BlockStatement>(Source{}, ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("my_func", ast::VariableList{}, &void_type, + ast::StatementList{}, ast::FunctionDecorationList{}); mod->AddFunction(func); ASSERT_TRUE(gen.EmitExpression(&call)) << gen.error(); @@ -83,10 +79,8 @@ ast::CallStatement call(Source{}, create<ast::CallExpression>(Source{}, id, params)); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("my_func"), "my_func", ast::VariableList{}, - &void_type, create<ast::BlockStatement>(Source{}, ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("my_func", ast::VariableList{}, &void_type, + ast::StatementList{}, ast::FunctionDecorationList{}); mod->AddFunction(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 fe17c53..0851047 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
@@ -80,24 +80,22 @@ mod->AddGlobalVariable(foo_var); mod->AddGlobalVariable(bar_var); - ast::VariableList params; - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::AssignmentStatement>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("foo"), "foo"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("foo"), "foo")), - create<ast::AssignmentStatement>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("bar"), "bar"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("bar"), "bar")), - }); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("vtx_main"), "vtx_main", params, &f32, body, + auto body = ast::StatementList{ + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("foo"), "foo"), + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("foo"), "foo")), + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("bar"), "bar"), + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("bar"), "bar")), + }; + auto* func = Func( + "vtx_main", ast::VariableList{}, &f32, body, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex), }); @@ -157,24 +155,22 @@ mod->AddGlobalVariable(foo_var); mod->AddGlobalVariable(bar_var); - ast::VariableList params; - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::AssignmentStatement>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("foo"), "foo"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("foo"), "foo")), - create<ast::AssignmentStatement>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("bar"), "bar"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("bar"), "bar")), - }); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("vtx_main"), "vtx_main", params, &f32, body, + auto body = ast::StatementList{ + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("foo"), "foo"), + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("foo"), "foo")), + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("bar"), "bar"), + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("bar"), "bar")), + }; + auto* func = Func( + "vtx_main", ast::VariableList{}, &f32, body, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kVertex), }); @@ -234,24 +230,22 @@ mod->AddGlobalVariable(foo_var); mod->AddGlobalVariable(bar_var); - ast::VariableList params; - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::AssignmentStatement>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("foo"), "foo"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("foo"), "foo")), - create<ast::AssignmentStatement>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("bar"), "bar"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("bar"), "bar")), - }); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("main"), "main", params, &f32, body, + auto body = ast::StatementList{ + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("foo"), "foo"), + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("foo"), "foo")), + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("bar"), "bar"), + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("bar"), "bar")), + }; + auto* func = Func( + "main", ast::VariableList{}, &f32, body, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment), }); @@ -311,24 +305,22 @@ mod->AddGlobalVariable(foo_var); mod->AddGlobalVariable(bar_var); - ast::VariableList params; - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::AssignmentStatement>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("foo"), "foo"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("foo"), "foo")), - create<ast::AssignmentStatement>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("bar"), "bar"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("bar"), "bar")), - }); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("main"), "main", params, &f32, body, + auto body = ast::StatementList{ + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("foo"), "foo"), + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("foo"), "foo")), + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("bar"), "bar"), + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("bar"), "bar")), + }; + auto* func = Func( + "main", ast::VariableList{}, &f32, body, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment), }); @@ -385,24 +377,22 @@ mod->AddGlobalVariable(foo_var); mod->AddGlobalVariable(bar_var); - ast::VariableList params; - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::AssignmentStatement>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("foo"), "foo"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("foo"), "foo")), - create<ast::AssignmentStatement>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("bar"), "bar"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("bar"), "bar")), - }); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("main"), "main", params, &f32, body, + auto body = ast::StatementList{ + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("foo"), "foo"), + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("foo"), "foo")), + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("bar"), "bar"), + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("bar"), "bar")), + }; + auto* func = Func( + "main", ast::VariableList{}, &f32, body, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute), }); @@ -454,24 +444,22 @@ mod->AddGlobalVariable(foo_var); mod->AddGlobalVariable(bar_var); - ast::VariableList params; - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::AssignmentStatement>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("foo"), "foo"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("foo"), "foo")), - create<ast::AssignmentStatement>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("bar"), "bar"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("bar"), "bar")), - }); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("main"), "main", params, &f32, body, + auto body = ast::StatementList{ + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("foo"), "foo"), + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("foo"), "foo")), + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("bar"), "bar"), + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("bar"), "bar")), + }; + auto* func = Func( + "main", ast::VariableList{}, &f32, body, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute), }); @@ -529,24 +517,20 @@ mod->AddGlobalVariable(coord_var); mod->AddGlobalVariable(depth_var); - ast::VariableList params; - - auto* body = create<ast::BlockStatement>( - Source{}, - ast::StatementList{ - create<ast::AssignmentStatement>( + auto body = ast::StatementList{ + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("depth"), "depth"), + create<ast::MemberAccessorExpression>( Source{}, create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("depth"), "depth"), - create<ast::MemberAccessorExpression>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("coord"), "coord"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("x"), "x"))), - }); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("main"), "main", params, &void_type, body, + Source{}, mod->RegisterSymbol("coord"), "coord"), + create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("x"), "x"))), + }; + auto* func = Func( + "main", ast::VariableList{}, &void_type, body, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment), });
diff --git a/src/writer/msl/generator_impl_function_test.cc b/src/writer/msl/generator_impl_function_test.cc index b7e539e..f926bbf 100644 --- a/src/writer/msl/generator_impl_function_test.cc +++ b/src/writer/msl/generator_impl_function_test.cc
@@ -58,14 +58,11 @@ TEST_F(MslGeneratorImplTest, Emit_Function) { ast::type::Void void_type; - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::ReturnStatement>(Source{}), - }); - - auto* func = create<ast::Function>(Source{}, mod->RegisterSymbol("my_func"), - "my_func", ast::VariableList{}, &void_type, - body, ast::FunctionDecorationList{}); + auto* func = Func("my_func", ast::VariableList{}, &void_type, + ast::StatementList{ + create<ast::ReturnStatement>(Source{}), + }, + ast::FunctionDecorationList{}); mod->AddFunction(func); gen.increment_indent(); @@ -83,14 +80,11 @@ TEST_F(MslGeneratorImplTest, Emit_Function_Name_Collision) { ast::type::Void void_type; - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::ReturnStatement>(Source{}), - }); - - auto* func = create<ast::Function>(Source{}, mod->RegisterSymbol("main"), - "main", ast::VariableList{}, &void_type, - body, ast::FunctionDecorationList{}); + auto* func = Func("main", ast::VariableList{}, &void_type, + ast::StatementList{ + create<ast::ReturnStatement>(Source{}), + }, + ast::FunctionDecorationList{}); mod->AddFunction(func); gen.increment_indent(); @@ -129,14 +123,11 @@ ast::type::Void void_type; - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::ReturnStatement>(Source{}), - }); - - auto* func = create<ast::Function>(Source{}, mod->RegisterSymbol("my_func"), - "my_func", params, &void_type, body, - ast::FunctionDecorationList{}); + auto* func = Func("my_func", params, &void_type, + ast::StatementList{ + create<ast::ReturnStatement>(Source{}), + }, + ast::FunctionDecorationList{}); mod->AddFunction(func); gen.increment_indent(); @@ -185,22 +176,18 @@ mod->AddGlobalVariable(foo_var); mod->AddGlobalVariable(bar_var); - ast::VariableList params; - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::AssignmentStatement>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("bar"), "bar"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("foo"), "foo")), - create<ast::ReturnStatement>(Source{}), - }); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("frag_main"), "frag_main", params, - &void_type, body, - ast::FunctionDecorationList{create<ast::StageDecoration>( - Source{}, ast::PipelineStage::kFragment)}); + auto body = ast::StatementList{ + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("bar"), "bar"), + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("foo"), "foo")), + create<ast::ReturnStatement>(Source{}), + }; + auto* func = Func("frag_main", ast::VariableList{}, &void_type, body, + ast::FunctionDecorationList{create<ast::StageDecoration>( + Source{}, ast::PipelineStage::kFragment)}); mod->AddFunction(func); @@ -262,25 +249,21 @@ mod->AddGlobalVariable(coord_var); mod->AddGlobalVariable(depth_var); - ast::VariableList params; - auto* body = create<ast::BlockStatement>( - Source{}, - ast::StatementList{ - create<ast::AssignmentStatement>( + auto body = ast::StatementList{ + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("depth"), "depth"), + create<ast::MemberAccessorExpression>( Source{}, create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("depth"), "depth"), - create<ast::MemberAccessorExpression>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("coord"), "coord"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("x"), "x"))), - create<ast::ReturnStatement>(Source{}), - }); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("frag_main"), "frag_main", params, - &void_type, body, + Source{}, mod->RegisterSymbol("coord"), "coord"), + create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("x"), "x"))), + create<ast::ReturnStatement>(Source{}), + }; + auto* func = Func( + "frag_main", ast::VariableList{}, &void_type, body, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment), }); @@ -327,7 +310,6 @@ mod->AddGlobalVariable(coord_var); - ast::VariableList params; auto* var = create<ast::Variable>( Source{}, // source "v", // name @@ -342,14 +324,12 @@ "x")), // constructor ast::VariableDecorationList{}); // decorations - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::VariableDeclStatement>(Source{}, var), - create<ast::ReturnStatement>(Source{}), - }); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("frag_main"), "frag_main", params, - &void_type, body, + auto* func = Func( + "frag_main", ast::VariableList{}, &void_type, + ast::StatementList{ + create<ast::VariableDeclStatement>(Source{}, var), + create<ast::ReturnStatement>(Source{}), + }, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment), }); @@ -400,7 +380,6 @@ mod->AddGlobalVariable(coord_var); - ast::VariableList params; auto* var = create<ast::Variable>( Source{}, // source "v", // name @@ -415,14 +394,12 @@ "b")), // constructor ast::VariableDecorationList{}); // decorations - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::VariableDeclStatement>(Source{}, var), - create<ast::ReturnStatement>(Source{}), - }); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("frag_main"), "frag_main", params, - &void_type, body, + auto* func = Func( + "frag_main", ast::VariableList{}, &void_type, + ast::StatementList{ + create<ast::VariableDeclStatement>(Source{}, var), + create<ast::ReturnStatement>(Source{}), + }, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment), }); @@ -474,11 +451,8 @@ }); td.RegisterVariableForTesting(coord_var); - mod->AddGlobalVariable(coord_var); - ast::VariableList params; - auto* var = create<ast::Variable>( Source{}, // source "v", // name @@ -493,14 +467,12 @@ "b")), // constructor ast::VariableDecorationList{}); // decorations - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::VariableDeclStatement>(Source{}, var), - create<ast::ReturnStatement>(Source{}), - }); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("frag_main"), "frag_main", params, - &void_type, body, + auto* func = Func( + "frag_main", ast::VariableList{}, &void_type, + ast::StatementList{ + create<ast::VariableDeclStatement>(Source{}, var), + create<ast::ReturnStatement>(Source{}), + }, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment), }); @@ -585,28 +557,25 @@ nullptr, // constructor ast::VariableDecorationList{})); // decorations - auto* body = create<ast::BlockStatement>( - Source{}, - ast::StatementList{ - create<ast::AssignmentStatement>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("bar"), "bar"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("foo"), "foo")), - create<ast::AssignmentStatement>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("val"), "val"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("param"), "param")), - create<ast::ReturnStatement>( - Source{}, create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("foo"), "foo")), - }); - auto* sub_func = create<ast::Function>( - Source{}, mod->RegisterSymbol("sub_func"), "sub_func", params, &f32, body, - ast::FunctionDecorationList{}); + auto body = ast::StatementList{ + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("bar"), "bar"), + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("foo"), "foo")), + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("val"), "val"), + create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("param"), "param")), + create<ast::ReturnStatement>( + Source{}, create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("foo"), "foo")), + }; + auto* sub_func = + Func("sub_func", params, &f32, body, ast::FunctionDecorationList{}); mod->AddFunction(sub_func); @@ -614,22 +583,20 @@ expr.push_back(create<ast::ScalarConstructorExpression>( Source{}, create<ast::FloatLiteral>(Source{}, &f32, 1.0f))); - body = create<ast::BlockStatement>( - Source{}, - ast::StatementList{ - create<ast::AssignmentStatement>( + body = ast::StatementList{ + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("bar"), "bar"), + create<ast::CallExpression>( Source{}, create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("bar"), "bar"), - create<ast::CallExpression>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("sub_func"), "sub_func"), - expr)), - create<ast::ReturnStatement>(Source{}), - }); - auto* func_1 = create<ast::Function>( - Source{}, mod->RegisterSymbol("ep_1"), "ep_1", params, &void_type, body, + Source{}, mod->RegisterSymbol("sub_func"), "sub_func"), + expr)), + create<ast::ReturnStatement>(Source{}), + }; + auto* func_1 = Func( + "ep_1", ast::VariableList{}, &void_type, body, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment), }); @@ -697,15 +664,13 @@ nullptr, // constructor ast::VariableDecorationList{})); // decorations - auto* body = create<ast::BlockStatement>( - Source{}, + auto* sub_func = Func( + "sub_func", params, &f32, ast::StatementList{ create<ast::ReturnStatement>( Source{}, create<ast::IdentifierExpression>( Source{}, mod->RegisterSymbol("param"), "param")), - }); - auto* sub_func = create<ast::Function>( - Source{}, mod->RegisterSymbol("sub_func"), "sub_func", params, &f32, body, + }, ast::FunctionDecorationList{}); mod->AddFunction(sub_func); @@ -714,23 +679,21 @@ expr.push_back(create<ast::ScalarConstructorExpression>( Source{}, create<ast::FloatLiteral>(Source{}, &f32, 1.0f))); - body = create<ast::BlockStatement>( - Source{}, - ast::StatementList{ - create<ast::AssignmentStatement>( + auto body = ast::StatementList{ + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("depth"), "depth"), + create<ast::CallExpression>( Source{}, create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("depth"), "depth"), - create<ast::CallExpression>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("sub_func"), "sub_func"), - expr)), - create<ast::ReturnStatement>(Source{}), - }); + Source{}, mod->RegisterSymbol("sub_func"), "sub_func"), + expr)), + create<ast::ReturnStatement>(Source{}), + }; - auto* func_1 = create<ast::Function>( - Source{}, mod->RegisterSymbol("ep_1"), "ep_1", params, &void_type, body, + auto* func_1 = Func( + "ep_1", ast::VariableList{}, &void_type, body, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment), }); @@ -806,26 +769,23 @@ nullptr, // constructor ast::VariableDecorationList{})); // decorations - auto* body = create<ast::BlockStatement>( - Source{}, - ast::StatementList{ - create<ast::AssignmentStatement>( + auto body = ast::StatementList{ + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("depth"), "depth"), + create<ast::MemberAccessorExpression>( Source{}, create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("depth"), "depth"), - create<ast::MemberAccessorExpression>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("coord"), "coord"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("x"), "x"))), - create<ast::ReturnStatement>( - Source{}, create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("param"), "param")), - }); - auto* sub_func = create<ast::Function>( - Source{}, mod->RegisterSymbol("sub_func"), "sub_func", params, &f32, body, - ast::FunctionDecorationList{}); + Source{}, mod->RegisterSymbol("coord"), "coord"), + create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("x"), "x"))), + create<ast::ReturnStatement>( + Source{}, create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("param"), "param")), + }; + auto* sub_func = + Func("sub_func", params, &f32, body, ast::FunctionDecorationList{}); mod->AddFunction(sub_func); @@ -833,22 +793,20 @@ expr.push_back(create<ast::ScalarConstructorExpression>( Source{}, create<ast::FloatLiteral>(Source{}, &f32, 1.0f))); - body = create<ast::BlockStatement>( - Source{}, - ast::StatementList{ - create<ast::AssignmentStatement>( + body = ast::StatementList{ + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("depth"), "depth"), + create<ast::CallExpression>( Source{}, create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("depth"), "depth"), - create<ast::CallExpression>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("sub_func"), "sub_func"), - expr)), - create<ast::ReturnStatement>(Source{}), - }); - auto* func_1 = create<ast::Function>( - Source{}, mod->RegisterSymbol("ep_1"), "ep_1", params, &void_type, body, + Source{}, mod->RegisterSymbol("sub_func"), "sub_func"), + expr)), + create<ast::ReturnStatement>(Source{}), + }; + auto* func_1 = Func( + "ep_1", ast::VariableList{}, &void_type, body, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment), }); @@ -910,21 +868,17 @@ nullptr, // constructor ast::VariableDecorationList{})); // decorations - auto* body = create<ast::BlockStatement>( - Source{}, - ast::StatementList{ - create<ast::ReturnStatement>( - Source{}, - create<ast::MemberAccessorExpression>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("coord"), "coord"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("x"), "x"))), - }); - auto* sub_func = create<ast::Function>( - Source{}, mod->RegisterSymbol("sub_func"), "sub_func", params, &f32, body, - ast::FunctionDecorationList{}); + auto body = ast::StatementList{ + create<ast::ReturnStatement>( + Source{}, create<ast::MemberAccessorExpression>( + Source{}, + create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("coord"), "coord"), + create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("x"), "x"))), + }; + auto* sub_func = + Func("sub_func", params, &f32, body, ast::FunctionDecorationList{}); mod->AddFunction(sub_func); @@ -945,15 +899,12 @@ expr), // constructor ast::VariableDecorationList{}); // decorations - body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::VariableDeclStatement>(Source{}, var), - create<ast::ReturnStatement>(Source{}), - }); - - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("frag_main"), "frag_main", params, - &void_type, body, + auto* func = Func( + "frag_main", ast::VariableList{}, &void_type, + ast::StatementList{ + create<ast::VariableDeclStatement>(Source{}, var), + create<ast::ReturnStatement>(Source{}), + }, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment), }); @@ -1016,21 +967,17 @@ nullptr, // constructor ast::VariableDecorationList{})); // decorations - auto* body = create<ast::BlockStatement>( - Source{}, - ast::StatementList{ - create<ast::ReturnStatement>( - Source{}, - create<ast::MemberAccessorExpression>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("coord"), "coord"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("b"), "b"))), - }); - auto* sub_func = create<ast::Function>( - Source{}, mod->RegisterSymbol("sub_func"), "sub_func", params, ty.f32, - body, ast::FunctionDecorationList{}); + auto body = ast::StatementList{ + create<ast::ReturnStatement>( + Source{}, create<ast::MemberAccessorExpression>( + Source{}, + create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("coord"), "coord"), + create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("b"), "b"))), + }; + auto* sub_func = + Func("sub_func", params, ty.f32, body, ast::FunctionDecorationList{}); mod->AddFunction(sub_func); @@ -1051,15 +998,12 @@ expr), // constructor ast::VariableDecorationList{}); // decorations - body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::VariableDeclStatement>(Source{}, var), - create<ast::ReturnStatement>(Source{}), - }); - - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("frag_main"), "frag_main", params, - &void_type, body, + auto* func = Func( + "frag_main", ast::VariableList{}, &void_type, + ast::StatementList{ + create<ast::VariableDeclStatement>(Source{}, var), + create<ast::ReturnStatement>(Source{}), + }, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment), }); @@ -1128,21 +1072,17 @@ nullptr, // constructor ast::VariableDecorationList{})); // decorations - auto* body = create<ast::BlockStatement>( - Source{}, - ast::StatementList{ - create<ast::ReturnStatement>( - Source{}, - create<ast::MemberAccessorExpression>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("coord"), "coord"), - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("b"), "b"))), - }); - auto* sub_func = create<ast::Function>( - Source{}, mod->RegisterSymbol("sub_func"), "sub_func", params, ty.f32, - body, ast::FunctionDecorationList{}); + auto body = ast::StatementList{ + create<ast::ReturnStatement>( + Source{}, create<ast::MemberAccessorExpression>( + Source{}, + create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("coord"), "coord"), + create<ast::IdentifierExpression>( + Source{}, mod->RegisterSymbol("b"), "b"))), + }; + auto* sub_func = + Func("sub_func", params, ty.f32, body, ast::FunctionDecorationList{}); mod->AddFunction(sub_func); @@ -1163,15 +1103,12 @@ expr), // constructor ast::VariableDecorationList{}); // decorations - body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::VariableDeclStatement>(Source{}, var), - create<ast::ReturnStatement>(Source{}), - }); - - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("frag_main"), "frag_main", params, - &void_type, body, + auto* func = Func( + "frag_main", ast::VariableList{}, &void_type, + ast::StatementList{ + create<ast::VariableDeclStatement>(Source{}, var), + create<ast::ReturnStatement>(Source{}), + }, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment), }); @@ -1221,35 +1158,32 @@ td.RegisterVariableForTesting(bar_var); mod->AddGlobalVariable(bar_var); - ast::VariableList params; auto* list = create<ast::BlockStatement>( Source{}, ast::StatementList{ create<ast::ReturnStatement>(Source{}), }); - auto* body = create<ast::BlockStatement>( - Source{}, - ast::StatementList{ - create<ast::AssignmentStatement>( - Source{}, - create<ast::IdentifierExpression>( - Source{}, mod->RegisterSymbol("bar"), "bar"), + auto body = ast::StatementList{ + create<ast::AssignmentStatement>( + Source{}, + create<ast::IdentifierExpression>(Source{}, + mod->RegisterSymbol("bar"), "bar"), + create<ast::ScalarConstructorExpression>( + Source{}, create<ast::FloatLiteral>(Source{}, &f32, 1.0f))), + create<ast::IfStatement>( + Source{}, + create<ast::BinaryExpression>( + Source{}, ast::BinaryOp::kEqual, create<ast::ScalarConstructorExpression>( - Source{}, create<ast::FloatLiteral>(Source{}, &f32, 1.0f))), - create<ast::IfStatement>( - Source{}, - create<ast::BinaryExpression>( - Source{}, ast::BinaryOp::kEqual, - create<ast::ScalarConstructorExpression>( - Source{}, create<ast::SintLiteral>(Source{}, &i32, 1)), - create<ast::ScalarConstructorExpression>( - Source{}, create<ast::SintLiteral>(Source{}, &i32, 1))), - list, ast::ElseStatementList{}), - create<ast::ReturnStatement>(Source{}), - }); + Source{}, create<ast::SintLiteral>(Source{}, &i32, 1)), + create<ast::ScalarConstructorExpression>( + Source{}, create<ast::SintLiteral>(Source{}, &i32, 1))), + list, ast::ElseStatementList{}), + create<ast::ReturnStatement>(Source{}), + }; - auto* func_1 = create<ast::Function>( - Source{}, mod->RegisterSymbol("ep_1"), "ep_1", params, &void_type, body, + auto* func_1 = Func( + "ep_1", ast::VariableList{}, &void_type, body, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kFragment), }); @@ -1280,9 +1214,8 @@ Emit_FunctionDecoration_EntryPoint_WithNameCollision) { ast::type::Void void_type; - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("main"), "main", ast::VariableList{}, - &void_type, create<ast::BlockStatement>(Source{}, ast::StatementList{}), + auto* func = Func( + "main", ast::VariableList{}, &void_type, ast::StatementList{}, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute), }); @@ -1314,14 +1247,11 @@ ast::type::Void void_type; - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::ReturnStatement>(Source{}), - }); - - auto* func = create<ast::Function>(Source{}, mod->RegisterSymbol("my_func"), - "my_func", params, &void_type, body, - ast::FunctionDecorationList{}); + auto* func = Func("my_func", params, &void_type, + ast::StatementList{ + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{}); mod->AddFunction(func); @@ -1385,7 +1315,6 @@ mod->AddGlobalVariable(data_var); { - ast::VariableList params; auto* var = create<ast::Variable>( Source{}, // source "v", // name @@ -1401,23 +1330,20 @@ "d")), // constructor ast::VariableDecorationList{}); // decorations - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::VariableDeclStatement>(Source{}, var), - create<ast::ReturnStatement>(Source{}), - }); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("a"), "a", params, &void_type, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(Source{}, - ast::PipelineStage::kCompute), - }); + auto* func = Func("a", ast::VariableList{}, &void_type, + ast::StatementList{ + create<ast::VariableDeclStatement>(Source{}, var), + create<ast::ReturnStatement>(Source{}), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>( + Source{}, ast::PipelineStage::kCompute), + }); mod->AddFunction(func); } { - ast::VariableList params; auto* var = create<ast::Variable>( Source{}, // source "v", // name @@ -1433,17 +1359,15 @@ "d")), // constructor ast::VariableDecorationList{}); // decorations - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::VariableDeclStatement>(Source{}, var), - create<ast::ReturnStatement>(Source{}), - }); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("b"), "b", params, &void_type, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(Source{}, - ast::PipelineStage::kCompute), - }); + auto* func = Func("b", ast::VariableList{}, &void_type, + ast::StatementList{ + create<ast::VariableDeclStatement>(Source{}, var), + create<ast::ReturnStatement>(Source{}), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>( + Source{}, ast::PipelineStage::kCompute), + }); mod->AddFunction(func); }
diff --git a/src/writer/msl/generator_impl_test.cc b/src/writer/msl/generator_impl_test.cc index cf6df0e..585f558 100644 --- a/src/writer/msl/generator_impl_test.cc +++ b/src/writer/msl/generator_impl_test.cc
@@ -50,9 +50,8 @@ TEST_F(MslGeneratorImplTest, Generate) { ast::type::Void void_type; - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("my_func"), "my_func", ast::VariableList{}, - &void_type, create<ast::BlockStatement>(Source{}, ast::StatementList{}), + auto* func = Func( + "my_func", ast::VariableList{}, &void_type, ast::StatementList{}, ast::FunctionDecorationList{ create<ast::StageDecoration>(Source{}, ast::PipelineStage::kCompute), });
diff --git a/src/writer/spirv/builder_function_decoration_test.cc b/src/writer/spirv/builder_function_decoration_test.cc index 4f28dc5..33fd143 100644 --- a/src/writer/spirv/builder_function_decoration_test.cc +++ b/src/writer/spirv/builder_function_decoration_test.cc
@@ -352,13 +352,12 @@ }); mod->AddGlobalVariable(fragdepth); - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::AssignmentStatement>(Expr("fragdepth"), Expr(1.f)), - }); - - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("main"), "main", ast::VariableList{}, - create<ast::type::Void>(), body, ast::FunctionDecorationList{}); + auto* func = + Func("main", ast::VariableList{}, create<ast::type::Void>(), + ast::StatementList{ + create<ast::AssignmentStatement>(Expr("fragdepth"), Expr(1.f)), + }, + ast::FunctionDecorationList{}); func->add_referenced_module_variable(fragdepth);
diff --git a/src/writer/spirv/builder_function_test.cc b/src/writer/spirv/builder_function_test.cc index adc847a..600401c 100644 --- a/src/writer/spirv/builder_function_test.cc +++ b/src/writer/spirv/builder_function_test.cc
@@ -299,7 +299,6 @@ mod->AddGlobalVariable(data_var); { - ast::VariableList params; auto* var = create<ast::Variable>( Source{}, // source "v", // name @@ -315,23 +314,20 @@ "d")), // constructor ast::VariableDecorationList{}); // decorations - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::VariableDeclStatement>(Source{}, var), - create<ast::ReturnStatement>(Source{}), - }); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("a"), "a", params, &void_type, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(Source{}, - ast::PipelineStage::kCompute), - }); + auto* func = Func("a", ast::VariableList{}, &void_type, + ast::StatementList{ + create<ast::VariableDeclStatement>(Source{}, var), + create<ast::ReturnStatement>(Source{}), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>( + Source{}, ast::PipelineStage::kCompute), + }); mod->AddFunction(func); } { - ast::VariableList params; auto* var = create<ast::Variable>( Source{}, // source "v", // name @@ -347,17 +343,15 @@ "d")), // constructor ast::VariableDecorationList{}); // decorations - auto* body = create<ast::BlockStatement>( - Source{}, ast::StatementList{ - create<ast::VariableDeclStatement>(Source{}, var), - create<ast::ReturnStatement>(Source{}), - }); - auto* func = create<ast::Function>( - Source{}, mod->RegisterSymbol("b"), "b", params, &void_type, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(Source{}, - ast::PipelineStage::kCompute), - }); + auto* func = Func("b", ast::VariableList{}, &void_type, + ast::StatementList{ + create<ast::VariableDeclStatement>(Source{}, var), + create<ast::ReturnStatement>(Source{}), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>( + Source{}, ast::PipelineStage::kCompute), + }); mod->AddFunction(func); }
diff --git a/src/writer/spirv/builder_intrinsic_test.cc b/src/writer/spirv/builder_intrinsic_test.cc index 97b8028..e8e2fa7 100644 --- a/src/writer/spirv/builder_intrinsic_test.cc +++ b/src/writer/spirv/builder_intrinsic_test.cc
@@ -471,10 +471,8 @@ ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateGlobalVariable(var)) << b.error(); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -506,10 +504,8 @@ auto* expr = Call(param.name, 1.0f); ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -535,10 +531,8 @@ auto* expr = Call(param.name, vec2<f32>(1.0f, 1.0f)); ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -590,10 +584,8 @@ ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -616,10 +608,8 @@ auto* expr = Call("length", vec2<f32>(1.0f, 1.0f)); ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -644,10 +634,8 @@ auto* expr = Call("normalize", vec2<f32>(1.0f, 1.0f)); ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -677,10 +665,8 @@ ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -707,10 +693,8 @@ ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -745,10 +729,8 @@ ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -772,10 +754,8 @@ ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -802,10 +782,8 @@ ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -834,10 +812,8 @@ auto* expr = Call(param.name, 1.0f, 1.0f, 1.0f); ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -865,10 +841,8 @@ ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -907,10 +881,8 @@ auto* expr = Call(param.name, 1); ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -936,10 +908,8 @@ auto* expr = Call(param.name, vec2<i32>(1, 1)); ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -972,10 +942,8 @@ auto* expr = Call(param.name, 1u); ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -1001,10 +969,8 @@ auto* expr = Call(param.name, vec2<u32>(1u, 1u)); ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -1037,10 +1003,8 @@ auto* expr = Call(param.name, 1, 1); ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -1066,10 +1030,8 @@ auto* expr = Call(param.name, vec2<i32>(1, 1), vec2<i32>(1, 1)); ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -1103,10 +1065,8 @@ auto* expr = Call(param.name, 1u, 1u); ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -1132,10 +1092,8 @@ auto* expr = Call(param.name, vec2<u32>(1u, 1u), vec2<u32>(1u, 1u)); ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -1169,10 +1127,8 @@ auto* expr = Call(param.name, 1, 1, 1); ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -1200,10 +1156,8 @@ ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -1236,10 +1190,8 @@ auto* expr = Call(param.name, 1u, 1u, 1u); ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -1267,10 +1219,8 @@ ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -1301,10 +1251,8 @@ ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); @@ -1344,10 +1292,8 @@ ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); ASSERT_TRUE(b.GenerateGlobalVariable(var)) << b.error(); @@ -1383,10 +1329,8 @@ ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); ASSERT_TRUE(b.GenerateGlobalVariable(var)) << b.error(); @@ -1428,10 +1372,8 @@ auto* expr = Call("arrayLength", "ptr_var"); ASSERT_TRUE(td.DetermineResultType(expr)) << td.error(); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a_func"), "a_func", ast::VariableList{}, ty.void_, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{}); + auto* func = Func("a_func", ast::VariableList{}, ty.void_, + ast::StatementList{}, ast::FunctionDecorationList{}); ASSERT_TRUE(b.GenerateFunction(func)) << b.error(); ASSERT_TRUE(b.GenerateGlobalVariable(var)) << b.error();
diff --git a/src/writer/wgsl/generator_impl_function_test.cc b/src/writer/wgsl/generator_impl_function_test.cc index 2b224c3..59b7005 100644 --- a/src/writer/wgsl/generator_impl_function_test.cc +++ b/src/writer/wgsl/generator_impl_function_test.cc
@@ -41,14 +41,12 @@ using WgslGeneratorImplTest = TestHelper; TEST_F(WgslGeneratorImplTest, Emit_Function) { - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::DiscardStatement>(), - create<ast::ReturnStatement>(), - }); - - auto* func = create<ast::Function>(mod->RegisterSymbol("my_func"), "my_func", - ast::VariableList{}, ty.void_, body, - ast::FunctionDecorationList{}); + auto* func = Func("my_func", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::DiscardStatement>(), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{}); gen.increment_indent(); @@ -61,18 +59,16 @@ } TEST_F(WgslGeneratorImplTest, Emit_Function_WithParams) { - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::DiscardStatement>(), - create<ast::ReturnStatement>(), - }); - - ast::VariableList params; - params.push_back(Var("a", ast::StorageClass::kNone, ty.f32)); - params.push_back(Var("b", ast::StorageClass::kNone, ty.i32)); - auto* func = - create<ast::Function>(mod->RegisterSymbol("my_func"), "my_func", params, - ty.void_, body, ast::FunctionDecorationList{}); + Func("my_func", + ast::VariableList{Var("a", ast::StorageClass::kNone, ty.f32), + Var("b", ast::StorageClass::kNone, ty.i32)}, + ty.void_, + ast::StatementList{ + create<ast::DiscardStatement>(), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{}); gen.increment_indent(); @@ -85,17 +81,14 @@ } TEST_F(WgslGeneratorImplTest, Emit_Function_WithDecoration_WorkgroupSize) { - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::DiscardStatement>(), - create<ast::ReturnStatement>(), - }); - - auto* func = - create<ast::Function>(mod->RegisterSymbol("my_func"), "my_func", - ast::VariableList{}, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::WorkgroupDecoration>(2u, 4u, 6u), - }); + auto* func = Func("my_func", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::DiscardStatement>(), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::WorkgroupDecoration>(2u, 4u, 6u), + }); gen.increment_indent(); @@ -109,17 +102,15 @@ } TEST_F(WgslGeneratorImplTest, Emit_Function_WithDecoration_Stage) { - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::DiscardStatement>(), - create<ast::ReturnStatement>(), - }); - - auto* func = create<ast::Function>( - mod->RegisterSymbol("my_func"), "my_func", ast::VariableList{}, ty.void_, - body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kFragment), - }); + auto* func = + Func("my_func", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::DiscardStatement>(), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kFragment), + }); gen.increment_indent(); @@ -133,18 +124,16 @@ } TEST_F(WgslGeneratorImplTest, Emit_Function_WithDecoration_Multiple) { - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::DiscardStatement>(), - create<ast::ReturnStatement>(), - }); - - auto* func = create<ast::Function>( - mod->RegisterSymbol("my_func"), "my_func", ast::VariableList{}, ty.void_, - body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kFragment), - create<ast::WorkgroupDecoration>(2u, 4u, 6u), - }); + auto* func = + Func("my_func", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::DiscardStatement>(), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kFragment), + create<ast::WorkgroupDecoration>(2u, 4u, 6u), + }); gen.increment_indent(); @@ -198,41 +187,39 @@ mod->AddGlobalVariable(data_var); { - ast::VariableList params; auto* var = Var("v", ast::StorageClass::kFunction, ty.f32, create<ast::MemberAccessorExpression>(Expr("data"), Expr("d")), ast::VariableDecorationList{}); - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::VariableDeclStatement>(var), - create<ast::ReturnStatement>(), - }); - auto* func = create<ast::Function>( - mod->RegisterSymbol("a"), "a", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kCompute), - }); + auto* func = + Func("a", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::VariableDeclStatement>(var), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kCompute), + }); mod->AddFunction(func); } { - ast::VariableList params; auto* var = Var("v", ast::StorageClass::kFunction, ty.f32, create<ast::MemberAccessorExpression>(Expr("data"), Expr("d")), ast::VariableDecorationList{}); - auto* body = create<ast::BlockStatement>(ast::StatementList{ - create<ast::VariableDeclStatement>(var), - create<ast::ReturnStatement>(), - }); - auto* func = create<ast::Function>( - mod->RegisterSymbol("b"), "b", params, ty.void_, body, - ast::FunctionDecorationList{ - create<ast::StageDecoration>(ast::PipelineStage::kCompute), - }); + auto* func = + Func("b", ast::VariableList{}, ty.void_, + ast::StatementList{ + create<ast::VariableDeclStatement>(var), + create<ast::ReturnStatement>(), + }, + ast::FunctionDecorationList{ + create<ast::StageDecoration>(ast::PipelineStage::kCompute), + }); mod->AddFunction(func); }
diff --git a/src/writer/wgsl/generator_impl_test.cc b/src/writer/wgsl/generator_impl_test.cc index abc82a7..0bdd97f 100644 --- a/src/writer/wgsl/generator_impl_test.cc +++ b/src/writer/wgsl/generator_impl_test.cc
@@ -32,10 +32,8 @@ TEST_F(WgslGeneratorImplTest, Generate) { ast::type::Void void_type; - mod->AddFunction(create<ast::Function>( - mod->RegisterSymbol("a_func"), "my_func", ast::VariableList{}, &void_type, - create<ast::BlockStatement>(ast::StatementList{}), - ast::FunctionDecorationList{})); + mod->AddFunction(Func("my_func", ast::VariableList{}, &void_type, + ast::StatementList{}, ast::FunctionDecorationList{})); ASSERT_TRUE(gen.Generate(*mod)) << gen.error(); EXPECT_EQ(gen.result(), R"(fn my_func() -> void {