Replace Type::(Is|As)Sampler with Castable
Change-Id: Iaa43e607199e25308ecb121c61bb7a37abff197c
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34270
Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/ast/function.cc b/src/ast/function.cc
index da18d53..2dc9c21 100644
--- a/src/ast/function.cc
+++ b/src/ast/function.cc
@@ -281,8 +281,8 @@
for (auto* var : referenced_module_variables()) {
auto* unwrapped_type = var->type()->UnwrapIfNeeded();
- if (!var->IsDecorated() || !unwrapped_type->IsSampler() ||
- unwrapped_type->AsSampler()->kind() != kind) {
+ if (!var->IsDecorated() || !unwrapped_type->Is<ast::type::SamplerType>() ||
+ unwrapped_type->As<ast::type::SamplerType>()->kind() != kind) {
continue;
}
diff --git a/src/ast/type/access_control_type_test.cc b/src/ast/type/access_control_type_test.cc
index 5ea362d..2557a53 100644
--- a/src/ast/type/access_control_type_test.cc
+++ b/src/ast/type/access_control_type_test.cc
@@ -59,7 +59,7 @@
EXPECT_FALSE(ty->Is<I32Type>());
EXPECT_FALSE(ty->Is<MatrixType>());
EXPECT_FALSE(ty->Is<PointerType>());
- EXPECT_FALSE(ty->IsSampler());
+ EXPECT_FALSE(ty->Is<SamplerType>());
EXPECT_FALSE(ty->IsStruct());
EXPECT_FALSE(ty->IsTexture());
EXPECT_FALSE(ty->IsU32());
diff --git a/src/ast/type/alias_type_test.cc b/src/ast/type/alias_type_test.cc
index b4507ca..8be31d0 100644
--- a/src/ast/type/alias_type_test.cc
+++ b/src/ast/type/alias_type_test.cc
@@ -60,7 +60,7 @@
EXPECT_FALSE(ty->Is<I32Type>());
EXPECT_FALSE(ty->Is<MatrixType>());
EXPECT_FALSE(ty->Is<PointerType>());
- EXPECT_FALSE(ty->IsSampler());
+ EXPECT_FALSE(ty->Is<SamplerType>());
EXPECT_FALSE(ty->IsStruct());
EXPECT_FALSE(ty->IsTexture());
EXPECT_FALSE(ty->IsU32());
diff --git a/src/ast/type/array_type_test.cc b/src/ast/type/array_type_test.cc
index f45bc15..8ade7c4 100644
--- a/src/ast/type/array_type_test.cc
+++ b/src/ast/type/array_type_test.cc
@@ -65,7 +65,7 @@
EXPECT_FALSE(ty->Is<I32Type>());
EXPECT_FALSE(ty->Is<MatrixType>());
EXPECT_FALSE(ty->Is<PointerType>());
- EXPECT_FALSE(ty->IsSampler());
+ EXPECT_FALSE(ty->Is<SamplerType>());
EXPECT_FALSE(ty->IsStruct());
EXPECT_FALSE(ty->IsTexture());
EXPECT_FALSE(ty->IsU32());
diff --git a/src/ast/type/bool_type_test.cc b/src/ast/type/bool_type_test.cc
index 3952c9a..9aa14a4 100644
--- a/src/ast/type/bool_type_test.cc
+++ b/src/ast/type/bool_type_test.cc
@@ -40,7 +40,7 @@
EXPECT_FALSE(ty->Is<I32Type>());
EXPECT_FALSE(ty->Is<MatrixType>());
EXPECT_FALSE(ty->Is<PointerType>());
- EXPECT_FALSE(ty->IsSampler());
+ EXPECT_FALSE(ty->Is<SamplerType>());
EXPECT_FALSE(ty->IsStruct());
EXPECT_FALSE(ty->IsTexture());
EXPECT_FALSE(ty->IsU32());
diff --git a/src/ast/type/depth_texture_type_test.cc b/src/ast/type/depth_texture_type_test.cc
index 3a58197..089c696 100644
--- a/src/ast/type/depth_texture_type_test.cc
+++ b/src/ast/type/depth_texture_type_test.cc
@@ -42,7 +42,7 @@
EXPECT_FALSE(ty->Is<I32Type>());
EXPECT_FALSE(ty->Is<MatrixType>());
EXPECT_FALSE(ty->Is<PointerType>());
- EXPECT_FALSE(ty->IsSampler());
+ EXPECT_FALSE(ty->Is<SamplerType>());
EXPECT_FALSE(ty->IsStruct());
EXPECT_TRUE(ty->IsTexture());
EXPECT_FALSE(ty->IsU32());
diff --git a/src/ast/type/f32_type_test.cc b/src/ast/type/f32_type_test.cc
index 01622af..6918a1f 100644
--- a/src/ast/type/f32_type_test.cc
+++ b/src/ast/type/f32_type_test.cc
@@ -40,7 +40,7 @@
EXPECT_FALSE(ty->Is<I32Type>());
EXPECT_FALSE(ty->Is<MatrixType>());
EXPECT_FALSE(ty->Is<PointerType>());
- EXPECT_FALSE(ty->IsSampler());
+ EXPECT_FALSE(ty->Is<SamplerType>());
EXPECT_FALSE(ty->IsStruct());
EXPECT_FALSE(ty->IsTexture());
EXPECT_FALSE(ty->IsU32());
diff --git a/src/ast/type/i32_type_test.cc b/src/ast/type/i32_type_test.cc
index ff22000..d0fa3fe 100644
--- a/src/ast/type/i32_type_test.cc
+++ b/src/ast/type/i32_type_test.cc
@@ -40,7 +40,7 @@
EXPECT_TRUE(ty->Is<I32Type>());
EXPECT_FALSE(ty->Is<MatrixType>());
EXPECT_FALSE(ty->Is<PointerType>());
- EXPECT_FALSE(ty->IsSampler());
+ EXPECT_FALSE(ty->Is<SamplerType>());
EXPECT_FALSE(ty->IsStruct());
EXPECT_FALSE(ty->IsTexture());
EXPECT_FALSE(ty->IsU32());
diff --git a/src/ast/type/matrix_type_test.cc b/src/ast/type/matrix_type_test.cc
index e203c36..c1af49f 100644
--- a/src/ast/type/matrix_type_test.cc
+++ b/src/ast/type/matrix_type_test.cc
@@ -49,7 +49,7 @@
EXPECT_FALSE(ty->Is<I32Type>());
EXPECT_TRUE(ty->Is<MatrixType>());
EXPECT_FALSE(ty->Is<PointerType>());
- EXPECT_FALSE(ty->IsSampler());
+ EXPECT_FALSE(ty->Is<SamplerType>());
EXPECT_FALSE(ty->IsStruct());
EXPECT_FALSE(ty->IsTexture());
EXPECT_FALSE(ty->IsU32());
diff --git a/src/ast/type/multisampled_texture_type_test.cc b/src/ast/type/multisampled_texture_type_test.cc
index 1e9b67e..52fca6f 100644
--- a/src/ast/type/multisampled_texture_type_test.cc
+++ b/src/ast/type/multisampled_texture_type_test.cc
@@ -42,7 +42,7 @@
EXPECT_FALSE(ty->Is<I32Type>());
EXPECT_FALSE(ty->Is<MatrixType>());
EXPECT_FALSE(ty->Is<PointerType>());
- EXPECT_FALSE(ty->IsSampler());
+ EXPECT_FALSE(ty->Is<SamplerType>());
EXPECT_FALSE(ty->IsStruct());
EXPECT_TRUE(ty->IsTexture());
EXPECT_FALSE(ty->IsU32());
diff --git a/src/ast/type/pointer_type_test.cc b/src/ast/type/pointer_type_test.cc
index 7350824..3166db5 100644
--- a/src/ast/type/pointer_type_test.cc
+++ b/src/ast/type/pointer_type_test.cc
@@ -48,7 +48,7 @@
EXPECT_FALSE(ty->Is<I32Type>());
EXPECT_FALSE(ty->Is<MatrixType>());
EXPECT_TRUE(ty->Is<PointerType>());
- EXPECT_FALSE(ty->IsSampler());
+ EXPECT_FALSE(ty->Is<SamplerType>());
EXPECT_FALSE(ty->IsStruct());
EXPECT_FALSE(ty->IsTexture());
EXPECT_FALSE(ty->IsU32());
diff --git a/src/ast/type/sampled_texture_type_test.cc b/src/ast/type/sampled_texture_type_test.cc
index be16aeb..4790229 100644
--- a/src/ast/type/sampled_texture_type_test.cc
+++ b/src/ast/type/sampled_texture_type_test.cc
@@ -42,7 +42,7 @@
EXPECT_FALSE(ty->Is<I32Type>());
EXPECT_FALSE(ty->Is<MatrixType>());
EXPECT_FALSE(ty->Is<PointerType>());
- EXPECT_FALSE(ty->IsSampler());
+ EXPECT_FALSE(ty->Is<SamplerType>());
EXPECT_FALSE(ty->IsStruct());
EXPECT_TRUE(ty->IsTexture());
EXPECT_FALSE(ty->IsU32());
diff --git a/src/ast/type/sampler_type.cc b/src/ast/type/sampler_type.cc
index ccbd3fa..c183b43 100644
--- a/src/ast/type/sampler_type.cc
+++ b/src/ast/type/sampler_type.cc
@@ -36,10 +36,6 @@
SamplerType::~SamplerType() = default;
-bool SamplerType::IsSampler() const {
- return true;
-}
-
std::string SamplerType::type_name() const {
return std::string("__sampler_") +
(kind_ == SamplerKind::kSampler ? "sampler" : "comparison");
diff --git a/src/ast/type/sampler_type.h b/src/ast/type/sampler_type.h
index d064a88..c83c44a 100644
--- a/src/ast/type/sampler_type.h
+++ b/src/ast/type/sampler_type.h
@@ -43,9 +43,6 @@
SamplerType(SamplerType&&);
~SamplerType() override;
- /// @returns true if the type is a sampler type
- bool IsSampler() const override;
-
/// @returns the sampler type
SamplerKind kind() const { return kind_; }
diff --git a/src/ast/type/sampler_type_test.cc b/src/ast/type/sampler_type_test.cc
index 42210bc..4bdc6e4 100644
--- a/src/ast/type/sampler_type_test.cc
+++ b/src/ast/type/sampler_type_test.cc
@@ -52,7 +52,7 @@
EXPECT_FALSE(ty->Is<I32Type>());
EXPECT_FALSE(ty->Is<MatrixType>());
EXPECT_FALSE(ty->Is<PointerType>());
- EXPECT_TRUE(ty->IsSampler());
+ EXPECT_TRUE(ty->Is<SamplerType>());
EXPECT_FALSE(ty->IsStruct());
EXPECT_FALSE(ty->IsTexture());
EXPECT_FALSE(ty->IsU32());
diff --git a/src/ast/type/storage_texture_type_test.cc b/src/ast/type/storage_texture_type_test.cc
index f7764d1..43a0d29 100644
--- a/src/ast/type/storage_texture_type_test.cc
+++ b/src/ast/type/storage_texture_type_test.cc
@@ -46,7 +46,7 @@
EXPECT_FALSE(ty->Is<I32Type>());
EXPECT_FALSE(ty->Is<MatrixType>());
EXPECT_FALSE(ty->Is<PointerType>());
- EXPECT_FALSE(ty->IsSampler());
+ EXPECT_FALSE(ty->Is<SamplerType>());
EXPECT_FALSE(ty->IsStruct());
EXPECT_TRUE(ty->IsTexture());
EXPECT_FALSE(ty->IsU32());
diff --git a/src/ast/type/struct_type_test.cc b/src/ast/type/struct_type_test.cc
index 8667acf..c13caa2 100644
--- a/src/ast/type/struct_type_test.cc
+++ b/src/ast/type/struct_type_test.cc
@@ -57,7 +57,7 @@
EXPECT_FALSE(ty->Is<I32Type>());
EXPECT_FALSE(ty->Is<MatrixType>());
EXPECT_FALSE(ty->Is<PointerType>());
- EXPECT_FALSE(ty->IsSampler());
+ EXPECT_FALSE(ty->Is<SamplerType>());
EXPECT_TRUE(ty->IsStruct());
EXPECT_FALSE(ty->IsTexture());
EXPECT_FALSE(ty->IsU32());
diff --git a/src/ast/type/type.cc b/src/ast/type/type.cc
index affca72..1e8ed5c 100644
--- a/src/ast/type/type.cc
+++ b/src/ast/type/type.cc
@@ -66,10 +66,6 @@
return UnwrapIfNeeded()->UnwrapPtrIfNeeded()->UnwrapIfNeeded();
}
-bool Type::IsSampler() const {
- return false;
-}
-
bool Type::IsStruct() const {
return false;
}
@@ -142,11 +138,6 @@
return is_unsigned_scalar_or_vector() || is_signed_scalar_or_vector();
}
-const SamplerType* Type::AsSampler() const {
- assert(IsSampler());
- return static_cast<const SamplerType*>(this);
-}
-
const StructType* Type::AsStruct() const {
assert(IsStruct());
return static_cast<const StructType*>(this);
@@ -172,11 +163,6 @@
return static_cast<const VoidType*>(this);
}
-SamplerType* Type::AsSampler() {
- assert(IsSampler());
- return static_cast<SamplerType*>(this);
-}
-
StructType* Type::AsStruct() {
assert(IsStruct());
return static_cast<StructType*>(this);
diff --git a/src/ast/type/type.h b/src/ast/type/type.h
index 93a9fb8..805c058 100644
--- a/src/ast/type/type.h
+++ b/src/ast/type/type.h
@@ -23,7 +23,6 @@
namespace ast {
namespace type {
-class SamplerType;
class StructType;
class TextureType;
class U32Type;
@@ -40,8 +39,6 @@
Type(Type&&);
~Type() override;
- /// @returns true if the type is a sampler
- virtual bool IsSampler() const;
/// @returns true if the type is a struct type
virtual bool IsStruct() const;
/// @returns true if the type is a texture type
@@ -107,8 +104,6 @@
/// @returns true if this type is an integer scalar or vector
bool is_integer_scalar_or_vector();
- /// @returns the type as a sampler type
- const SamplerType* AsSampler() const;
/// @returns the type as a struct type
const StructType* AsStruct() const;
/// @returns the type as a texture type
@@ -120,8 +115,6 @@
/// @returns the type as a void type
const VoidType* AsVoid() const;
- /// @returns the type as a sampler type
- SamplerType* AsSampler();
/// @returns the type as a struct type
StructType* AsStruct();
/// @returns the type as a texture type
diff --git a/src/ast/type/u32_type_test.cc b/src/ast/type/u32_type_test.cc
index 60a946b..77b2e40 100644
--- a/src/ast/type/u32_type_test.cc
+++ b/src/ast/type/u32_type_test.cc
@@ -22,6 +22,7 @@
#include "src/ast/type/i32_type.h"
#include "src/ast/type/matrix_type.h"
#include "src/ast/type/pointer_type.h"
+#include "src/ast/type/sampler_type.h"
namespace tint {
namespace ast {
@@ -41,7 +42,7 @@
EXPECT_FALSE(ty->Is<I32Type>());
EXPECT_FALSE(ty->Is<MatrixType>());
EXPECT_FALSE(ty->Is<PointerType>());
- EXPECT_FALSE(ty->IsSampler());
+ EXPECT_FALSE(ty->Is<SamplerType>());
EXPECT_FALSE(ty->IsStruct());
EXPECT_FALSE(ty->IsTexture());
EXPECT_TRUE(ty->IsU32());
diff --git a/src/ast/type/vector_type_test.cc b/src/ast/type/vector_type_test.cc
index d59d96f..94a8b3f 100644
--- a/src/ast/type/vector_type_test.cc
+++ b/src/ast/type/vector_type_test.cc
@@ -49,7 +49,7 @@
EXPECT_FALSE(ty->Is<I32Type>());
EXPECT_FALSE(ty->Is<MatrixType>());
EXPECT_FALSE(ty->Is<PointerType>());
- EXPECT_FALSE(ty->IsSampler());
+ EXPECT_FALSE(ty->Is<SamplerType>());
EXPECT_FALSE(ty->IsStruct());
EXPECT_FALSE(ty->IsTexture());
EXPECT_FALSE(ty->IsU32());
diff --git a/src/reader/wgsl/parser_impl_sampler_type_test.cc b/src/reader/wgsl/parser_impl_sampler_type_test.cc
index 76e376a..5b17627 100644
--- a/src/reader/wgsl/parser_impl_sampler_type_test.cc
+++ b/src/reader/wgsl/parser_impl_sampler_type_test.cc
@@ -37,8 +37,8 @@
EXPECT_TRUE(t.matched);
EXPECT_FALSE(t.errored);
ASSERT_NE(t.value, nullptr);
- ASSERT_TRUE(t->IsSampler());
- EXPECT_FALSE(t->AsSampler()->IsComparison());
+ ASSERT_TRUE(t->Is<ast::type::SamplerType>());
+ EXPECT_FALSE(t->As<ast::type::SamplerType>()->IsComparison());
EXPECT_FALSE(p->has_error());
}
@@ -48,8 +48,8 @@
EXPECT_TRUE(t.matched);
EXPECT_FALSE(t.errored);
ASSERT_NE(t.value, nullptr);
- ASSERT_TRUE(t->IsSampler());
- EXPECT_TRUE(t->AsSampler()->IsComparison());
+ ASSERT_TRUE(t->Is<ast::type::SamplerType>());
+ EXPECT_TRUE(t->As<ast::type::SamplerType>()->IsComparison());
EXPECT_FALSE(p->has_error());
}
diff --git a/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc b/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
index c1eb2c6..463533d 100644
--- a/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
+++ b/src/reader/wgsl/parser_impl_texture_sampler_types_test.cc
@@ -42,8 +42,8 @@
EXPECT_TRUE(t.matched);
EXPECT_FALSE(t.errored);
ASSERT_NE(t.value, nullptr);
- ASSERT_TRUE(t->IsSampler());
- ASSERT_FALSE(t->AsSampler()->IsComparison());
+ ASSERT_TRUE(t->Is<ast::type::SamplerType>());
+ ASSERT_FALSE(t->As<ast::type::SamplerType>()->IsComparison());
}
TEST_F(ParserImplTest, TextureSamplerTypes_SamplerComparison) {
@@ -53,8 +53,8 @@
EXPECT_TRUE(t.matched);
EXPECT_FALSE(t.errored);
ASSERT_NE(t.value, nullptr);
- ASSERT_TRUE(t->IsSampler());
- ASSERT_TRUE(t->AsSampler()->IsComparison());
+ ASSERT_TRUE(t->Is<ast::type::SamplerType>());
+ ASSERT_TRUE(t->As<ast::type::SamplerType>()->IsComparison());
}
TEST_F(ParserImplTest, TextureSamplerTypes_DepthTexture) {
diff --git a/src/reader/wgsl/parser_impl_type_decl_test.cc b/src/reader/wgsl/parser_impl_type_decl_test.cc
index 5943dab..0472dae 100644
--- a/src/reader/wgsl/parser_impl_type_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_type_decl_test.cc
@@ -747,8 +747,8 @@
EXPECT_FALSE(t.errored);
ASSERT_NE(t.value, nullptr) << p->error();
EXPECT_EQ(t.value, type);
- ASSERT_TRUE(t->IsSampler());
- ASSERT_FALSE(t->AsSampler()->IsComparison());
+ ASSERT_TRUE(t->Is<ast::type::SamplerType>());
+ ASSERT_FALSE(t->As<ast::type::SamplerType>()->IsComparison());
}
TEST_F(ParserImplTest, TypeDecl_Texture_Old) {
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index a697caa..525d8a1 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -2079,8 +2079,8 @@
// https://bugs.chromium.org/p/tint/issues/detail?id=183
error_ = "pointers not supported in HLSL";
return false;
- } else if (type->IsSampler()) {
- auto* sampler = type->AsSampler();
+ } else if (type->Is<ast::type::SamplerType>()) {
+ auto* sampler = type->As<ast::type::SamplerType>();
out << "Sampler";
if (sampler->IsComparison()) {
out << "Comparison";
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index 762cd9a..695ccfd 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -1832,7 +1832,7 @@
return false;
}
out_ << "*";
- } else if (type->IsSampler()) {
+ } else if (type->Is<ast::type::SamplerType>()) {
out_ << "sampler";
} else if (type->IsStruct()) {
// The struct type emits as just the name. The declaration would be emitted
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 0906c6f..590f467 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -734,7 +734,7 @@
break;
}
}
- } else if (!type->IsSampler()) {
+ } else if (!type->Is<ast::type::SamplerType>()) {
// Certain cases require us to generate a constructor value.
//
// 1- ConstantId's must be attached to the OpConstant, if we have a
@@ -2452,7 +2452,7 @@
if (!GenerateTextureType(type->AsTexture(), result)) {
return 0;
}
- } else if (type->IsSampler()) {
+ } else if (type->Is<ast::type::SamplerType>()) {
push_type(spv::Op::OpTypeSampler, {result});
// Register both of the sampler type names. In SPIR-V they're the same
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index e9ed0e8..52fa961 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -453,8 +453,8 @@
return false;
}
out_ << ">";
- } else if (type->IsSampler()) {
- auto* sampler = type->AsSampler();
+ } else if (type->Is<ast::type::SamplerType>()) {
+ auto* sampler = type->As<ast::type::SamplerType>();
out_ << "sampler";
if (sampler->IsComparison()) {