tint: Implement const eval of unary complement
Bug: tint:1581
Bug: chromium:1343242
Change-Id: I76b4f041494ceb2afcf5a604fcda32e046ffca35
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/96100
Reviewed-by: Antonio Maiorano <amaiorano@google.com>
Commit-Queue: Ben Clayton <bclayton@google.com>
diff --git a/src/tint/intrinsics.def b/src/tint/intrinsics.def
index 3d4a369..5dd6168 100644
--- a/src/tint/intrinsics.def
+++ b/src/tint/intrinsics.def
@@ -131,6 +131,7 @@
match fiu32: f32 | i32 | u32
match fi32: f32 | i32
match iu32: i32 | u32
+match aiu32: ai | i32 | u32
match scalar: f32 | f16 | i32 | u32 | bool
match abstract_or_scalar: ai | af | f32 | f16 | i32 | u32 | bool
match af_f32: af | f32
@@ -816,8 +817,8 @@
op ! (bool) -> bool
op ! <N: num> (vec<N, bool>) -> vec<N, bool>
-op ~ <T: iu32>(T) -> T
-op ~ <T: iu32, N: num> (vec<N, T>) -> vec<N, T>
+@const op ~ <T: aiu32>(T) -> T
+@const op ~ <T: aiu32, N: num> (vec<N, T>) -> vec<N, T>
op - <T: fi32>(T) -> T
op - <T: fi32, N: num> (vec<N, T>) -> vec<N, T>
diff --git a/src/tint/resolver/const_eval.cc b/src/tint/resolver/const_eval.cc
index 033c565..4a8c097 100644
--- a/src/tint/resolver/const_eval.cc
+++ b/src/tint/resolver/const_eval.cc
@@ -64,6 +64,20 @@
[&](const sem::Bool*) { return f(static_cast<bool>(0)); });
}
+/// IntegerDispatch is a helper for calling the function `f`, passing the integer value of the
+/// constant c.
+/// @returns the value returned by calling `f`.
+/// @note `c` must be of an integer type. Other types will not call `f`, and will return the
+/// zero-initialized value of the return type for `f`
+template <typename F>
+auto IntegerDispatch(const sem::Constant* c, F&& f) {
+ return Switch(
+ c->Type(), //
+ [&](const sem::AbstractInt*) { return f(c->As<AInt>()); }, //
+ [&](const sem::I32*) { return f(c->As<i32>()); }, //
+ [&](const sem::U32*) { return f(c->As<u32>()); });
+}
+
/// @returns `value` if `T` is not a Number, otherwise ValueOf returns the inner value of the
/// Number.
template <typename T>
@@ -100,6 +114,9 @@
/// Element implements the Constant interface.
template <typename T>
struct Element : Constant {
+ static_assert(!std::is_same_v<UnwrapNumber<T>, T> || std::is_same_v<T, bool>,
+ "T must be a Number or bool");
+
Element(const sem::Type* t, T v) : type(t), value(v) {}
~Element() override = default;
const sem::Type* Type() const override { return type; }
@@ -395,6 +412,23 @@
}
}
+/// TransformElements constructs a new constant by applying the transformation function 'f' on each
+/// of the most deeply nested elements of 'c'.
+template <typename F>
+const Constant* TransformElements(ProgramBuilder& builder, const sem::Constant* c, F&& f) {
+ uint32_t n = 0;
+ auto* ty = c->Type();
+ auto* el_ty = sem::Type::ElementOf(ty, &n);
+ if (el_ty == ty) {
+ return f(c);
+ }
+ std::vector<const sem::Constant*> els(n);
+ for (uint32_t i = 0; i < n; i++) {
+ els[i] = TransformElements(builder, c->Index(i), f);
+ }
+ return CreateComposite(builder, c->Type(), std::move(els));
+}
+
} // namespace
ConstEval::ConstEval(ProgramBuilder& b) : builder(b) {}
@@ -478,7 +512,9 @@
return args[0]->ConstantValue();
}
-const sem::Constant* ConstEval::VecSplat(const sem::Type* ty, ArgumentList args, size_t) {
+const sem::Constant* ConstEval::VecSplat(const sem::Type* ty,
+ sem::Expression const* const* args,
+ size_t) {
if (auto* arg = args[0]->ConstantValue()) {
return builder.create<Splat>(ty, arg, static_cast<const sem::Vector*>(ty)->Width());
}
@@ -603,6 +639,16 @@
return nullptr;
}
+const sem::Constant* ConstEval::OpComplement(const sem::Type*,
+ sem::Expression const* const* args,
+ size_t) {
+ return TransformElements(builder, args[0]->ConstantValue(), [&](const sem::Constant* c) {
+ return IntegerDispatch(c, [&](auto i) { //
+ return CreateElement(builder, c->Type(), decltype(i)(~i.value));
+ });
+ });
+}
+
utils::Result<const sem::Constant*> ConstEval::Convert(const sem::Type* target_ty,
const sem::Constant* value,
const Source& source) {
diff --git a/src/tint/resolver/const_eval.h b/src/tint/resolver/const_eval.h
index 405e3db..b1e7352 100644
--- a/src/tint/resolver/const_eval.h
+++ b/src/tint/resolver/const_eval.h
@@ -174,6 +174,19 @@
/// @return the constructed value, or null if the value cannot be calculated
const sem::Constant* MatCtorV(const sem::Type* ty, ArgumentList args, size_t num_args);
+ ////////////////////////////////////////////////////////////////////////////
+ // Operators
+ ////////////////////////////////////////////////////////////////////////////
+
+ /// Complement operator '~'
+ /// @param ty the integer type
+ /// @param args the input arguments
+ /// @param num_args the number of input arguments (must be 1)
+ /// @return the result value, or null if the value cannot be calculated
+ const sem::Constant* OpComplement(const sem::Type* ty,
+ sem::Expression const* const* args,
+ size_t num_args);
+
private:
/// Adds the given error message to the diagnostics
void AddError(const std::string& msg, const Source& source) const;
diff --git a/src/tint/resolver/const_eval_test.cc b/src/tint/resolver/const_eval_test.cc
index 1afb8d5..dcc1604 100644
--- a/src/tint/resolver/const_eval_test.cc
+++ b/src/tint/resolver/const_eval_test.cc
@@ -26,13 +26,13 @@
namespace tint::resolver {
namespace {
-using ResolverConstantsTest = ResolverTest;
+using ResolverConstEvalTest = ResolverTest;
////////////////////////////////////////////////////////////////////////////////////////////////////
// Construction
////////////////////////////////////////////////////////////////////////////////////////////////////
-TEST_F(ResolverConstantsTest, Scalar_i32) {
+TEST_F(ResolverConstEvalTest, Scalar_i32) {
auto* expr = Expr(99_i);
WrapInFunction(expr);
@@ -48,7 +48,7 @@
EXPECT_EQ(sem->ConstantValue()->As<AInt>(), 99);
}
-TEST_F(ResolverConstantsTest, Scalar_u32) {
+TEST_F(ResolverConstEvalTest, Scalar_u32) {
auto* expr = Expr(99_u);
WrapInFunction(expr);
@@ -64,7 +64,7 @@
EXPECT_EQ(sem->ConstantValue()->As<AInt>(), 99u);
}
-TEST_F(ResolverConstantsTest, Scalar_f32) {
+TEST_F(ResolverConstEvalTest, Scalar_f32) {
auto* expr = Expr(9.9_f);
WrapInFunction(expr);
@@ -80,7 +80,7 @@
EXPECT_EQ(sem->ConstantValue()->As<AFloat>().value, 9.9f);
}
-TEST_F(ResolverConstantsTest, Scalar_f16) {
+TEST_F(ResolverConstEvalTest, Scalar_f16) {
Enable(ast::Extension::kF16);
auto* expr = Expr(9.9_h);
@@ -99,7 +99,7 @@
EXPECT_EQ(sem->ConstantValue()->As<AFloat>(), 9.8984375f);
}
-TEST_F(ResolverConstantsTest, Scalar_bool) {
+TEST_F(ResolverConstEvalTest, Scalar_bool) {
auto* expr = Expr(true);
WrapInFunction(expr);
@@ -115,7 +115,7 @@
EXPECT_EQ(sem->ConstantValue()->As<bool>(), true);
}
-TEST_F(ResolverConstantsTest, Vec3_ZeroInit_i32) {
+TEST_F(ResolverConstEvalTest, Vec3_ZeroInit_i32) {
auto* expr = vec3<i32>();
WrapInFunction(expr);
@@ -148,7 +148,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 0);
}
-TEST_F(ResolverConstantsTest, Vec3_ZeroInit_u32) {
+TEST_F(ResolverConstEvalTest, Vec3_ZeroInit_u32) {
auto* expr = vec3<u32>();
WrapInFunction(expr);
@@ -181,7 +181,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 0u);
}
-TEST_F(ResolverConstantsTest, Vec3_ZeroInit_f32) {
+TEST_F(ResolverConstEvalTest, Vec3_ZeroInit_f32) {
auto* expr = vec3<f32>();
WrapInFunction(expr);
@@ -214,7 +214,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 0._a);
}
-TEST_F(ResolverConstantsTest, Vec3_ZeroInit_f16) {
+TEST_F(ResolverConstEvalTest, Vec3_ZeroInit_f16) {
Enable(ast::Extension::kF16);
auto* expr = vec3<f16>();
@@ -249,7 +249,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 0._a);
}
-TEST_F(ResolverConstantsTest, Vec3_ZeroInit_bool) {
+TEST_F(ResolverConstEvalTest, Vec3_ZeroInit_bool) {
auto* expr = vec3<bool>();
WrapInFunction(expr);
@@ -282,7 +282,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<bool>(), false);
}
-TEST_F(ResolverConstantsTest, Vec3_Splat_i32) {
+TEST_F(ResolverConstEvalTest, Vec3_Splat_i32) {
auto* expr = vec3<i32>(99_i);
WrapInFunction(expr);
@@ -315,7 +315,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 99);
}
-TEST_F(ResolverConstantsTest, Vec3_Splat_u32) {
+TEST_F(ResolverConstEvalTest, Vec3_Splat_u32) {
auto* expr = vec3<u32>(99_u);
WrapInFunction(expr);
@@ -348,7 +348,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 99u);
}
-TEST_F(ResolverConstantsTest, Vec3_Splat_f32) {
+TEST_F(ResolverConstEvalTest, Vec3_Splat_f32) {
auto* expr = vec3<f32>(9.9_f);
WrapInFunction(expr);
@@ -381,7 +381,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 9.9f);
}
-TEST_F(ResolverConstantsTest, Vec3_Splat_f16) {
+TEST_F(ResolverConstEvalTest, Vec3_Splat_f16) {
Enable(ast::Extension::kF16);
auto* expr = vec3<f16>(9.9_h);
@@ -417,7 +417,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 9.8984375f);
}
-TEST_F(ResolverConstantsTest, Vec3_Splat_bool) {
+TEST_F(ResolverConstEvalTest, Vec3_Splat_bool) {
auto* expr = vec3<bool>(true);
WrapInFunction(expr);
@@ -450,7 +450,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<bool>(), true);
}
-TEST_F(ResolverConstantsTest, Vec3_FullConstruct_i32) {
+TEST_F(ResolverConstEvalTest, Vec3_FullConstruct_i32) {
auto* expr = vec3<i32>(1_i, 2_i, 3_i);
WrapInFunction(expr);
@@ -483,7 +483,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 3);
}
-TEST_F(ResolverConstantsTest, Vec3_FullConstruct_u32) {
+TEST_F(ResolverConstEvalTest, Vec3_FullConstruct_u32) {
auto* expr = vec3<u32>(1_u, 2_u, 3_u);
WrapInFunction(expr);
@@ -516,7 +516,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 3);
}
-TEST_F(ResolverConstantsTest, Vec3_FullConstruct_f32) {
+TEST_F(ResolverConstEvalTest, Vec3_FullConstruct_f32) {
auto* expr = vec3<f32>(1_f, 2_f, 3_f);
WrapInFunction(expr);
@@ -549,7 +549,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 3.f);
}
-TEST_F(ResolverConstantsTest, Vec3_FullConstruct_f16) {
+TEST_F(ResolverConstEvalTest, Vec3_FullConstruct_f16) {
Enable(ast::Extension::kF16);
auto* expr = vec3<f16>(1_h, 2_h, 3_h);
@@ -584,7 +584,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 3.f);
}
-TEST_F(ResolverConstantsTest, Vec3_FullConstruct_bool) {
+TEST_F(ResolverConstEvalTest, Vec3_FullConstruct_bool) {
auto* expr = vec3<bool>(true, false, true);
WrapInFunction(expr);
@@ -617,7 +617,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<bool>(), true);
}
-TEST_F(ResolverConstantsTest, Vec3_MixConstruct_i32) {
+TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_i32) {
auto* expr = vec3<i32>(1_i, vec2<i32>(2_i, 3_i));
WrapInFunction(expr);
@@ -650,7 +650,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 3);
}
-TEST_F(ResolverConstantsTest, Vec3_MixConstruct_u32) {
+TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_u32) {
auto* expr = vec3<u32>(vec2<u32>(1_u, 2_u), 3_u);
WrapInFunction(expr);
@@ -683,7 +683,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 3);
}
-TEST_F(ResolverConstantsTest, Vec3_MixConstruct_f32) {
+TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f32) {
auto* expr = vec3<f32>(1_f, vec2<f32>(2_f, 3_f));
WrapInFunction(expr);
@@ -716,7 +716,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 3.f);
}
-TEST_F(ResolverConstantsTest, Vec3_MixConstruct_f32_all_10) {
+TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f32_all_10) {
auto* expr = vec3<f32>(10_f, vec2<f32>(10_f, 10_f));
WrapInFunction(expr);
@@ -749,7 +749,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f32>(), 10_f);
}
-TEST_F(ResolverConstantsTest, Vec3_MixConstruct_f32_all_positive_0) {
+TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f32_all_positive_0) {
auto* expr = vec3<f32>(0_f, vec2<f32>(0_f, 0_f));
WrapInFunction(expr);
@@ -782,7 +782,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f32>(), 0_f);
}
-TEST_F(ResolverConstantsTest, Vec3_MixConstruct_f32_all_negative_0) {
+TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f32_all_negative_0) {
auto* expr = vec3<f32>(vec2<f32>(-0_f, -0_f), -0_f);
WrapInFunction(expr);
@@ -815,7 +815,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f32>(), -0_f);
}
-TEST_F(ResolverConstantsTest, Vec3_MixConstruct_f32_mixed_sign_0) {
+TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f32_mixed_sign_0) {
auto* expr = vec3<f32>(0_f, vec2<f32>(-0_f, 0_f));
WrapInFunction(expr);
@@ -848,7 +848,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f32>(), 0_f);
}
-TEST_F(ResolverConstantsTest, Vec3_MixConstruct_f16) {
+TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f16) {
Enable(ast::Extension::kF16);
auto* expr = vec3<f16>(1_h, vec2<f16>(2_h, 3_h));
@@ -883,7 +883,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 3.f);
}
-TEST_F(ResolverConstantsTest, Vec3_MixConstruct_f16_all_10) {
+TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f16_all_10) {
Enable(ast::Extension::kF16);
auto* expr = vec3<f16>(10_h, vec2<f16>(10_h, 10_h));
@@ -918,7 +918,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f16>(), 10_h);
}
-TEST_F(ResolverConstantsTest, Vec3_MixConstruct_f16_all_positive_0) {
+TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f16_all_positive_0) {
Enable(ast::Extension::kF16);
auto* expr = vec3<f16>(0_h, vec2<f16>(0_h, 0_h));
@@ -953,7 +953,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f16>(), 0_h);
}
-TEST_F(ResolverConstantsTest, Vec3_MixConstruct_f16_all_negative_0) {
+TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f16_all_negative_0) {
Enable(ast::Extension::kF16);
auto* expr = vec3<f16>(vec2<f16>(-0_h, -0_h), -0_h);
@@ -988,7 +988,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f16>(), -0_h);
}
-TEST_F(ResolverConstantsTest, Vec3_MixConstruct_f16_mixed_sign_0) {
+TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f16_mixed_sign_0) {
Enable(ast::Extension::kF16);
auto* expr = vec3<f16>(0_h, vec2<f16>(-0_h, 0_h));
@@ -1023,7 +1023,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f16>(), 0_h);
}
-TEST_F(ResolverConstantsTest, Vec3_MixConstruct_bool) {
+TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_bool) {
auto* expr = vec3<bool>(vec2<bool>(true, false), true);
WrapInFunction(expr);
@@ -1056,7 +1056,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<bool>(), true);
}
-TEST_F(ResolverConstantsTest, Vec3_MixConstruct_all_true) {
+TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_all_true) {
auto* expr = vec3<bool>(true, vec2<bool>(true, true));
WrapInFunction(expr);
@@ -1089,7 +1089,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<bool>(), true);
}
-TEST_F(ResolverConstantsTest, Vec3_MixConstruct_all_false) {
+TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_all_false) {
auto* expr = vec3<bool>(false, vec2<bool>(false, false));
WrapInFunction(expr);
@@ -1122,7 +1122,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<bool>(), false);
}
-TEST_F(ResolverConstantsTest, Vec3_Convert_f32_to_i32) {
+TEST_F(ResolverConstEvalTest, Vec3_Convert_f32_to_i32) {
auto* expr = vec3<i32>(vec3<f32>(1.1_f, 2.2_f, 3.3_f));
WrapInFunction(expr);
@@ -1155,7 +1155,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 3);
}
-TEST_F(ResolverConstantsTest, Vec3_Convert_u32_to_f32) {
+TEST_F(ResolverConstEvalTest, Vec3_Convert_u32_to_f32) {
auto* expr = vec3<f32>(vec3<u32>(10_u, 20_u, 30_u));
WrapInFunction(expr);
@@ -1188,7 +1188,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 30.f);
}
-TEST_F(ResolverConstantsTest, Vec3_Convert_f16_to_i32) {
+TEST_F(ResolverConstEvalTest, Vec3_Convert_f16_to_i32) {
Enable(ast::Extension::kF16);
auto* expr = vec3<i32>(vec3<f16>(1.1_h, 2.2_h, 3.3_h));
@@ -1223,7 +1223,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 3_i);
}
-TEST_F(ResolverConstantsTest, Vec3_Convert_u32_to_f16) {
+TEST_F(ResolverConstEvalTest, Vec3_Convert_u32_to_f16) {
Enable(ast::Extension::kF16);
auto* expr = vec3<f16>(vec3<u32>(10_u, 20_u, 30_u));
@@ -1258,7 +1258,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 30.f);
}
-TEST_F(ResolverConstantsTest, Vec3_Convert_Large_f32_to_i32) {
+TEST_F(ResolverConstEvalTest, Vec3_Convert_Large_f32_to_i32) {
auto* expr = vec3<i32>(vec3<f32>(1e10_f, -1e20_f, 1e30_f));
WrapInFunction(expr);
@@ -1291,7 +1291,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), i32::kHighest);
}
-TEST_F(ResolverConstantsTest, Vec3_Convert_Large_f32_to_u32) {
+TEST_F(ResolverConstEvalTest, Vec3_Convert_Large_f32_to_u32) {
auto* expr = vec3<u32>(vec3<f32>(1e10_f, -1e20_f, 1e30_f));
WrapInFunction(expr);
@@ -1324,7 +1324,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), u32::kHighest);
}
-TEST_F(ResolverConstantsTest, Vec3_Convert_Large_f32_to_f16) {
+TEST_F(ResolverConstEvalTest, Vec3_Convert_Large_f32_to_f16) {
Enable(ast::Extension::kF16);
auto* expr = vec3<f16>(vec3<f32>(1e10_f, -1e20_f, 1e30_f));
@@ -1361,7 +1361,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), kInf);
}
-TEST_F(ResolverConstantsTest, Vec3_Convert_Small_f32_to_f16) {
+TEST_F(ResolverConstEvalTest, Vec3_Convert_Small_f32_to_f16) {
Enable(ast::Extension::kF16);
auto* expr = vec3<f16>(vec3<f32>(1e-20_f, -2e-30_f, 3e-40_f));
@@ -1399,7 +1399,7 @@
EXPECT_FALSE(std::signbit(sem->ConstantValue()->Index(2)->As<AFloat>().value));
}
-TEST_F(ResolverConstantsTest, Mat2x3_ZeroInit_f32) {
+TEST_F(ResolverConstEvalTest, Mat2x3_ZeroInit_f32) {
auto* expr = mat2x3<f32>();
WrapInFunction(expr);
@@ -1448,7 +1448,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->As<f32>(), 0._f);
}
-TEST_F(ResolverConstantsTest, Mat2x3_ZeroInit_f16) {
+TEST_F(ResolverConstEvalTest, Mat2x3_ZeroInit_f16) {
Enable(ast::Extension::kF16);
auto* expr = mat2x3<f16>();
@@ -1499,7 +1499,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->As<f16>(), 0._h);
}
-TEST_F(ResolverConstantsTest, Mat3x2_Construct_Scalars_af) {
+TEST_F(ResolverConstEvalTest, Mat3x2_Construct_Scalars_af) {
auto* expr = Construct(ty.mat(nullptr, 3, 2), 1.0_a, 2.0_a, 3.0_a, 4.0_a, 5.0_a, 6.0_a);
WrapInFunction(expr);
@@ -1548,7 +1548,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(1)->As<AFloat>(), 6._a);
}
-TEST_F(ResolverConstantsTest, Mat3x2_Construct_Columns_af) {
+TEST_F(ResolverConstEvalTest, Mat3x2_Construct_Columns_af) {
auto* expr = Construct(ty.mat(nullptr, 3, 2), //
vec(nullptr, 2u, 1.0_a, 2.0_a), //
vec(nullptr, 2u, 3.0_a, 4.0_a), //
@@ -1600,7 +1600,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(1)->As<AFloat>(), 6._a);
}
-TEST_F(ResolverConstantsTest, Array_i32_Zero) {
+TEST_F(ResolverConstEvalTest, Array_i32_Zero) {
auto* expr = Construct(ty.array<i32, 4>());
WrapInFunction(expr);
@@ -1638,7 +1638,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(3)->As<i32>(), 0_i);
}
-TEST_F(ResolverConstantsTest, Array_f32_Zero) {
+TEST_F(ResolverConstEvalTest, Array_f32_Zero) {
auto* expr = Construct(ty.array<f32, 4>());
WrapInFunction(expr);
@@ -1676,7 +1676,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(3)->As<f32>(), 0_f);
}
-TEST_F(ResolverConstantsTest, Array_vec3_f32_Zero) {
+TEST_F(ResolverConstEvalTest, Array_vec3_f32_Zero) {
auto* expr = Construct(ty.array(ty.vec3<f32>(), 2_u));
WrapInFunction(expr);
@@ -1724,7 +1724,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->As<f32>(), 0_f);
}
-TEST_F(ResolverConstantsTest, Array_Struct_f32_Zero) {
+TEST_F(ResolverConstEvalTest, Array_Struct_f32_Zero) {
Structure("S", {
Member("m1", ty.f32()),
Member("m2", ty.f32()),
@@ -1766,7 +1766,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->As<f32>(), 0_f);
}
-TEST_F(ResolverConstantsTest, Array_i32_Elements) {
+TEST_F(ResolverConstEvalTest, Array_i32_Elements) {
auto* expr = Construct(ty.array<i32, 4>(), 10_i, 20_i, 30_i, 40_i);
WrapInFunction(expr);
@@ -1804,7 +1804,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(3)->As<i32>(), 40_i);
}
-TEST_F(ResolverConstantsTest, Array_f32_Elements) {
+TEST_F(ResolverConstEvalTest, Array_f32_Elements) {
auto* expr = Construct(ty.array<f32, 4>(), 10_f, 20_f, 30_f, 40_f);
WrapInFunction(expr);
@@ -1842,7 +1842,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(3)->As<f32>(), 40_f);
}
-TEST_F(ResolverConstantsTest, Array_vec3_f32_Elements) {
+TEST_F(ResolverConstEvalTest, Array_vec3_f32_Elements) {
auto* expr = Construct(ty.array(ty.vec3<f32>(), 2_u), //
vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(4_f, 5_f, 6_f));
WrapInFunction(expr);
@@ -1867,7 +1867,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->As<f32>(), 6_f);
}
-TEST_F(ResolverConstantsTest, Array_Struct_f32_Elements) {
+TEST_F(ResolverConstEvalTest, Array_Struct_f32_Elements) {
Structure("S", {
Member("m1", ty.f32()),
Member("m2", ty.f32()),
@@ -1911,7 +1911,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->As<f32>(), 4_f);
}
-TEST_F(ResolverConstantsTest, Struct_I32s_ZeroInit) {
+TEST_F(ResolverConstEvalTest, Struct_I32s_ZeroInit) {
Structure("S", {Member("m1", ty.i32()), Member("m2", ty.i32()), Member("m3", ty.i32())});
auto* expr = Construct(ty.type_name("S"));
WrapInFunction(expr);
@@ -1948,7 +1948,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<i32>(), 0_i);
}
-TEST_F(ResolverConstantsTest, Struct_MixedScalars_ZeroInit) {
+TEST_F(ResolverConstEvalTest, Struct_MixedScalars_ZeroInit) {
Enable(ast::Extension::kF16);
Structure("S", {
@@ -2005,7 +2005,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(4)->As<bool>(), false);
}
-TEST_F(ResolverConstantsTest, Struct_VectorF32s_ZeroInit) {
+TEST_F(ResolverConstEvalTest, Struct_VectorF32s_ZeroInit) {
Structure("S", {
Member("m1", ty.vec3<f32>()),
Member("m2", ty.vec3<f32>()),
@@ -2055,7 +2055,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(2)->As<f32>(), 0._f);
}
-TEST_F(ResolverConstantsTest, Struct_MixedVectors_ZeroInit) {
+TEST_F(ResolverConstEvalTest, Struct_MixedVectors_ZeroInit) {
Enable(ast::Extension::kF16);
Structure("S", {
@@ -2126,7 +2126,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(4)->Index(1)->As<bool>(), false);
}
-TEST_F(ResolverConstantsTest, Struct_Struct_ZeroInit) {
+TEST_F(ResolverConstEvalTest, Struct_Struct_ZeroInit) {
Structure("Inner", {
Member("m1", ty.i32()),
Member("m2", ty.u32()),
@@ -2170,7 +2170,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->As<f32>(), 0_f);
}
-TEST_F(ResolverConstantsTest, Struct_MixedScalars_Construct) {
+TEST_F(ResolverConstEvalTest, Struct_MixedScalars_Construct) {
Enable(ast::Extension::kF16);
Structure("S", {
@@ -2227,7 +2227,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(4)->As<bool>(), false);
}
-TEST_F(ResolverConstantsTest, Struct_MixedVectors_Construct) {
+TEST_F(ResolverConstEvalTest, Struct_MixedVectors_Construct) {
Enable(ast::Extension::kF16);
Structure("S", {
@@ -2299,7 +2299,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(4)->Index(1)->As<bool>(), false);
}
-TEST_F(ResolverConstantsTest, Struct_Struct_Construct) {
+TEST_F(ResolverConstEvalTest, Struct_Struct_Construct) {
Structure("Inner", {
Member("m1", ty.i32()),
Member("m2", ty.u32()),
@@ -2345,7 +2345,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->As<f32>(), 6_f);
}
-TEST_F(ResolverConstantsTest, Struct_Array_Construct) {
+TEST_F(ResolverConstEvalTest, Struct_Array_Construct) {
Structure("S", {
Member("m1", ty.array<i32, 2>()),
Member("m2", ty.array<f32, 3>()),
@@ -2388,7 +2388,7 @@
// Indexing
////////////////////////////////////////////////////////////////////////////////////////////////////
-TEST_F(ResolverConstantsTest, Vec3_Index) {
+TEST_F(ResolverConstEvalTest, Vec3_Index) {
auto* expr = IndexAccessor(vec3<i32>(1_i, 2_i, 3_i), 2_i);
WrapInFunction(expr);
@@ -2404,7 +2404,7 @@
EXPECT_EQ(sem->ConstantValue()->As<i32>(), 3_i);
}
-TEST_F(ResolverConstantsTest, Vec3_Index_OOB_High) {
+TEST_F(ResolverConstEvalTest, Vec3_Index_OOB_High) {
auto* expr = IndexAccessor(vec3<i32>(1_i, 2_i, 3_i), Expr(Source{{12, 34}}, 3_i));
WrapInFunction(expr);
@@ -2421,7 +2421,7 @@
EXPECT_EQ(sem->ConstantValue()->As<i32>(), 3_i);
}
-TEST_F(ResolverConstantsTest, Vec3_Index_OOB_Low) {
+TEST_F(ResolverConstEvalTest, Vec3_Index_OOB_Low) {
auto* expr = IndexAccessor(vec3<i32>(1_i, 2_i, 3_i), Expr(Source{{12, 34}}, -3_i));
WrapInFunction(expr);
@@ -2438,7 +2438,7 @@
EXPECT_EQ(sem->ConstantValue()->As<i32>(), 1_i);
}
-TEST_F(ResolverConstantsTest, Vec3_Swizzle_Scalar) {
+TEST_F(ResolverConstEvalTest, Vec3_Swizzle_Scalar) {
auto* expr = MemberAccessor(vec3<i32>(1_i, 2_i, 3_i), "y");
WrapInFunction(expr);
@@ -2454,7 +2454,7 @@
EXPECT_EQ(sem->ConstantValue()->As<i32>(), 2_i);
}
-TEST_F(ResolverConstantsTest, Vec3_Swizzle_Vector) {
+TEST_F(ResolverConstEvalTest, Vec3_Swizzle_Vector) {
auto* expr = MemberAccessor(vec3<i32>(1_i, 2_i, 3_i), "zx");
WrapInFunction(expr);
@@ -2478,7 +2478,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f32>(), 1._a);
}
-TEST_F(ResolverConstantsTest, Vec3_Swizzle_Chain) {
+TEST_F(ResolverConstEvalTest, Vec3_Swizzle_Chain) {
auto* expr = // (1, 2, 3) -> (2, 3, 1) -> (3, 2) -> 2
MemberAccessor(MemberAccessor(MemberAccessor(vec3<i32>(1_i, 2_i, 3_i), "gbr"), "yx"), "y");
WrapInFunction(expr);
@@ -2495,7 +2495,7 @@
EXPECT_EQ(sem->ConstantValue()->As<i32>(), 2_i);
}
-TEST_F(ResolverConstantsTest, Mat3x2_Index) {
+TEST_F(ResolverConstEvalTest, Mat3x2_Index) {
auto* expr = IndexAccessor(
mat3x2<f32>(vec2<f32>(1._a, 2._a), vec2<f32>(3._a, 4._a), vec2<f32>(5._a, 6._a)), 2_i);
WrapInFunction(expr);
@@ -2520,7 +2520,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f32>(), 6._a);
}
-TEST_F(ResolverConstantsTest, Mat3x2_Index_OOB_High) {
+TEST_F(ResolverConstEvalTest, Mat3x2_Index_OOB_High) {
auto* expr = IndexAccessor(
mat3x2<f32>(vec2<f32>(1._a, 2._a), vec2<f32>(3._a, 4._a), vec2<f32>(5._a, 6._a)),
Expr(Source{{12, 34}}, 3_i));
@@ -2547,7 +2547,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f32>(), 6._a);
}
-TEST_F(ResolverConstantsTest, Mat3x2_Index_OOB_Low) {
+TEST_F(ResolverConstEvalTest, Mat3x2_Index_OOB_Low) {
auto* expr = IndexAccessor(
mat3x2<f32>(vec2<f32>(1._a, 2._a), vec2<f32>(3._a, 4._a), vec2<f32>(5._a, 6._a)),
Expr(Source{{12, 34}}, -3_i));
@@ -2574,7 +2574,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f32>(), 2._a);
}
-TEST_F(ResolverConstantsTest, Array_vec3_f32_Index) {
+TEST_F(ResolverConstEvalTest, Array_vec3_f32_Index) {
auto* expr = IndexAccessor(Construct(ty.array(ty.vec3<f32>(), 2_u), //
vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(4_f, 5_f, 6_f)),
1_i);
@@ -2606,7 +2606,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f32>(), 6_f);
}
-TEST_F(ResolverConstantsTest, Array_vec3_f32_Index_OOB_High) {
+TEST_F(ResolverConstEvalTest, Array_vec3_f32_Index_OOB_High) {
auto* expr = IndexAccessor(Construct(ty.array(ty.vec3<f32>(), 2_u), //
vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(4_f, 5_f, 6_f)),
Expr(Source{{12, 34}}, 2_i));
@@ -2639,7 +2639,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f32>(), 6_f);
}
-TEST_F(ResolverConstantsTest, Array_vec3_f32_Index_OOB_Low) {
+TEST_F(ResolverConstEvalTest, Array_vec3_f32_Index_OOB_Low) {
auto* expr = IndexAccessor(Construct(ty.array(ty.vec3<f32>(), 2_u), //
vec3<f32>(1_f, 2_f, 3_f), vec3<f32>(4_f, 5_f, 6_f)),
Expr(Source{{12, 34}}, -2_i));
@@ -2675,7 +2675,7 @@
EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f32>(), 3_f);
}
-TEST_F(ResolverConstantsTest, ChainedIndex) {
+TEST_F(ResolverConstEvalTest, ChainedIndex) {
auto* arr_expr = Construct(ty.array(ty.mat2x3<f32>(), 2_u), // array<mat2x3<f32>, 2u>
mat2x3<f32>(vec3<f32>(1_f, 2_f, 3_f), //
vec3<f32>(4_f, 5_f, 6_f)), //
@@ -2771,7 +2771,7 @@
}
}
-TEST_F(ResolverConstantsTest, ChainedIndex_OOB) {
+TEST_F(ResolverConstEvalTest, ChainedIndex_OOB) {
auto* arr_expr = Construct(ty.array(ty.mat2x3<f32>(), 2_u), // array<mat2x3<f32>, 2u>
mat2x3<f32>(vec3<f32>(1_f, 2_f, 3_f), //
vec3<f32>(4_f, 5_f, 6_f)), //
@@ -2874,7 +2874,7 @@
// Member accessing
////////////////////////////////////////////////////////////////////////////////////////////////////
-TEST_F(ResolverConstantsTest, MemberAccess) {
+TEST_F(ResolverConstEvalTest, MemberAccess) {
Structure("Inner", {
Member("i1", ty.i32()),
Member("i2", ty.u32()),
@@ -2924,5 +2924,83 @@
EXPECT_EQ(i2->ConstantValue()->As<u32>(), 2_u);
}
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Unary op
+////////////////////////////////////////////////////////////////////////////////////////////////////
+namespace unary_op {
+
+template <typename T>
+struct Values {
+ T input;
+ T expect;
+};
+
+struct Case {
+ std::variant<Values<AInt>, Values<u32>, Values<i32>> values;
+};
+
+static std::ostream& operator<<(std::ostream& o, const Case& c) {
+ std::visit([&](auto&& v) { o << v.input; }, c.values);
+ return o;
+}
+
+template <typename T>
+Case C(T input, T expect) {
+ return Case{Values<T>{input, expect}};
+}
+
+using ResolverConstEvalUnaryOpTest = ResolverTestWithParam<std::tuple<ast::UnaryOp, Case>>;
+
+TEST_P(ResolverConstEvalUnaryOpTest, Test) {
+ auto op = std::get<0>(GetParam());
+ auto c = std::get<1>(GetParam());
+ std::visit(
+ [&](auto&& values) {
+ using T = decltype(values.expect);
+ auto* expr = create<ast::UnaryOpExpression>(op, Expr(values.input));
+ GlobalConst("C", nullptr, expr);
+
+ EXPECT_TRUE(r()->Resolve()) << r()->error();
+
+ auto* sem = Sem().Get(expr);
+ const sem::Constant* value = sem->ConstantValue();
+ ASSERT_NE(value, nullptr);
+ EXPECT_TYPE(value->Type(), sem->Type());
+ EXPECT_EQ(value->As<T>(), values.expect);
+
+ if constexpr (IsInteger<UnwrapNumber<T>>) {
+ // Check that the constant's integer doesn't contain unexpected data in the MSBs
+ // that are outside of the bit-width of T.
+ EXPECT_EQ(value->As<AInt>(), AInt(values.expect));
+ }
+ },
+ c.values);
+}
+INSTANTIATE_TEST_SUITE_P(Complement,
+ ResolverConstEvalUnaryOpTest,
+ testing::Combine(testing::Values(ast::UnaryOp::kComplement),
+ testing::ValuesIn({
+ // AInt
+ C(0_a, 0xffffffffffffffff_a),
+ C(0xffffffffffffffff_a, 0_a),
+ C(0xf0f0f0f0f0f0f0f0_a, 0x0f0f0f0f0f0f0f0f_a),
+ C(0xaaaaaaaaaaaaaaaa_a, 0x5555555555555555_a),
+ C(0x5555555555555555_a, 0xaaaaaaaaaaaaaaaa_a),
+ // u32
+ C(0_u, 0xffffffff_u),
+ C(0xffffffff_u, 0_u),
+ C(0xf0f0f0f0_u, 0x0f0f0f0f_u),
+ C(0xaaaaaaaa_u, 0x55555555_u),
+ C(0x55555555_u, 0xaaaaaaaa_u),
+ // i32
+ C(0_i, -1_i),
+ C(-1_i, 0_i),
+ C(1_i, -2_i),
+ C(-2_i, 1_i),
+ C(2_i, -3_i),
+ C(-3_i, 2_i),
+ })));
+} // namespace unary_op
+
} // namespace
} // namespace tint::resolver
diff --git a/src/tint/resolver/intrinsic_table.cc b/src/tint/resolver/intrinsic_table.cc
index 68a1068..730e2cd 100644
--- a/src/tint/resolver/intrinsic_table.cc
+++ b/src/tint/resolver/intrinsic_table.cc
@@ -1164,7 +1164,11 @@
return {};
}
- return UnaryOperator{match.return_type, match.parameters[0].type};
+ return UnaryOperator{
+ match.return_type,
+ match.parameters[0].type,
+ match.overload->const_eval_fn,
+ };
}
IntrinsicTable::BinaryOperator Impl::Lookup(ast::BinaryOp op,
@@ -1235,7 +1239,12 @@
return {};
}
- return BinaryOperator{match.return_type, match.parameters[0].type, match.parameters[1].type};
+ return BinaryOperator{
+ match.return_type,
+ match.parameters[0].type,
+ match.parameters[1].type,
+ match.overload->const_eval_fn,
+ };
}
IntrinsicTable::CtorOrConv Impl::Lookup(CtorConvIntrinsic type,
diff --git a/src/tint/resolver/intrinsic_table.inl b/src/tint/resolver/intrinsic_table.inl
index 0fe0faf..80f92ba 100644
--- a/src/tint/resolver/intrinsic_table.inl
+++ b/src/tint/resolver/intrinsic_table.inl
@@ -1715,8 +1715,46 @@
return ss.str();
}
-/// TypeMatcher for 'match scalar'
+/// TypeMatcher for 'match aiu32'
/// @see src/tint/intrinsics.def:134:7
+class Aiu32 : public TypeMatcher {
+ public:
+ /// Checks whether the given type matches the matcher rules, and returns the
+ /// expected, canonicalized type on success.
+ /// Match may define and refine the template types and numbers in state.
+ /// @param state the MatchState
+ /// @param type the type to match
+ /// @returns the canonicalized type on match, otherwise nullptr
+ const sem::Type* Match(MatchState& state,
+ const sem::Type* type) const override;
+ /// @param state the MatchState
+ /// @return a string representation of the matcher.
+ std::string String(MatchState* state) const override;
+};
+
+const sem::Type* Aiu32::Match(MatchState& state, const sem::Type* ty) const {
+ if (match_ai(ty)) {
+ return build_ai(state);
+ }
+ if (match_i32(ty)) {
+ return build_i32(state);
+ }
+ if (match_u32(ty)) {
+ return build_u32(state);
+ }
+ return nullptr;
+}
+
+std::string Aiu32::String(MatchState*) const {
+ std::stringstream ss;
+ // Note: We pass nullptr to the TypeMatcher::String() functions, as 'matcher's do not support
+ // template arguments, nor can they match sub-types. As such, they have no use for the MatchState.
+ ss << Ai().String(nullptr) << ", " << I32().String(nullptr) << " or " << U32().String(nullptr);
+ return ss.str();
+}
+
+/// TypeMatcher for 'match scalar'
+/// @see src/tint/intrinsics.def:135:7
class Scalar : public TypeMatcher {
public:
/// Checks whether the given type matches the matcher rules, and returns the
@@ -1760,7 +1798,7 @@
}
/// TypeMatcher for 'match abstract_or_scalar'
-/// @see src/tint/intrinsics.def:135:7
+/// @see src/tint/intrinsics.def:136:7
class AbstractOrScalar : public TypeMatcher {
public:
/// Checks whether the given type matches the matcher rules, and returns the
@@ -1810,7 +1848,7 @@
}
/// TypeMatcher for 'match af_f32'
-/// @see src/tint/intrinsics.def:136:7
+/// @see src/tint/intrinsics.def:137:7
class AfF32 : public TypeMatcher {
public:
/// Checks whether the given type matches the matcher rules, and returns the
@@ -1845,7 +1883,7 @@
}
/// TypeMatcher for 'match af_f32f16'
-/// @see src/tint/intrinsics.def:137:7
+/// @see src/tint/intrinsics.def:138:7
class AfF32F16 : public TypeMatcher {
public:
/// Checks whether the given type matches the matcher rules, and returns the
@@ -1883,7 +1921,7 @@
}
/// TypeMatcher for 'match scalar_no_f32'
-/// @see src/tint/intrinsics.def:138:7
+/// @see src/tint/intrinsics.def:139:7
class ScalarNoF32 : public TypeMatcher {
public:
/// Checks whether the given type matches the matcher rules, and returns the
@@ -1924,7 +1962,7 @@
}
/// TypeMatcher for 'match scalar_no_f16'
-/// @see src/tint/intrinsics.def:139:7
+/// @see src/tint/intrinsics.def:140:7
class ScalarNoF16 : public TypeMatcher {
public:
/// Checks whether the given type matches the matcher rules, and returns the
@@ -1965,7 +2003,7 @@
}
/// TypeMatcher for 'match scalar_no_i32'
-/// @see src/tint/intrinsics.def:140:7
+/// @see src/tint/intrinsics.def:141:7
class ScalarNoI32 : public TypeMatcher {
public:
/// Checks whether the given type matches the matcher rules, and returns the
@@ -2006,7 +2044,7 @@
}
/// TypeMatcher for 'match scalar_no_u32'
-/// @see src/tint/intrinsics.def:141:7
+/// @see src/tint/intrinsics.def:142:7
class ScalarNoU32 : public TypeMatcher {
public:
/// Checks whether the given type matches the matcher rules, and returns the
@@ -2047,7 +2085,7 @@
}
/// TypeMatcher for 'match scalar_no_bool'
-/// @see src/tint/intrinsics.def:142:7
+/// @see src/tint/intrinsics.def:143:7
class ScalarNoBool : public TypeMatcher {
public:
/// Checks whether the given type matches the matcher rules, and returns the
@@ -2088,7 +2126,7 @@
}
/// EnumMatcher for 'match f32_texel_format'
-/// @see src/tint/intrinsics.def:153:7
+/// @see src/tint/intrinsics.def:154:7
class F32TexelFormat : public NumberMatcher {
public:
/// Checks whether the given number matches the enum matcher rules.
@@ -2121,7 +2159,7 @@
}
/// EnumMatcher for 'match i32_texel_format'
-/// @see src/tint/intrinsics.def:155:7
+/// @see src/tint/intrinsics.def:156:7
class I32TexelFormat : public NumberMatcher {
public:
/// Checks whether the given number matches the enum matcher rules.
@@ -2153,7 +2191,7 @@
}
/// EnumMatcher for 'match u32_texel_format'
-/// @see src/tint/intrinsics.def:157:7
+/// @see src/tint/intrinsics.def:158:7
class U32TexelFormat : public NumberMatcher {
public:
/// Checks whether the given number matches the enum matcher rules.
@@ -2185,7 +2223,7 @@
}
/// EnumMatcher for 'match write_only'
-/// @see src/tint/intrinsics.def:160:7
+/// @see src/tint/intrinsics.def:161:7
class WriteOnly : public NumberMatcher {
public:
/// Checks whether the given number matches the enum matcher rules.
@@ -2211,7 +2249,7 @@
}
/// EnumMatcher for 'match function_private_workgroup'
-/// @see src/tint/intrinsics.def:162:7
+/// @see src/tint/intrinsics.def:163:7
class FunctionPrivateWorkgroup : public NumberMatcher {
public:
/// Checks whether the given number matches the enum matcher rules.
@@ -2241,7 +2279,7 @@
}
/// EnumMatcher for 'match workgroup_or_storage'
-/// @see src/tint/intrinsics.def:163:7
+/// @see src/tint/intrinsics.def:164:7
class WorkgroupOrStorage : public NumberMatcher {
public:
/// Checks whether the given number matches the enum matcher rules.
@@ -2404,6 +2442,7 @@
Fiu32 Fiu32_;
Fi32 Fi32_;
Iu32 Iu32_;
+ Aiu32 Aiu32_;
Scalar Scalar_;
AbstractOrScalar AbstractOrScalar_;
AfF32 AfF32_;
@@ -2430,7 +2469,7 @@
~Matchers();
/// The template types, types, and type matchers
- TypeMatcher const* const type[63] = {
+ TypeMatcher const* const type[64] = {
/* [0] */ &template_type_0_,
/* [1] */ &template_type_1_,
/* [2] */ &Bool_,
@@ -2485,15 +2524,16 @@
/* [51] */ &Fiu32_,
/* [52] */ &Fi32_,
/* [53] */ &Iu32_,
- /* [54] */ &Scalar_,
- /* [55] */ &AbstractOrScalar_,
- /* [56] */ &AfF32_,
- /* [57] */ &AfF32F16_,
- /* [58] */ &ScalarNoF32_,
- /* [59] */ &ScalarNoF16_,
- /* [60] */ &ScalarNoI32_,
- /* [61] */ &ScalarNoU32_,
- /* [62] */ &ScalarNoBool_,
+ /* [54] */ &Aiu32_,
+ /* [55] */ &Scalar_,
+ /* [56] */ &AbstractOrScalar_,
+ /* [57] */ &AfF32_,
+ /* [58] */ &AfF32F16_,
+ /* [59] */ &ScalarNoF32_,
+ /* [60] */ &ScalarNoF16_,
+ /* [61] */ &ScalarNoI32_,
+ /* [62] */ &ScalarNoU32_,
+ /* [63] */ &ScalarNoBool_,
};
/// The template numbers, and number matchers
@@ -7783,7 +7823,7 @@
{
/* [1] */
/* name */ "U",
- /* matcher index */ 62,
+ /* matcher index */ 63,
},
{
/* [2] */
@@ -7793,7 +7833,7 @@
{
/* [3] */
/* name */ "U",
- /* matcher index */ 58,
+ /* matcher index */ 59,
},
{
/* [4] */
@@ -7803,7 +7843,7 @@
{
/* [5] */
/* name */ "U",
- /* matcher index */ 59,
+ /* matcher index */ 60,
},
{
/* [6] */
@@ -7813,7 +7853,7 @@
{
/* [7] */
/* name */ "U",
- /* matcher index */ 61,
+ /* matcher index */ 62,
},
{
/* [8] */
@@ -7823,7 +7863,7 @@
{
/* [9] */
/* name */ "U",
- /* matcher index */ 60,
+ /* matcher index */ 61,
},
{
/* [10] */
@@ -7833,7 +7873,7 @@
{
/* [11] */
/* name */ "T",
- /* matcher index */ 57,
+ /* matcher index */ 58,
},
{
/* [12] */
@@ -7848,7 +7888,7 @@
{
/* [14] */
/* name */ "T",
- /* matcher index */ 55,
+ /* matcher index */ 56,
},
{
/* [15] */
@@ -7858,38 +7898,43 @@
{
/* [16] */
/* name */ "T",
- /* matcher index */ 54,
+ /* matcher index */ 55,
},
{
/* [17] */
/* name */ "T",
- /* matcher index */ 62,
+ /* matcher index */ 63,
},
{
/* [18] */
/* name */ "T",
- /* matcher index */ 59,
+ /* matcher index */ 60,
},
{
/* [19] */
/* name */ "T",
- /* matcher index */ 58,
+ /* matcher index */ 59,
},
{
/* [20] */
/* name */ "T",
- /* matcher index */ 61,
+ /* matcher index */ 62,
},
{
/* [21] */
/* name */ "T",
- /* matcher index */ 60,
+ /* matcher index */ 61,
},
{
/* [22] */
/* name */ "T",
/* matcher index */ 52,
},
+ {
+ /* [23] */
+ /* name */ "T",
+ /* matcher index */ 54,
+ },
};
constexpr TemplateNumberInfo kTemplateNumbers[] = {
@@ -8107,7 +8152,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[911],
/* return matcher indices */ &kMatcherIndices[116],
@@ -8119,7 +8164,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[643],
/* return matcher indices */ &kMatcherIndices[116],
@@ -8131,7 +8176,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[910],
/* return matcher indices */ &kMatcherIndices[116],
@@ -8143,7 +8188,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[647],
/* return matcher indices */ &kMatcherIndices[116],
@@ -8155,7 +8200,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[909],
/* return matcher indices */ &kMatcherIndices[116],
@@ -8167,7 +8212,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[651],
/* return matcher indices */ &kMatcherIndices[116],
@@ -8179,7 +8224,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[835],
/* return matcher indices */ &kMatcherIndices[116],
@@ -8191,7 +8236,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[655],
/* return matcher indices */ &kMatcherIndices[116],
@@ -8203,7 +8248,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[907],
/* return matcher indices */ &kMatcherIndices[116],
@@ -8215,7 +8260,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 2,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[3],
/* parameters */ &kParameters[905],
/* return matcher indices */ &kMatcherIndices[38],
@@ -8227,7 +8272,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 2,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[3],
/* parameters */ &kParameters[904],
/* return matcher indices */ &kMatcherIndices[116],
@@ -8239,7 +8284,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 2,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[3],
/* parameters */ &kParameters[903],
/* return matcher indices */ &kMatcherIndices[116],
@@ -8251,7 +8296,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 2,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[3],
/* parameters */ &kParameters[902],
/* return matcher indices */ &kMatcherIndices[57],
@@ -8263,7 +8308,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[901],
/* return matcher indices */ &kMatcherIndices[116],
@@ -8455,7 +8500,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[510],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8467,7 +8512,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[507],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8479,7 +8524,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[351],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8491,7 +8536,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[347],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8503,7 +8548,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[230],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8515,7 +8560,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[495],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8527,7 +8572,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[331],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8539,7 +8584,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[489],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8551,7 +8596,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[327],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8563,7 +8608,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[474],
/* return matcher indices */ &kMatcherIndices[14],
@@ -8575,7 +8620,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[323],
/* return matcher indices */ &kMatcherIndices[14],
@@ -8587,7 +8632,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[319],
/* return matcher indices */ &kMatcherIndices[14],
@@ -8599,7 +8644,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[165],
/* return matcher indices */ &kMatcherIndices[14],
@@ -8611,7 +8656,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[462],
/* return matcher indices */ &kMatcherIndices[14],
@@ -8623,7 +8668,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[339],
/* return matcher indices */ &kMatcherIndices[14],
@@ -8635,7 +8680,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[315],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8647,7 +8692,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[265],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8659,7 +8704,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[260],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8671,7 +8716,7 @@
/* num parameters */ 6,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[132],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8683,7 +8728,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[299],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8695,7 +8740,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[205],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8707,7 +8752,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[295],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8719,7 +8764,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[285],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8731,7 +8776,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[303],
/* return matcher indices */ &kMatcherIndices[14],
@@ -8743,7 +8788,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[275],
/* return matcher indices */ &kMatcherIndices[14],
@@ -8755,7 +8800,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[270],
/* return matcher indices */ &kMatcherIndices[14],
@@ -8767,7 +8812,7 @@
/* num parameters */ 6,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[90],
/* return matcher indices */ &kMatcherIndices[14],
@@ -8779,7 +8824,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[307],
/* return matcher indices */ &kMatcherIndices[14],
@@ -8791,7 +8836,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[255],
/* return matcher indices */ &kMatcherIndices[14],
@@ -8803,7 +8848,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[471],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8887,7 +8932,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[558],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8899,7 +8944,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[387],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8911,7 +8956,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[379],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8923,7 +8968,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[160],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8935,7 +8980,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[585],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8947,7 +8992,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[375],
/* return matcher indices */ &kMatcherIndices[112],
@@ -8959,7 +9004,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[486],
/* return matcher indices */ nullptr,
@@ -8971,7 +9016,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[492],
/* return matcher indices */ nullptr,
@@ -8983,7 +9028,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[335],
/* return matcher indices */ nullptr,
@@ -8995,7 +9040,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[498],
/* return matcher indices */ nullptr,
@@ -9007,7 +9052,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[501],
/* return matcher indices */ nullptr,
@@ -9019,7 +9064,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[504],
/* return matcher indices */ nullptr,
@@ -9031,7 +9076,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[311],
/* return matcher indices */ nullptr,
@@ -9043,7 +9088,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[513],
/* return matcher indices */ nullptr,
@@ -9055,7 +9100,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[516],
/* return matcher indices */ nullptr,
@@ -9067,7 +9112,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[465],
/* return matcher indices */ nullptr,
@@ -9079,7 +9124,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[359],
/* return matcher indices */ nullptr,
@@ -9091,7 +9136,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[519],
/* return matcher indices */ nullptr,
@@ -9307,7 +9352,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[874],
/* return matcher indices */ &kMatcherIndices[38],
@@ -9319,7 +9364,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[873],
/* return matcher indices */ &kMatcherIndices[38],
@@ -9331,7 +9376,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[872],
/* return matcher indices */ &kMatcherIndices[38],
@@ -9343,7 +9388,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[871],
/* return matcher indices */ &kMatcherIndices[38],
@@ -9403,7 +9448,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 2,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[719],
/* return matcher indices */ &kMatcherIndices[11],
@@ -9415,7 +9460,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 2,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[717],
/* return matcher indices */ &kMatcherIndices[11],
@@ -9427,7 +9472,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 2,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[1],
/* parameters */ &kParameters[715],
/* return matcher indices */ &kMatcherIndices[77],
@@ -9439,7 +9484,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 2,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[1],
/* parameters */ &kParameters[713],
/* return matcher indices */ &kMatcherIndices[34],
@@ -9451,7 +9496,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 3,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[0],
/* parameters */ &kParameters[711],
/* return matcher indices */ &kMatcherIndices[23],
@@ -9523,7 +9568,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[552],
/* return matcher indices */ &kMatcherIndices[14],
@@ -9535,7 +9580,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[383],
/* return matcher indices */ &kMatcherIndices[14],
@@ -9547,7 +9592,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[555],
/* return matcher indices */ &kMatcherIndices[14],
@@ -9559,7 +9604,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[783],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9679,7 +9724,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[180],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9691,7 +9736,7 @@
/* num parameters */ 6,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[108],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9703,7 +9748,7 @@
/* num parameters */ 6,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[102],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9715,7 +9760,7 @@
/* num parameters */ 7,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[65],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9727,7 +9772,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[235],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9739,7 +9784,7 @@
/* num parameters */ 6,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[78],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9751,7 +9796,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[245],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9763,7 +9808,7 @@
/* num parameters */ 6,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[120],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9775,7 +9820,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[343],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9787,7 +9832,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[225],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9799,7 +9844,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[150],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9811,7 +9856,7 @@
/* num parameters */ 6,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[144],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9823,7 +9868,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[439],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9835,7 +9880,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[200],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9847,7 +9892,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[435],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9859,7 +9904,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[280],
/* return matcher indices */ &kMatcherIndices[112],
@@ -9943,7 +9988,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[419],
/* return matcher indices */ &kMatcherIndices[14],
@@ -9955,7 +10000,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[240],
/* return matcher indices */ &kMatcherIndices[14],
@@ -9967,7 +10012,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[220],
/* return matcher indices */ &kMatcherIndices[14],
@@ -9979,7 +10024,7 @@
/* num parameters */ 6,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[138],
/* return matcher indices */ &kMatcherIndices[14],
@@ -9991,7 +10036,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[403],
/* return matcher indices */ &kMatcherIndices[14],
@@ -10003,7 +10048,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[290],
/* return matcher indices */ &kMatcherIndices[14],
@@ -10159,7 +10204,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[395],
/* return matcher indices */ &kMatcherIndices[14],
@@ -10171,7 +10216,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[195],
/* return matcher indices */ &kMatcherIndices[14],
@@ -10183,7 +10228,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[155],
/* return matcher indices */ &kMatcherIndices[14],
@@ -10195,7 +10240,7 @@
/* num parameters */ 6,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[72],
/* return matcher indices */ &kMatcherIndices[14],
@@ -10207,7 +10252,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[371],
/* return matcher indices */ &kMatcherIndices[14],
@@ -10219,7 +10264,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[175],
/* return matcher indices */ &kMatcherIndices[14],
@@ -10231,7 +10276,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[367],
/* return matcher indices */ &kMatcherIndices[112],
@@ -10243,7 +10288,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[185],
/* return matcher indices */ &kMatcherIndices[112],
@@ -10255,7 +10300,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[190],
/* return matcher indices */ &kMatcherIndices[112],
@@ -10267,7 +10312,7 @@
/* num parameters */ 6,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[126],
/* return matcher indices */ &kMatcherIndices[112],
@@ -10279,7 +10324,7 @@
/* num parameters */ 4,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[355],
/* return matcher indices */ &kMatcherIndices[112],
@@ -10291,7 +10336,7 @@
/* num parameters */ 5,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[210],
/* return matcher indices */ &kMatcherIndices[112],
@@ -10783,7 +10828,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 2,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[729],
/* return matcher indices */ &kMatcherIndices[11],
@@ -10819,7 +10864,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[883],
/* return matcher indices */ &kMatcherIndices[38],
@@ -10831,7 +10876,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[882],
/* return matcher indices */ &kMatcherIndices[38],
@@ -10843,7 +10888,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 2,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[3],
/* parameters */ &kParameters[881],
/* return matcher indices */ &kMatcherIndices[38],
@@ -10903,7 +10948,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 2,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[741],
/* return matcher indices */ &kMatcherIndices[11],
@@ -10963,7 +11008,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[687],
/* return matcher indices */ &kMatcherIndices[17],
@@ -10975,7 +11020,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[685],
/* return matcher indices */ &kMatcherIndices[45],
@@ -11011,7 +11056,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[679],
/* return matcher indices */ &kMatcherIndices[17],
@@ -11023,7 +11068,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[677],
/* return matcher indices */ &kMatcherIndices[45],
@@ -11107,7 +11152,7 @@
/* num parameters */ 0,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[1004],
/* return matcher indices */ &kMatcherIndices[38],
@@ -11119,7 +11164,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[920],
/* return matcher indices */ &kMatcherIndices[38],
@@ -11143,7 +11188,7 @@
/* num parameters */ 0,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[1004],
/* return matcher indices */ &kMatcherIndices[17],
@@ -11155,7 +11200,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[932],
/* return matcher indices */ &kMatcherIndices[17],
@@ -11179,7 +11224,7 @@
/* num parameters */ 0,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[1004],
/* return matcher indices */ &kMatcherIndices[51],
@@ -11191,7 +11236,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[929],
/* return matcher indices */ &kMatcherIndices[51],
@@ -11215,7 +11260,7 @@
/* num parameters */ 0,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[1004],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11227,7 +11272,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[926],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11287,7 +11332,7 @@
/* num parameters */ 0,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[1004],
/* return matcher indices */ &kMatcherIndices[66],
@@ -11299,7 +11344,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[923],
/* return matcher indices */ &kMatcherIndices[66],
@@ -11323,7 +11368,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[477],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11335,7 +11380,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[480],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11347,7 +11392,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[483],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11359,31 +11404,31 @@
/* num parameters */ 1,
/* num template types */ 1,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[10],
+ /* template types */ &kTemplateTypes[23],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[860],
/* return matcher indices */ &kMatcherIndices[1],
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
- /* const eval */ nullptr,
+ /* const eval */ &ConstEval::OpComplement,
},
{
/* [285] */
/* num parameters */ 1,
/* num template types */ 1,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[10],
+ /* template types */ &kTemplateTypes[23],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[861],
/* return matcher indices */ &kMatcherIndices[31],
/* flags */ OverloadFlags(OverloadFlag::kIsOperator, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
- /* const eval */ nullptr,
+ /* const eval */ &ConstEval::OpComplement,
},
{
/* [286] */
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[798],
/* return matcher indices */ &kMatcherIndices[225],
@@ -11395,7 +11440,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[810],
/* return matcher indices */ &kMatcherIndices[158],
@@ -11407,7 +11452,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[822],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11419,7 +11464,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[823],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11431,7 +11476,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[800],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11443,7 +11488,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[799],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11455,7 +11500,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[826],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11467,7 +11512,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[830],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11503,7 +11548,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[846],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11515,7 +11560,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[848],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11527,7 +11572,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[779],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11539,7 +11584,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[777],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11551,7 +11596,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[849],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11563,7 +11608,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[850],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11575,7 +11620,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[851],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11587,7 +11632,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[852],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11599,7 +11644,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[853],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11611,7 +11656,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[854],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11671,7 +11716,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[450],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11683,7 +11728,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[447],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11695,7 +11740,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[855],
/* return matcher indices */ &kMatcherIndices[224],
@@ -11707,7 +11752,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[856],
/* return matcher indices */ &kMatcherIndices[122],
@@ -11719,7 +11764,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[802],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11731,7 +11776,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[801],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11743,7 +11788,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[824],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11755,7 +11800,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[825],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11815,7 +11860,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[808],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11827,7 +11872,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[807],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11839,7 +11884,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[886],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11851,7 +11896,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[809],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11863,7 +11908,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[739],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11875,7 +11920,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[703],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11887,7 +11932,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[887],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11899,7 +11944,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[888],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11911,7 +11956,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[811],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11923,7 +11968,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[1001],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11935,7 +11980,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[813],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11947,7 +11992,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[812],
/* return matcher indices */ &kMatcherIndices[34],
@@ -11983,7 +12028,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[891],
/* return matcher indices */ &kMatcherIndices[14],
@@ -11995,7 +12040,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[892],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12007,7 +12052,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[815],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12019,7 +12064,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[814],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12031,7 +12076,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[893],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12043,7 +12088,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[894],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12055,7 +12100,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[895],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12067,7 +12112,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[896],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12079,7 +12124,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[897],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12091,7 +12136,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[898],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12103,7 +12148,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[567],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12115,7 +12160,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[570],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12127,7 +12172,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[899],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12139,7 +12184,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[900],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12151,7 +12196,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[671],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12163,7 +12208,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[669],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12199,7 +12244,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[919],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12211,7 +12256,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[797],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12223,7 +12268,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[984],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12235,7 +12280,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[978],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12247,7 +12292,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[817],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12259,7 +12304,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[816],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12271,7 +12316,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[964],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12283,7 +12328,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[963],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12295,7 +12340,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[819],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12307,7 +12352,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[818],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12343,7 +12388,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[821],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12355,7 +12400,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[820],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12439,7 +12484,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[787],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12451,7 +12496,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[789],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12463,7 +12508,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[829],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12475,7 +12520,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[828],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12571,7 +12616,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[869],
/* return matcher indices */ &kMatcherIndices[38],
@@ -12631,7 +12676,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[839],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12643,7 +12688,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[838],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12655,7 +12700,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[841],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12667,7 +12712,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[840],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12703,7 +12748,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[843],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12715,7 +12760,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[842],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12727,7 +12772,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[845],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12739,7 +12784,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[844],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12751,7 +12796,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[613],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12763,7 +12808,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[751],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12823,7 +12868,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[934],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12835,7 +12880,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[931],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12847,7 +12892,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[957],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12859,7 +12904,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[946],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12895,7 +12940,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[959],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12907,7 +12952,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[958],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12919,7 +12964,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[975],
/* return matcher indices */ &kMatcherIndices[17],
@@ -12931,7 +12976,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[971],
/* return matcher indices */ &kMatcherIndices[17],
@@ -12943,7 +12988,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[981],
/* return matcher indices */ &kMatcherIndices[17],
@@ -12955,7 +13000,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[977],
/* return matcher indices */ &kMatcherIndices[17],
@@ -12967,7 +13012,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[989],
/* return matcher indices */ &kMatcherIndices[14],
@@ -12979,7 +13024,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[983],
/* return matcher indices */ &kMatcherIndices[34],
@@ -12991,7 +13036,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[995],
/* return matcher indices */ &kMatcherIndices[14],
@@ -13003,7 +13048,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[990],
/* return matcher indices */ &kMatcherIndices[34],
@@ -13039,7 +13084,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[858],
/* return matcher indices */ &kMatcherIndices[17],
@@ -13051,7 +13096,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[859],
/* return matcher indices */ &kMatcherIndices[45],
@@ -13195,7 +13240,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[667],
/* return matcher indices */ &kMatcherIndices[17],
@@ -13207,7 +13252,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[665],
/* return matcher indices */ &kMatcherIndices[17],
@@ -13243,7 +13288,7 @@
/* num parameters */ 0,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[1004],
/* return matcher indices */ nullptr,
@@ -13255,7 +13300,7 @@
/* num parameters */ 0,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[1004],
/* return matcher indices */ nullptr,
@@ -13267,7 +13312,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[937],
/* return matcher indices */ &kMatcherIndices[112],
@@ -13279,7 +13324,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[947],
/* return matcher indices */ &kMatcherIndices[112],
@@ -13291,7 +13336,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[948],
/* return matcher indices */ &kMatcherIndices[120],
@@ -13303,7 +13348,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[961],
/* return matcher indices */ &kMatcherIndices[120],
@@ -13315,7 +13360,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[962],
/* return matcher indices */ &kMatcherIndices[120],
@@ -13327,7 +13372,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 2,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[5],
/* parameters */ &kParameters[972],
/* return matcher indices */ &kMatcherIndices[19],
@@ -13339,7 +13384,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[525],
/* return matcher indices */ &kMatcherIndices[34],
@@ -13351,7 +13396,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[697],
/* return matcher indices */ &kMatcherIndices[34],
@@ -13363,7 +13408,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[868],
/* return matcher indices */ &kMatcherIndices[66],
@@ -13375,7 +13420,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[867],
/* return matcher indices */ &kMatcherIndices[66],
@@ -13387,7 +13432,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[866],
/* return matcher indices */ &kMatcherIndices[66],
@@ -13399,7 +13444,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[865],
/* return matcher indices */ &kMatcherIndices[66],
@@ -13411,7 +13456,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[857],
/* return matcher indices */ &kMatcherIndices[34],
@@ -13423,7 +13468,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[785],
/* return matcher indices */ &kMatcherIndices[43],
@@ -13435,7 +13480,7 @@
/* num parameters */ 3,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[453],
/* return matcher indices */ &kMatcherIndices[34],
@@ -13447,7 +13492,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[795],
/* return matcher indices */ &kMatcherIndices[66],
@@ -13459,7 +13504,7 @@
/* num parameters */ 2,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[793],
/* return matcher indices */ &kMatcherIndices[38],
@@ -13483,7 +13528,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 1,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[6],
/* parameters */ &kParameters[827],
/* return matcher indices */ &kMatcherIndices[14],
@@ -13507,7 +13552,7 @@
/* num parameters */ 1,
/* num template types */ 0,
/* num template numbers */ 0,
- /* template types */ &kTemplateTypes[23],
+ /* template types */ &kTemplateTypes[24],
/* template numbers */ &kTemplateNumbers[10],
/* parameters */ &kParameters[864],
/* return matcher indices */ &kMatcherIndices[66],
@@ -14373,8 +14418,8 @@
},
{
/* [1] */
- /* op ~<T : iu32>(T) -> T */
- /* op ~<T : iu32, N : num>(vec<N, T>) -> vec<N, T> */
+ /* op ~<T : aiu32>(T) -> T */
+ /* op ~<T : aiu32, N : num>(vec<N, T>) -> vec<N, T> */
/* num overloads */ 2,
/* overloads */ &kOverloads[284],
},
diff --git a/src/tint/resolver/intrinsic_table.inl.tmpl b/src/tint/resolver/intrinsic_table.inl.tmpl
index 51d04d4..94edc39 100644
--- a/src/tint/resolver/intrinsic_table.inl.tmpl
+++ b/src/tint/resolver/intrinsic_table.inl.tmpl
@@ -103,7 +103,7 @@
{{- end }}
{{- if $o.IsDeprecated}}, OverloadFlag::kIsDeprecated{{end }}),
/* const eval */
-{{- if $o.ConstEvalFunction }} &ConstEval::{{$o.ConstEvalFunction}},
+{{- if $o.ConstEvalFunction }} {{template "ConstEvalFn" $o}},
{{- else }} nullptr,
{{- end }}
},
@@ -137,7 +137,7 @@
};
{{- range $i, $o := .UnaryOperators }}
-constexpr uint8_t kUnaryOperator{{template "OperatorName" $o.Name}} = {{$i}};
+constexpr uint8_t kUnaryOperator{{ template "ExpandName" $o.Name}} = {{$i}};
{{- end }}
constexpr IntrinsicInfo kBinaryOperators[] = {
@@ -154,7 +154,7 @@
};
{{- range $i, $o := .BinaryOperators }}
-constexpr uint8_t kBinaryOperator{{template "OperatorName" $o.Name}} = {{$i}};
+constexpr uint8_t kBinaryOperator{{ template "ExpandName" $o.Name}} = {{$i}};
{{- end }}
constexpr IntrinsicInfo kConstructorsAndConverters[] = {
@@ -455,7 +455,7 @@
{{- end -}}
{{- /* ------------------------------------------------------------------ */ -}}
-{{- define "OperatorName" -}}
+{{- define "ExpandName" -}}
{{- /* ------------------------------------------------------------------ */ -}}
{{- if eq . "<<" -}}ShiftLeft
{{- else if eq . "&" -}}And
@@ -478,6 +478,16 @@
{{- else if eq . "*" -}}Star
{{- else if eq . "/" -}}Divide
{{- else if eq . "%" -}}Modulo
-{{- else -}}<unknown-{{.}}>
+{{- else -}}{{.}}
{{- end -}}
{{- end -}}
+
+
+{{- /* ------------------------------------------------------------------ */ -}}
+{{- define "ConstEvalFn" -}}
+{{- /* ------------------------------------------------------------------ */ -}}
+ &ConstEval::
+{{- if eq .Kind "operator" -}}Op{{end -}}
+ {{template "ExpandName" .ConstEvalFunction}}
+{{- end -}}
+
diff --git a/src/tint/resolver/resolver.cc b/src/tint/resolver/resolver.cc
index 7fc09cc..4c49cd1 100644
--- a/src/tint/resolver/resolver.cc
+++ b/src/tint/resolver/resolver.cc
@@ -1508,7 +1508,7 @@
current_statement_, value, has_side_effects);
};
- // ct_ctor_or_conv is a helper for building a sem::TypeConstructor for an array or structure
+ // arr_or_str_ctor is a helper for building a sem::TypeConstructor for an array or structure
// constructor call target.
auto arr_or_str_ctor = [&](const sem::Type* ty,
const sem::CallTarget* call_target) -> sem::Call* {
@@ -1523,15 +1523,18 @@
if (!value) {
// Constant evaluation failed.
// Can happen for expressions that will fail validation (later).
+ // Use the kRuntime EvaluationStage, as kConstant will trigger an assertion in the
+ // sem::Expression constructor, which checks that kConstant is paired with a
+ // constant value.
stage = sem::EvaluationStage::kRuntime;
}
}
return builder_->create<sem::Call>(expr, call_target, stage, std::move(args),
- current_statement_, std::move(value), has_side_effects);
+ current_statement_, value, has_side_effects);
};
- // ct_ctor_or_conv is a helper for building either a sem::TypeConstructor or sem::TypeConversion
+ // ty_ctor_or_conv is a helper for building either a sem::TypeConstructor or sem::TypeConversion
// call for the given semantic type.
auto ty_ctor_or_conv = [&](const sem::Type* ty) {
return Switch(
@@ -1710,7 +1713,12 @@
}
auto stage = builtin.sem->Stage();
- if (stage == sem::EvaluationStage::kConstant) {
+ if (stage == sem::EvaluationStage::kConstant) { // <-- Optimization
+ // If the builtin is not annotated with @const, then it can only be evaluated
+ // at runtime, in which case there's no point checking the evaluation stage of the
+ // arguments.
+
+ // The builtin is @const annotated. Check all arguments are also constant.
for (auto* arg : args) {
stage = sem::EarliestStage(stage, arg->Stage());
}
@@ -1718,7 +1726,7 @@
// If the builtin is @const, and all arguments have constant values, evaluate the builtin now.
const sem::Constant* value = nullptr;
- if (stage == sem::EvaluationStage::kConstant && builtin.const_eval_fn) {
+ if (stage == sem::EvaluationStage::kConstant) {
value = (const_eval_.*builtin.const_eval_fn)(builtin.sem->ReturnType(), args.data(),
args.size());
}
@@ -2129,7 +2137,7 @@
const sem::Type* ty = nullptr;
const sem::Variable* source_var = nullptr;
const sem::Constant* value = nullptr;
- auto stage = sem::EvaluationStage::kRuntime; // TODO(crbug.com/tint/1581)
+ auto stage = sem::EvaluationStage::kRuntime;
switch (unary->op) {
case ast::UnaryOp::kAddressOf:
@@ -2181,10 +2189,15 @@
return nullptr;
}
}
- ty = op.result;
- if (op.const_eval_fn) {
- value = (const_eval_.*op.const_eval_fn)(ty, &expr, 1u);
+ stage = expr->Stage();
+ if (stage == sem::EvaluationStage::kConstant) {
+ if (op.const_eval_fn) {
+ value = (const_eval_.*op.const_eval_fn)(ty, &expr, 1u);
+ } else {
+ stage = sem::EvaluationStage::kRuntime;
+ }
}
+ ty = op.result;
break;
}
}
diff --git a/src/tint/resolver/validator.cc b/src/tint/resolver/validator.cc
index 29e06a2..0b8fb8c 100644
--- a/src/tint/resolver/validator.cc
+++ b/src/tint/resolver/validator.cc
@@ -560,8 +560,8 @@
bool Validator::GlobalVariable(
const sem::GlobalVariable* global,
- std::unordered_map<uint32_t, const sem::Variable*> constant_ids,
- std::unordered_map<const sem::Type*, const Source&> atomic_composite_info) const {
+ const std::unordered_map<uint32_t, const sem::Variable*>& constant_ids,
+ const std::unordered_map<const sem::Type*, const Source&>& atomic_composite_info) const {
auto* decl = global->Declaration();
bool ok = Switch(
decl, //
@@ -759,8 +759,9 @@
return true;
}
-bool Validator::Override(const sem::Variable* v,
- std::unordered_map<uint32_t, const sem::Variable*> constant_ids) const {
+bool Validator::Override(
+ const sem::Variable* v,
+ const std::unordered_map<uint32_t, const sem::Variable*>& constant_ids) const {
auto* decl = v->Declaration();
auto* storage_ty = v->Type()->UnwrapRef();
diff --git a/src/tint/resolver/validator.h b/src/tint/resolver/validator.h
index 1f15a9e..ed20af0 100644
--- a/src/tint/resolver/validator.h
+++ b/src/tint/resolver/validator.h
@@ -239,8 +239,8 @@
/// @returns true on success, false otherwise
bool GlobalVariable(
const sem::GlobalVariable* var,
- std::unordered_map<uint32_t, const sem::Variable*> constant_ids,
- std::unordered_map<const sem::Type*, const Source&> atomic_composite_info) const;
+ const std::unordered_map<uint32_t, const sem::Variable*>& constant_ids,
+ const std::unordered_map<const sem::Type*, const Source&>& atomic_composite_info) const;
/// Validates an if statement
/// @param stmt the statement to validate
@@ -374,7 +374,7 @@
/// @param constant_ids the set of constant ids in the module
/// @returns true on success, false otherwise.
bool Override(const sem::Variable* v,
- std::unordered_map<uint32_t, const sem::Variable*> constant_ids) const;
+ const std::unordered_map<uint32_t, const sem::Variable*>& constant_ids) const;
/// Validates a 'const' variable declaration
/// @param v the variable to validate
diff --git a/test/tint/bug/chromium/1343242.wgsl b/test/tint/bug/chromium/1343242.wgsl
new file mode 100644
index 0000000..5b73ca2
--- /dev/null
+++ b/test/tint/bug/chromium/1343242.wgsl
@@ -0,0 +1 @@
+var<private>o=bool(~1);
diff --git a/test/tint/bug/chromium/1343242.wgsl.expected.glsl b/test/tint/bug/chromium/1343242.wgsl.expected.glsl
new file mode 100644
index 0000000..9e78426
--- /dev/null
+++ b/test/tint/bug/chromium/1343242.wgsl.expected.glsl
@@ -0,0 +1,7 @@
+#version 310 es
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void unused_entry_point() {
+ return;
+}
+bool o = true;
diff --git a/test/tint/bug/chromium/1343242.wgsl.expected.hlsl b/test/tint/bug/chromium/1343242.wgsl.expected.hlsl
new file mode 100644
index 0000000..e2052cf
--- /dev/null
+++ b/test/tint/bug/chromium/1343242.wgsl.expected.hlsl
@@ -0,0 +1,6 @@
+[numthreads(1, 1, 1)]
+void unused_entry_point() {
+ return;
+}
+
+static bool o = true;
diff --git a/test/tint/bug/chromium/1343242.wgsl.expected.msl b/test/tint/bug/chromium/1343242.wgsl.expected.msl
new file mode 100644
index 0000000..466ceaa
--- /dev/null
+++ b/test/tint/bug/chromium/1343242.wgsl.expected.msl
@@ -0,0 +1,3 @@
+#include <metal_stdlib>
+
+using namespace metal;
diff --git a/test/tint/bug/chromium/1343242.wgsl.expected.spvasm b/test/tint/bug/chromium/1343242.wgsl.expected.spvasm
new file mode 100644
index 0000000..a36ea73
--- /dev/null
+++ b/test/tint/bug/chromium/1343242.wgsl.expected.spvasm
@@ -0,0 +1,21 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 9
+; Schema: 0
+ OpCapability Shader
+ OpMemoryModel Logical GLSL450
+ OpEntryPoint GLCompute %unused_entry_point "unused_entry_point"
+ OpExecutionMode %unused_entry_point LocalSize 1 1 1
+ OpName %o "o"
+ OpName %unused_entry_point "unused_entry_point"
+ %bool = OpTypeBool
+ %true = OpConstantTrue %bool
+%_ptr_Private_bool = OpTypePointer Private %bool
+ %o = OpVariable %_ptr_Private_bool Private %true
+ %void = OpTypeVoid
+ %5 = OpTypeFunction %void
+%unused_entry_point = OpFunction %void None %5
+ %8 = OpLabel
+ OpReturn
+ OpFunctionEnd
diff --git a/test/tint/bug/chromium/1343242.wgsl.expected.wgsl b/test/tint/bug/chromium/1343242.wgsl.expected.wgsl
new file mode 100644
index 0000000..0580ed8
--- /dev/null
+++ b/test/tint/bug/chromium/1343242.wgsl.expected.wgsl
@@ -0,0 +1 @@
+var<private> o = bool(~(1));