ProgramBuilder: make Const helpers require a constructor arg
This was originally used to find and fix tests that were not
initializing constants, but these were independently fixed by jrprice@
recently (see https://dawn-review.googlesource.com/c/tint/+/50042)
recently. Still, this change is useful to avoid this happening again.
Bug: tint:792
Change-Id: I0119a1a6ade7a70a0d110ef0aac80f4eaf37a7b4
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/50560
Commit-Queue: Antonio Maiorano <amaiorano@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/program_builder.h b/src/program_builder.h
index 53ad9cb..acefa08 100644
--- a/src/program_builder.h
+++ b/src/program_builder.h
@@ -1218,13 +1218,13 @@
/// @param name the variable name
/// @param type the variable type
- /// @param constructor optional constructor expression
+ /// @param constructor constructor expression
/// @param decorations optional variable decorations
/// @returns a constant `ast::Variable` with the given name and type
template <typename NAME>
ast::Variable* Const(NAME&& name,
ast::Type* type,
- ast::Expression* constructor = nullptr,
+ ast::Expression* constructor,
ast::DecorationList decorations = {}) {
type = ty.MaybeCreateTypename(type);
return create<ast::Variable>(Sym(std::forward<NAME>(name)),
@@ -1235,14 +1235,14 @@
/// @param source the variable source
/// @param name the variable name
/// @param type the variable type
- /// @param constructor optional constructor expression
+ /// @param constructor constructor expression
/// @param decorations optional variable decorations
/// @returns a constant `ast::Variable` with the given name and type
template <typename NAME>
ast::Variable* Const(const Source& source,
NAME&& name,
ast::Type* type,
- ast::Expression* constructor = nullptr,
+ ast::Expression* constructor,
ast::DecorationList decorations = {}) {
type = ty.MaybeCreateTypename(type);
return create<ast::Variable>(source, Sym(std::forward<NAME>(name)),
@@ -1320,13 +1320,40 @@
return var;
}
- /// @param args the arguments to pass to Const()
+ /// @param name the variable name
+ /// @param type the variable type
+ /// @param constructor constructor expression
+ /// @param decorations optional variable decorations
/// @returns a const `ast::Variable` constructed by calling Var() with the
/// arguments of `args`, which is automatically registered as a global
/// variable with the ast::Module.
- template <typename... ARGS>
- ast::Variable* GlobalConst(ARGS&&... args) {
- auto* var = Const(std::forward<ARGS>(args)...);
+ template <typename NAME>
+ ast::Variable* GlobalConst(NAME&& name,
+ typ::Type type,
+ ast::Expression* constructor,
+ ast::DecorationList decorations = {}) {
+ auto* var = Const(std::forward<NAME>(name), type, constructor,
+ std::move(decorations));
+ AST().AddGlobalVariable(var);
+ return var;
+ }
+
+ /// @param source the variable source
+ /// @param name the variable name
+ /// @param type the variable type
+ /// @param constructor constructor expression
+ /// @param decorations optional variable decorations
+ /// @returns a const `ast::Variable` constructed by calling Var() with the
+ /// arguments of `args`, which is automatically registered as a global
+ /// variable with the ast::Module.
+ template <typename NAME>
+ ast::Variable* GlobalConst(const Source& source,
+ NAME&& name,
+ typ::Type type,
+ ast::Expression* constructor,
+ ast::DecorationList decorations = {}) {
+ auto* var = Const(source, std::forward<NAME>(name), type, constructor,
+ std::move(decorations));
AST().AddGlobalVariable(var);
return var;
}