Rename `HoldsAbstract` to `IsAbstract`.
All of the other type methods are `Is*` except for `Abstract` which is
`Holds`. This Cl changes `HoldsAbstract` to `IsAbstract`. A vector or
matrix with an abstract element is still an abstract vector.
Change-Id: I5ee87031ac49dc654a2f1e70e854ab700eac4e2a
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/203875
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/core/type/type.cc b/src/tint/lang/core/type/type.cc
index 807e765..dbb50f8 100644
--- a/src/tint/lang/core/type/type.cc
+++ b/src/tint/lang/core/type/type.cc
@@ -157,16 +157,16 @@
return IsAnyOf<Sampler, Texture>();
}
-bool Type::HoldsAbstract() const {
+bool Type::IsAbstract() const {
return Switch(
this, //
[&](const AbstractNumeric*) { return true; },
- [&](const Vector* v) { return v->Type()->HoldsAbstract(); },
- [&](const Matrix* m) { return m->Type()->HoldsAbstract(); },
- [&](const Array* a) { return a->ElemType()->HoldsAbstract(); },
+ [&](const Vector* v) { return v->Type()->IsAbstract(); },
+ [&](const Matrix* m) { return m->Type()->IsAbstract(); },
+ [&](const Array* a) { return a->ElemType()->IsAbstract(); },
[&](const Struct* s) {
for (auto* m : s->Members()) {
- if (m->Type()->HoldsAbstract()) {
+ if (m->Type()->IsAbstract()) {
return true;
}
}
diff --git a/src/tint/lang/core/type/type.h b/src/tint/lang/core/type/type.h
index 4f09d90..5124d76 100644
--- a/src/tint/lang/core/type/type.h
+++ b/src/tint/lang/core/type/type.h
@@ -163,10 +163,9 @@
bool IsNumericScalarOrVector() const;
/// @returns true if this type is a handle type
bool IsHandle() const;
-
- /// @returns true if this type is an abstract-numeric or if the type holds an element that is an
- /// abstract-numeric.
- bool HoldsAbstract() const;
+ /// @returns true if this type is an abstract type. It could be a numeric directly or an
+ /// abstract container which holds an abstract numeric
+ bool IsAbstract() const;
/// kNoConversion is returned from ConversionRank() when the implicit conversion is not
/// permitted.
diff --git a/src/tint/lang/core/type/type_test.cc b/src/tint/lang/core/type/type_test.cc
index f9ac346..475f5ce 100644
--- a/src/tint/lang/core/type/type_test.cc
+++ b/src/tint/lang/core/type/type_test.cc
@@ -524,38 +524,38 @@
arr_mat4x3_f16);
}
-TEST_F(TypeTest, HoldsAbstract) {
- EXPECT_TRUE(af->HoldsAbstract());
- EXPECT_TRUE(ai->HoldsAbstract());
- EXPECT_FALSE(f32->HoldsAbstract());
- EXPECT_FALSE(f16->HoldsAbstract());
- EXPECT_FALSE(i32->HoldsAbstract());
- EXPECT_FALSE(u32->HoldsAbstract());
- EXPECT_FALSE(vec2_f32->HoldsAbstract());
- EXPECT_FALSE(vec3_f32->HoldsAbstract());
- EXPECT_FALSE(vec3_f16->HoldsAbstract());
- EXPECT_FALSE(vec4_f32->HoldsAbstract());
- EXPECT_FALSE(vec3_u32->HoldsAbstract());
- EXPECT_FALSE(vec3_i32->HoldsAbstract());
- EXPECT_TRUE(vec3_af->HoldsAbstract());
- EXPECT_TRUE(vec3_ai->HoldsAbstract());
- EXPECT_FALSE(mat2x4_f32->HoldsAbstract());
- EXPECT_FALSE(mat3x4_f32->HoldsAbstract());
- EXPECT_FALSE(mat4x2_f32->HoldsAbstract());
- EXPECT_FALSE(mat4x3_f32->HoldsAbstract());
- EXPECT_FALSE(mat4x3_f16->HoldsAbstract());
- EXPECT_TRUE(mat4x3_af->HoldsAbstract());
- EXPECT_FALSE(str_f16->HoldsAbstract());
- EXPECT_TRUE(str_af->HoldsAbstract());
- EXPECT_FALSE(arr_i32->HoldsAbstract());
- EXPECT_TRUE(arr_ai->HoldsAbstract());
- EXPECT_FALSE(arr_vec3_i32->HoldsAbstract());
- EXPECT_TRUE(arr_vec3_ai->HoldsAbstract());
- EXPECT_FALSE(arr_mat4x3_f16->HoldsAbstract());
- EXPECT_FALSE(arr_mat4x3_f32->HoldsAbstract());
- EXPECT_TRUE(arr_mat4x3_af->HoldsAbstract());
- EXPECT_FALSE(arr_str_f16->HoldsAbstract());
- EXPECT_TRUE(arr_str_af->HoldsAbstract());
+TEST_F(TypeTest, IsAbstract) {
+ EXPECT_TRUE(af->IsAbstract());
+ EXPECT_TRUE(ai->IsAbstract());
+ EXPECT_FALSE(f32->IsAbstract());
+ EXPECT_FALSE(f16->IsAbstract());
+ EXPECT_FALSE(i32->IsAbstract());
+ EXPECT_FALSE(u32->IsAbstract());
+ EXPECT_FALSE(vec2_f32->IsAbstract());
+ EXPECT_FALSE(vec3_f32->IsAbstract());
+ EXPECT_FALSE(vec3_f16->IsAbstract());
+ EXPECT_FALSE(vec4_f32->IsAbstract());
+ EXPECT_FALSE(vec3_u32->IsAbstract());
+ EXPECT_FALSE(vec3_i32->IsAbstract());
+ EXPECT_TRUE(vec3_af->IsAbstract());
+ EXPECT_TRUE(vec3_ai->IsAbstract());
+ EXPECT_FALSE(mat2x4_f32->IsAbstract());
+ EXPECT_FALSE(mat3x4_f32->IsAbstract());
+ EXPECT_FALSE(mat4x2_f32->IsAbstract());
+ EXPECT_FALSE(mat4x3_f32->IsAbstract());
+ EXPECT_FALSE(mat4x3_f16->IsAbstract());
+ EXPECT_TRUE(mat4x3_af->IsAbstract());
+ EXPECT_FALSE(str_f16->IsAbstract());
+ EXPECT_TRUE(str_af->IsAbstract());
+ EXPECT_FALSE(arr_i32->IsAbstract());
+ EXPECT_TRUE(arr_ai->IsAbstract());
+ EXPECT_FALSE(arr_vec3_i32->IsAbstract());
+ EXPECT_TRUE(arr_vec3_ai->IsAbstract());
+ EXPECT_FALSE(arr_mat4x3_f16->IsAbstract());
+ EXPECT_FALSE(arr_mat4x3_f32->IsAbstract());
+ EXPECT_TRUE(arr_mat4x3_af->IsAbstract());
+ EXPECT_FALSE(arr_str_f16->IsAbstract());
+ EXPECT_TRUE(arr_str_af->IsAbstract());
}
} // namespace
diff --git a/src/tint/lang/wgsl/ast/transform/fold_constants.cc b/src/tint/lang/wgsl/ast/transform/fold_constants.cc
index afce608..7eee69c 100644
--- a/src/tint/lang/wgsl/ast/transform/fold_constants.cc
+++ b/src/tint/lang/wgsl/ast/transform/fold_constants.cc
@@ -102,7 +102,7 @@
return nullptr;
}
- if (cv->Type()->HoldsAbstract() && !cv->Type()->IsFloatScalar() &&
+ if (cv->Type()->IsAbstract() && !cv->Type()->IsFloatScalar() &&
!cv->Type()->IsSignedIntegerScalar() && !cv->Type()->IsUnsignedIntegerScalar()) {
return nullptr;
}
diff --git a/src/tint/lang/wgsl/ast/transform/hoist_to_decl_before.cc b/src/tint/lang/wgsl/ast/transform/hoist_to_decl_before.cc
index 4c9cd1b..fd763a1 100644
--- a/src/tint/lang/wgsl/ast/transform/hoist_to_decl_before.cc
+++ b/src/tint/lang/wgsl/ast/transform/hoist_to_decl_before.cc
@@ -56,7 +56,7 @@
switch (kind) {
case VariableKind::kLet: {
auto* ty = ctx.src->Sem().GetVal(expr)->Type();
- TINT_ASSERT(!ty->HoldsAbstract());
+ TINT_ASSERT(!ty->IsAbstract());
auto builder = [this, expr, name, ty] {
return b.Decl(b.Let(name, Transform::CreateASTTypeFor(ctx, ty),
ctx.CloneWithoutTransform(expr)));
@@ -69,7 +69,7 @@
case VariableKind::kVar: {
auto* ty = ctx.src->Sem().GetVal(expr)->Type();
- TINT_ASSERT(!ty->HoldsAbstract());
+ TINT_ASSERT(!ty->IsAbstract());
auto builder = [this, expr, name, ty] {
return b.Decl(b.Var(name, Transform::CreateASTTypeFor(ctx, ty),
ctx.CloneWithoutTransform(expr)));
diff --git a/src/tint/lang/wgsl/ast/transform/promote_initializers_to_let.cc b/src/tint/lang/wgsl/ast/transform/promote_initializers_to_let.cc
index b67da7a..46176c1 100644
--- a/src/tint/lang/wgsl/ast/transform/promote_initializers_to_let.cc
+++ b/src/tint/lang/wgsl/ast/transform/promote_initializers_to_let.cc
@@ -60,7 +60,7 @@
return false;
}
- if (expr->Type()->HoldsAbstract()) {
+ if (expr->Type()->IsAbstract()) {
// Do not hoist expressions that are not materialized, as doing so would cause
// premature materialization.
return false;
diff --git a/src/tint/lang/wgsl/ast/transform/substitute_override.cc b/src/tint/lang/wgsl/ast/transform/substitute_override.cc
index 2c5e06a..477a7fb 100644
--- a/src/tint/lang/wgsl/ast/transform/substitute_override.cc
+++ b/src/tint/lang/wgsl/ast/transform/substitute_override.cc
@@ -120,7 +120,7 @@
ctx.ReplaceAll([&](const IndexAccessorExpression* expr) -> const IndexAccessorExpression* {
if (auto* sem = src.Sem().Get(expr)) {
if (auto* access = sem->UnwrapMaterialize()->As<sem::IndexAccessorExpression>()) {
- if (access->Object()->UnwrapMaterialize()->Type()->HoldsAbstract() &&
+ if (access->Object()->UnwrapMaterialize()->Type()->IsAbstract() &&
access->Index()->Stage() == core::EvaluationStage::kOverride) {
auto* obj = b.Call(wgsl::str(wgsl::BuiltinFn::kTintMaterialize),
ctx.Clone(expr->object));
diff --git a/src/tint/lang/wgsl/resolver/validator.cc b/src/tint/lang/wgsl/resolver/validator.cc
index 47a1939..4cf6a62 100644
--- a/src/tint/lang/wgsl/resolver/validator.cc
+++ b/src/tint/lang/wgsl/resolver/validator.cc
@@ -1712,7 +1712,7 @@
// If lhs value is a concrete type, and rhs is a const-expression greater than or equal
// to the bit width of lhs, then it is a shader-creation error.
const auto* elem_type = lhs->Type()->UnwrapRef()->DeepestElement();
- if (!elem_type->HoldsAbstract() && rhs->Stage() == core::EvaluationStage::kConstant) {
+ if (!elem_type->IsAbstract() && rhs->Stage() == core::EvaluationStage::kConstant) {
const uint32_t bit_width = elem_type->Size() * 8;
auto* rhs_val = rhs->ConstantValue();
for (size_t i = 0, n = rhs_val->NumElements(); i < n; i++) {