transform tests: Replace std::make_unique<T> -> create<T> create() is currently just a simple forwarder to std::make_unique<>, but will be later replaced with a function that returns a raw pointer, and owned by the context. Bug: tint:322 Change-Id: I630ce57017fe84b5d00e9bd74902f47547a13f3a Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/32669 Commit-Queue: Ben Clayton <bclayton@google.com> Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/transform/bound_array_accessors_transform_test.cc b/src/transform/bound_array_accessors_transform_test.cc index cf013a7..e165ef0 100644 --- a/src/transform/bound_array_accessors_transform_test.cc +++ b/src/transform/bound_array_accessors_transform_test.cc
@@ -52,9 +52,8 @@ BoundArrayAccessorsTest() : td_(&ctx_, &mod_), transform_(&ctx_, &mod_) {} ast::BlockStatement* SetupFunctionAndBody() { - auto func = std::make_unique<ast::Function>("func", ast::VariableList{}, - &void_type_); - auto block = std::make_unique<ast::BlockStatement>(); + auto func = create<ast::Function>("func", ast::VariableList{}, &void_type_); + auto block = create<ast::BlockStatement>(); body_ = block.get(); func->set_body(std::move(block)); mod_.AddFunction(std::move(func)); @@ -63,13 +62,20 @@ void DeclareVariable(std::unique_ptr<ast::Variable> var) { ASSERT_NE(body_, nullptr); - body_->append(std::make_unique<ast::VariableDeclStatement>(std::move(var))); + body_->append(create<ast::VariableDeclStatement>(std::move(var))); } TypeDeterminer* td() { return &td_; } BoundArrayAccessorsTransform* transform() { return &transform_; } + /// @return a `std::unique_ptr` to a new `T` constructed with `args` + /// @param args the arguments to forward to the constructor for `T` + template <typename T, typename... ARGS> + std::unique_ptr<T> create(ARGS&&... args) { + return std::make_unique<T>(std::forward<ARGS>(args)...); + } + private: Context ctx_; ast::Module mod_; @@ -93,22 +99,20 @@ SetupFunctionAndBody(); DeclareVariable( - std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &ary)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &ary)); - auto c_var = - std::make_unique<ast::Variable>("c", ast::StorageClass::kFunction, &u32); + auto c_var = create<ast::Variable>("c", ast::StorageClass::kFunction, &u32); c_var->set_is_const(true); DeclareVariable(std::move(c_var)); - auto access_idx = std::make_unique<ast::IdentifierExpression>("c"); + auto access_idx = create<ast::IdentifierExpression>("c"); auto* access_ptr = access_idx.get(); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), std::move(access_idx)); + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), std::move(access_idx)); auto* ptr = accessor.get(); - auto b = std::make_unique<ast::Variable>("b", ast::StorageClass::kFunction, - &ptr_type); + auto b = create<ast::Variable>("b", ast::StorageClass::kFunction, &ptr_type); b->set_constructor(std::move(accessor)); b->set_is_const(true); DeclareVariable(std::move(b)); @@ -156,27 +160,24 @@ ast::type::ArrayType ary5(&f32, 5); SetupFunctionAndBody(); - DeclareVariable(std::make_unique<ast::Variable>( - "a", ast::StorageClass::kFunction, &ary3)); - DeclareVariable(std::make_unique<ast::Variable>( - "b", ast::StorageClass::kFunction, &ary5)); DeclareVariable( - std::make_unique<ast::Variable>("i", ast::StorageClass::kFunction, &u32)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &ary3)); + DeclareVariable( + create<ast::Variable>("b", ast::StorageClass::kFunction, &ary5)); + DeclareVariable( + create<ast::Variable>("i", ast::StorageClass::kFunction, &u32)); - auto b_access_idx = std::make_unique<ast::IdentifierExpression>("i"); + auto b_access_idx = create<ast::IdentifierExpression>("i"); auto* b_access_ptr = b_access_idx.get(); - auto a_access_idx = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("b"), - std::move(b_access_idx)); + auto a_access_idx = create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("b"), std::move(b_access_idx)); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), - std::move(a_access_idx)); + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), std::move(a_access_idx)); auto* ptr = accessor.get(); - auto b = - std::make_unique<ast::Variable>("c", ast::StorageClass::kFunction, &f32); + auto b = create<ast::Variable>("c", ast::StorageClass::kFunction, &f32); b->set_constructor(std::move(accessor)); DeclareVariable(std::move(b)); @@ -241,16 +242,15 @@ SetupFunctionAndBody(); DeclareVariable( - std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &ary)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &ary)); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 1u))); + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 1u))); auto* ptr = accessor.get(); - auto b = - std::make_unique<ast::Variable>("b", ast::StorageClass::kFunction, &f32); + auto b = create<ast::Variable>("b", ast::StorageClass::kFunction, &f32); b->set_constructor(std::move(accessor)); DeclareVariable(std::move(b)); @@ -282,26 +282,24 @@ SetupFunctionAndBody(); DeclareVariable( - std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &ary)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &ary)); DeclareVariable( - std::make_unique<ast::Variable>("c", ast::StorageClass::kFunction, &u32)); + create<ast::Variable>("c", ast::StorageClass::kFunction, &u32)); - auto access_idx = std::make_unique<ast::BinaryExpression>( - ast::BinaryOp::kAdd, std::make_unique<ast::IdentifierExpression>("c"), - std::make_unique<ast::BinaryExpression>( - ast::BinaryOp::kSubtract, - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 2)), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 3)))); + auto access_idx = create<ast::BinaryExpression>( + ast::BinaryOp::kAdd, create<ast::IdentifierExpression>("c"), + create<ast::BinaryExpression>(ast::BinaryOp::kSubtract, + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 2)), + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 3)))); auto* access_ptr = access_idx.get(); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), std::move(access_idx)); + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), std::move(access_idx)); auto* ptr = accessor.get(); - auto b = - std::make_unique<ast::Variable>("b", ast::StorageClass::kFunction, &f32); + auto b = create<ast::Variable>("b", ast::StorageClass::kFunction, &f32); b->set_constructor(std::move(accessor)); DeclareVariable(std::move(b)); @@ -346,16 +344,15 @@ SetupFunctionAndBody(); DeclareVariable( - std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &ary)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &ary)); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::SintLiteral>(&i32, -1))); + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), + create<ast::ScalarConstructorExpression>( + create<ast::SintLiteral>(&i32, -1))); auto* ptr = accessor.get(); - auto b = - std::make_unique<ast::Variable>("b", ast::StorageClass::kFunction, &f32); + auto b = create<ast::Variable>("b", ast::StorageClass::kFunction, &f32); b->set_constructor(std::move(accessor)); DeclareVariable(std::move(b)); @@ -386,16 +383,15 @@ SetupFunctionAndBody(); DeclareVariable( - std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &ary)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &ary)); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 3u))); + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 3u))); auto* ptr = accessor.get(); - auto b = - std::make_unique<ast::Variable>("b", ast::StorageClass::kFunction, &f32); + auto b = create<ast::Variable>("b", ast::StorageClass::kFunction, &f32); b->set_constructor(std::move(accessor)); DeclareVariable(std::move(b)); @@ -426,16 +422,15 @@ SetupFunctionAndBody(); DeclareVariable( - std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &vec)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &vec)); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 1u))); + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 1u))); auto* ptr = accessor.get(); - auto b = - std::make_unique<ast::Variable>("b", ast::StorageClass::kFunction, &f32); + auto b = create<ast::Variable>("b", ast::StorageClass::kFunction, &f32); b->set_constructor(std::move(accessor)); DeclareVariable(std::move(b)); @@ -467,26 +462,24 @@ SetupFunctionAndBody(); DeclareVariable( - std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &vec)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &vec)); DeclareVariable( - std::make_unique<ast::Variable>("c", ast::StorageClass::kFunction, &u32)); + create<ast::Variable>("c", ast::StorageClass::kFunction, &u32)); - auto access_idx = std::make_unique<ast::BinaryExpression>( - ast::BinaryOp::kAdd, std::make_unique<ast::IdentifierExpression>("c"), - std::make_unique<ast::BinaryExpression>( - ast::BinaryOp::kSubtract, - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 2)), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 3)))); + auto access_idx = create<ast::BinaryExpression>( + ast::BinaryOp::kAdd, create<ast::IdentifierExpression>("c"), + create<ast::BinaryExpression>(ast::BinaryOp::kSubtract, + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 2)), + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 3)))); auto* access_ptr = access_idx.get(); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), std::move(access_idx)); + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), std::move(access_idx)); auto* ptr = accessor.get(); - auto b = - std::make_unique<ast::Variable>("b", ast::StorageClass::kFunction, &f32); + auto b = create<ast::Variable>("b", ast::StorageClass::kFunction, &f32); b->set_constructor(std::move(accessor)); DeclareVariable(std::move(b)); @@ -530,16 +523,15 @@ SetupFunctionAndBody(); DeclareVariable( - std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &vec)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &vec)); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::SintLiteral>(&i32, -1))); + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), + create<ast::ScalarConstructorExpression>( + create<ast::SintLiteral>(&i32, -1))); auto* ptr = accessor.get(); - auto b = - std::make_unique<ast::Variable>("b", ast::StorageClass::kFunction, &f32); + auto b = create<ast::Variable>("b", ast::StorageClass::kFunction, &f32); b->set_constructor(std::move(accessor)); DeclareVariable(std::move(b)); @@ -570,16 +562,15 @@ SetupFunctionAndBody(); DeclareVariable( - std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &vec)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &vec)); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 3u))); + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 3u))); auto* ptr = accessor.get(); - auto b = - std::make_unique<ast::Variable>("b", ast::StorageClass::kFunction, &f32); + auto b = create<ast::Variable>("b", ast::StorageClass::kFunction, &f32); b->set_constructor(std::move(accessor)); DeclareVariable(std::move(b)); @@ -610,19 +601,18 @@ SetupFunctionAndBody(); DeclareVariable( - std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &mat)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &mat)); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 2u))), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 1u))); + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 2u))), + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 1u))); auto* ptr = accessor.get(); - auto b = - std::make_unique<ast::Variable>("b", ast::StorageClass::kFunction, &f32); + auto b = create<ast::Variable>("b", ast::StorageClass::kFunction, &f32); b->set_constructor(std::move(accessor)); DeclareVariable(std::move(b)); @@ -667,30 +657,27 @@ SetupFunctionAndBody(); DeclareVariable( - std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &mat)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &mat)); DeclareVariable( - std::make_unique<ast::Variable>("c", ast::StorageClass::kFunction, &u32)); + create<ast::Variable>("c", ast::StorageClass::kFunction, &u32)); - auto access_idx = std::make_unique<ast::BinaryExpression>( - ast::BinaryOp::kAdd, std::make_unique<ast::IdentifierExpression>("c"), - std::make_unique<ast::BinaryExpression>( - ast::BinaryOp::kSubtract, - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 2)), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 3)))); + auto access_idx = create<ast::BinaryExpression>( + ast::BinaryOp::kAdd, create<ast::IdentifierExpression>("c"), + create<ast::BinaryExpression>(ast::BinaryOp::kSubtract, + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 2)), + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 3)))); auto* access_ptr = access_idx.get(); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), - std::move(access_idx)), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 1u))); + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), std::move(access_idx)), + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 1u))); auto* ptr = accessor.get(); - auto b = - std::make_unique<ast::Variable>("b", ast::StorageClass::kFunction, &f32); + auto b = create<ast::Variable>("b", ast::StorageClass::kFunction, &f32); b->set_constructor(std::move(accessor)); DeclareVariable(std::move(b)); @@ -749,30 +736,28 @@ SetupFunctionAndBody(); DeclareVariable( - std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &mat)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &mat)); DeclareVariable( - std::make_unique<ast::Variable>("c", ast::StorageClass::kFunction, &u32)); + create<ast::Variable>("c", ast::StorageClass::kFunction, &u32)); - auto access_idx = std::make_unique<ast::BinaryExpression>( - ast::BinaryOp::kAdd, std::make_unique<ast::IdentifierExpression>("c"), - std::make_unique<ast::BinaryExpression>( - ast::BinaryOp::kSubtract, - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 2)), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 3)))); + auto access_idx = create<ast::BinaryExpression>( + ast::BinaryOp::kAdd, create<ast::IdentifierExpression>("c"), + create<ast::BinaryExpression>(ast::BinaryOp::kSubtract, + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 2)), + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 3)))); auto* access_ptr = access_idx.get(); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 1u))), + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 1u))), std::move(access_idx)); auto* ptr = accessor.get(); - auto b = - std::make_unique<ast::Variable>("b", ast::StorageClass::kFunction, &f32); + auto b = create<ast::Variable>("b", ast::StorageClass::kFunction, &f32); b->set_constructor(std::move(accessor)); DeclareVariable(std::move(b)); @@ -829,19 +814,18 @@ SetupFunctionAndBody(); DeclareVariable( - std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &mat)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &mat)); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::SintLiteral>(&i32, -1))), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::SintLiteral>(&i32, 1))); + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), + create<ast::ScalarConstructorExpression>( + create<ast::SintLiteral>(&i32, -1))), + create<ast::ScalarConstructorExpression>( + create<ast::SintLiteral>(&i32, 1))); auto* ptr = accessor.get(); - auto b = - std::make_unique<ast::Variable>("b", ast::StorageClass::kFunction, &f32); + auto b = create<ast::Variable>("b", ast::StorageClass::kFunction, &f32); b->set_constructor(std::move(accessor)); DeclareVariable(std::move(b)); @@ -884,19 +868,18 @@ SetupFunctionAndBody(); DeclareVariable( - std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &mat)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &mat)); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::SintLiteral>(&i32, 2))), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::SintLiteral>(&i32, -1))); + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), + create<ast::ScalarConstructorExpression>( + create<ast::SintLiteral>(&i32, 2))), + create<ast::ScalarConstructorExpression>( + create<ast::SintLiteral>(&i32, -1))); auto* ptr = accessor.get(); - auto b = - std::make_unique<ast::Variable>("b", ast::StorageClass::kFunction, &f32); + auto b = create<ast::Variable>("b", ast::StorageClass::kFunction, &f32); b->set_constructor(std::move(accessor)); DeclareVariable(std::move(b)); @@ -940,19 +923,18 @@ SetupFunctionAndBody(); DeclareVariable( - std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &mat)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &mat)); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 5u))), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 1u))); + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 5u))), + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 1u))); auto* ptr = accessor.get(); - auto b = - std::make_unique<ast::Variable>("b", ast::StorageClass::kFunction, &f32); + auto b = create<ast::Variable>("b", ast::StorageClass::kFunction, &f32); b->set_constructor(std::move(accessor)); DeclareVariable(std::move(b)); @@ -996,19 +978,18 @@ SetupFunctionAndBody(); DeclareVariable( - std::make_unique<ast::Variable>("a", ast::StorageClass::kFunction, &mat)); + create<ast::Variable>("a", ast::StorageClass::kFunction, &mat)); - auto accessor = std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::ArrayAccessorExpression>( - std::make_unique<ast::IdentifierExpression>("a"), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 2u))), - std::make_unique<ast::ScalarConstructorExpression>( - std::make_unique<ast::UintLiteral>(&u32, 5u))); + auto accessor = create<ast::ArrayAccessorExpression>( + create<ast::ArrayAccessorExpression>( + create<ast::IdentifierExpression>("a"), + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 2u))), + create<ast::ScalarConstructorExpression>( + create<ast::UintLiteral>(&u32, 5u))); auto* ptr = accessor.get(); - auto b = - std::make_unique<ast::Variable>("b", ast::StorageClass::kFunction, &f32); + auto b = create<ast::Variable>("b", ast::StorageClass::kFunction, &f32); b->set_constructor(std::move(accessor)); DeclareVariable(std::move(b));
diff --git a/src/transform/vertex_pulling_transform_test.cc b/src/transform/vertex_pulling_transform_test.cc index 4a5715e..a9b0c8c 100644 --- a/src/transform/vertex_pulling_transform_test.cc +++ b/src/transform/vertex_pulling_transform_test.cc
@@ -35,17 +35,17 @@ class VertexPullingTransformHelper { public: VertexPullingTransformHelper() { - mod_ = std::make_unique<ast::Module>(); + mod_ = create<ast::Module>(); transform_ = std::make_unique<VertexPullingTransform>(&ctx_, mod_.get()); } // Create basic module with an entry point and vertex function void InitBasicModule() { - auto func = std::make_unique<ast::Function>( + auto func = create<ast::Function>( "main", ast::VariableList{}, ctx_.type_mgr().Get(std::make_unique<ast::type::VoidType>())); - func->add_decoration(std::make_unique<ast::StageDecoration>( - ast::PipelineStage ::kVertex, Source{})); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage ::kVertex, Source{})); mod()->AddFunction(std::move(func)); } @@ -65,12 +65,11 @@ void AddVertexInputVariable(uint32_t location, std::string name, ast::type::Type* type) { - auto var = std::make_unique<ast::DecoratedVariable>( - std::make_unique<ast::Variable>(name, ast::StorageClass::kInput, type)); + auto var = create<ast::DecoratedVariable>( + create<ast::Variable>(name, ast::StorageClass::kInput, type)); ast::VariableDecorationList decorations; - decorations.push_back( - std::make_unique<ast::LocationDecoration>(location, Source{})); + decorations.push_back(create<ast::LocationDecoration>(location, Source{})); var->set_decorations(std::move(decorations)); mod_->AddGlobalVariable(std::move(var)); @@ -80,6 +79,13 @@ ast::Module* mod() { return mod_.get(); } VertexPullingTransform* transform() { return transform_.get(); } + /// @return a `std::unique_ptr` to a new `T` constructed with `args` + /// @param args the arguments to forward to the constructor for `T` + template <typename T, typename... ARGS> + std::unique_ptr<T> create(ARGS&&... args) { + return std::make_unique<T>(std::forward<ARGS>(args)...); + } + private: Context ctx_; std::unique_ptr<ast::Module> mod_; @@ -110,11 +116,11 @@ } TEST_F(VertexPullingTransformTest, Error_EntryPointWrongStage) { - auto func = std::make_unique<ast::Function>( + auto func = create<ast::Function>( "main", ast::VariableList{}, ctx()->type_mgr().Get(std::make_unique<ast::type::VoidType>())); - func->add_decoration(std::make_unique<ast::StageDecoration>( - ast::PipelineStage::kFragment, Source{})); + func->add_decoration( + create<ast::StageDecoration>(ast::PipelineStage::kFragment, Source{})); mod()->AddFunction(std::move(func)); InitTransform({}); @@ -392,26 +398,26 @@ ast::type::I32Type i32; { - auto vertex_index_var = std::make_unique<ast::DecoratedVariable>( - std::make_unique<ast::Variable>("custom_vertex_index", - ast::StorageClass::kInput, &i32)); + auto vertex_index_var = + create<ast::DecoratedVariable>(create<ast::Variable>( + "custom_vertex_index", ast::StorageClass::kInput, &i32)); ast::VariableDecorationList decorations; - decorations.push_back(std::make_unique<ast::BuiltinDecoration>( - ast::Builtin::kVertexIdx, Source{})); + decorations.push_back( + create<ast::BuiltinDecoration>(ast::Builtin::kVertexIdx, Source{})); vertex_index_var->set_decorations(std::move(decorations)); mod()->AddGlobalVariable(std::move(vertex_index_var)); } { - auto instance_index_var = std::make_unique<ast::DecoratedVariable>( - std::make_unique<ast::Variable>("custom_instance_index", - ast::StorageClass::kInput, &i32)); + auto instance_index_var = + create<ast::DecoratedVariable>(create<ast::Variable>( + "custom_instance_index", ast::StorageClass::kInput, &i32)); ast::VariableDecorationList decorations; - decorations.push_back(std::make_unique<ast::BuiltinDecoration>( - ast::Builtin::kInstanceIdx, Source{})); + decorations.push_back( + create<ast::BuiltinDecoration>(ast::Builtin::kInstanceIdx, Source{})); instance_index_var->set_decorations(std::move(decorations)); mod()->AddGlobalVariable(std::move(instance_index_var));