Replace ArrayDecoration::(Is|As)Stride with Castable

Change-Id: I0a346226996c86a6f976b51f69ae4df32806a797
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34305
Reviewed-by: dan sinclair <dsinclair@chromium.org>
This commit is contained in:
Ben Clayton 2020-11-30 23:30:58 +00:00
parent 3958f81fd7
commit 864579db3d
8 changed files with 14 additions and 36 deletions

View File

@ -31,14 +31,5 @@ DecorationKind ArrayDecoration::GetKind() const {
return Kind; return Kind;
} }
bool ArrayDecoration::IsStride() const {
return false;
}
StrideDecoration* ArrayDecoration::AsStride() {
assert(IsStride());
return static_cast<StrideDecoration*>(this);
}
} // namespace ast } // namespace ast
} // namespace tint } // namespace tint

View File

@ -37,12 +37,6 @@ class ArrayDecoration : public Castable<ArrayDecoration, Decoration> {
/// @return the decoration kind /// @return the decoration kind
DecorationKind GetKind() const override; DecorationKind GetKind() const override;
/// @returns true if this is a stride decoration
virtual bool IsStride() const;
/// @returns the decoration as a stride decoration
StrideDecoration* AsStride();
protected: protected:
/// Constructor /// Constructor
/// @param source the source of this decoration /// @param source the source of this decoration

View File

@ -20,10 +20,6 @@ namespace ast {
StrideDecoration::StrideDecoration(uint32_t stride, const Source& source) StrideDecoration::StrideDecoration(uint32_t stride, const Source& source)
: Base(source), stride_(stride) {} : Base(source), stride_(stride) {}
bool StrideDecoration::IsStride() const {
return true;
}
StrideDecoration::~StrideDecoration() = default; StrideDecoration::~StrideDecoration() = default;
void StrideDecoration::to_str(std::ostream& out, size_t indent) const { void StrideDecoration::to_str(std::ostream& out, size_t indent) const {

View File

@ -33,9 +33,6 @@ class StrideDecoration : public Castable<StrideDecoration, ArrayDecoration> {
StrideDecoration(uint32_t stride, const Source& source); StrideDecoration(uint32_t stride, const Source& source);
~StrideDecoration() override; ~StrideDecoration() override;
/// @returns true if this is a stride decoration
bool IsStride() const override;
/// @returns the stride value /// @returns the stride value
uint32_t stride() const { return stride_; } uint32_t stride() const { return stride_; }

View File

@ -29,7 +29,7 @@ TEST_F(StrideDecorationTest, Creation) {
TEST_F(StrideDecorationTest, Is) { TEST_F(StrideDecorationTest, Is) {
StrideDecoration d{2, Source{}}; StrideDecoration d{2, Source{}};
EXPECT_TRUE(d.IsStride()); EXPECT_TRUE(d.Is<StrideDecoration>());
} }
TEST_F(StrideDecorationTest, Source) { TEST_F(StrideDecorationTest, Source) {

View File

@ -65,8 +65,8 @@ uint64_t ArrayType::BaseAlignment(MemoryLayout mem_layout) const {
uint32_t ArrayType::array_stride() const { uint32_t ArrayType::array_stride() const {
for (auto* deco : decos_) { for (auto* deco : decos_) {
if (deco->IsStride()) { if (auto* stride = deco->As<ast::StrideDecoration>()) {
return deco->AsStride()->stride(); return stride->stride();
} }
} }
return 0; return 0;
@ -74,7 +74,7 @@ uint32_t ArrayType::array_stride() const {
bool ArrayType::has_array_stride() const { bool ArrayType::has_array_stride() const {
for (auto* deco : decos_) { for (auto* deco : decos_) {
if (deco->IsStride()) { if (deco->Is<ast::StrideDecoration>()) {
return true; return true;
} }
} }

View File

@ -408,10 +408,10 @@ TEST_F(ParserImplTest, TypeDecl_Array_MultipleDecorations_OneBlock) {
auto& decos = a->decorations(); auto& decos = a->decorations();
ASSERT_EQ(decos.size(), 2u); ASSERT_EQ(decos.size(), 2u);
EXPECT_TRUE(decos[0]->IsStride()); EXPECT_TRUE(decos[0]->Is<ast::StrideDecoration>());
EXPECT_EQ(decos[0]->AsStride()->stride(), 16u); EXPECT_EQ(decos[0]->As<ast::StrideDecoration>()->stride(), 16u);
EXPECT_TRUE(decos[1]->IsStride()); EXPECT_TRUE(decos[1]->Is<ast::StrideDecoration>());
EXPECT_EQ(decos[1]->AsStride()->stride(), 32u); EXPECT_EQ(decos[1]->As<ast::StrideDecoration>()->stride(), 32u);
} }
TEST_F(ParserImplTest, TypeDecl_Array_MultipleDecorations_MultipleBlocks) { TEST_F(ParserImplTest, TypeDecl_Array_MultipleDecorations_MultipleBlocks) {
@ -429,10 +429,10 @@ TEST_F(ParserImplTest, TypeDecl_Array_MultipleDecorations_MultipleBlocks) {
auto& decos = a->decorations(); auto& decos = a->decorations();
ASSERT_EQ(decos.size(), 2u); ASSERT_EQ(decos.size(), 2u);
EXPECT_TRUE(decos[0]->IsStride()); EXPECT_TRUE(decos[0]->Is<ast::StrideDecoration>());
EXPECT_EQ(decos[0]->AsStride()->stride(), 16u); EXPECT_EQ(decos[0]->As<ast::StrideDecoration>()->stride(), 16u);
EXPECT_TRUE(decos[1]->IsStride()); EXPECT_TRUE(decos[1]->Is<ast::StrideDecoration>());
EXPECT_EQ(decos[1]->AsStride()->stride(), 32u); EXPECT_EQ(decos[1]->As<ast::StrideDecoration>()->stride(), 32u);
} }
TEST_F(ParserImplTest, TypeDecl_Array_Decoration_MissingArray) { TEST_F(ParserImplTest, TypeDecl_Array_Decoration_MissingArray) {

View File

@ -421,8 +421,8 @@ bool GeneratorImpl::EmitType(ast::type::Type* type) {
auto* ary = type->As<ast::type::ArrayType>(); auto* ary = type->As<ast::type::ArrayType>();
for (auto* deco : ary->decorations()) { for (auto* deco : ary->decorations()) {
if (deco->IsStride()) { if (auto* stride = deco->As<ast::StrideDecoration>()) {
out_ << "[[stride(" << deco->AsStride()->stride() << ")]] "; out_ << "[[stride(" << stride->stride() << ")]] ";
} }
} }