Replace VariableDecoration::(Is|As)Builtin with Castable Change-Id: I49d970301c46cfe29d7b22e18abb443daa0c8073 Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/34307 Reviewed-by: dan sinclair <dsinclair@chromium.org>
diff --git a/src/ast/binding_decoration_test.cc b/src/ast/binding_decoration_test.cc index 7204c37..7bd236f 100644 --- a/src/ast/binding_decoration_test.cc +++ b/src/ast/binding_decoration_test.cc
@@ -28,12 +28,13 @@ } TEST_F(BindingDecorationTest, Is) { - BindingDecoration d{2, Source{}}; - EXPECT_TRUE(d.Is<BindingDecoration>()); - EXPECT_FALSE(d.IsBuiltin()); - EXPECT_FALSE(d.IsConstantId()); - EXPECT_FALSE(d.IsLocation()); - EXPECT_FALSE(d.IsSet()); + BindingDecoration bd{2, Source{}}; + Decoration* d = &bd; + EXPECT_TRUE(d->Is<BindingDecoration>()); + EXPECT_FALSE(d->Is<BuiltinDecoration>()); + EXPECT_FALSE(bd.IsConstantId()); + EXPECT_FALSE(bd.IsLocation()); + EXPECT_FALSE(bd.IsSet()); } TEST_F(BindingDecorationTest, ToStr) {
diff --git a/src/ast/builtin_decoration.cc b/src/ast/builtin_decoration.cc index 34d48f5..856fc9a 100644 --- a/src/ast/builtin_decoration.cc +++ b/src/ast/builtin_decoration.cc
@@ -22,10 +22,6 @@ BuiltinDecoration::~BuiltinDecoration() = default; -bool BuiltinDecoration::IsBuiltin() const { - return true; -} - void BuiltinDecoration::to_str(std::ostream& out, size_t indent) const { make_indent(out, indent); out << "BuiltinDecoration{" << builtin_ << "}" << std::endl;
diff --git a/src/ast/builtin_decoration.h b/src/ast/builtin_decoration.h index 251a409..9f4636d 100644 --- a/src/ast/builtin_decoration.h +++ b/src/ast/builtin_decoration.h
@@ -31,9 +31,6 @@ BuiltinDecoration(Builtin builtin, const Source& source); ~BuiltinDecoration() override; - /// @returns true if this is a builtin decoration - bool IsBuiltin() const override; - /// @returns the builtin value Builtin value() const { return builtin_; }
diff --git a/src/ast/builtin_decoration_test.cc b/src/ast/builtin_decoration_test.cc index 438552b..d3e3702 100644 --- a/src/ast/builtin_decoration_test.cc +++ b/src/ast/builtin_decoration_test.cc
@@ -31,7 +31,7 @@ BuiltinDecoration bd{Builtin::kFragDepth, Source{}}; Decoration* d = &bd; EXPECT_FALSE(d->Is<BindingDecoration>()); - EXPECT_TRUE(bd.IsBuiltin()); + EXPECT_TRUE(d->Is<BuiltinDecoration>()); EXPECT_FALSE(bd.IsConstantId()); EXPECT_FALSE(bd.IsLocation()); EXPECT_FALSE(bd.IsSet());
diff --git a/src/ast/constant_id_decoration_test.cc b/src/ast/constant_id_decoration_test.cc index f2b7c60..6df2495 100644 --- a/src/ast/constant_id_decoration_test.cc +++ b/src/ast/constant_id_decoration_test.cc
@@ -31,7 +31,7 @@ ConstantIdDecoration cd{27, Source{}}; Decoration* d = &cd; EXPECT_FALSE(d->Is<BindingDecoration>()); - EXPECT_FALSE(cd.IsBuiltin()); + EXPECT_FALSE(d->Is<BuiltinDecoration>()); EXPECT_TRUE(cd.IsConstantId()); EXPECT_FALSE(cd.IsLocation()); EXPECT_FALSE(cd.IsSet());
diff --git a/src/ast/decorated_variable.cc b/src/ast/decorated_variable.cc index 9b30e57..dcf6da3 100644 --- a/src/ast/decorated_variable.cc +++ b/src/ast/decorated_variable.cc
@@ -16,6 +16,7 @@ #include <cassert> +#include "src/ast/builtin_decoration.h" #include "src/ast/constant_id_decoration.h" namespace tint { @@ -41,7 +42,7 @@ bool DecoratedVariable::HasBuiltinDecoration() const { for (auto* deco : decorations_) { - if (deco->IsBuiltin()) { + if (deco->Is<BuiltinDecoration>()) { return true; } }
diff --git a/src/ast/function.cc b/src/ast/function.cc index f13a898..555230b 100644 --- a/src/ast/function.cc +++ b/src/ast/function.cc
@@ -163,8 +163,8 @@ continue; } for (auto* deco : var->AsDecorated()->decorations()) { - if (deco->IsBuiltin()) { - ret.push_back({var, deco->AsBuiltin()}); + if (auto* builtin = deco->As<BuiltinDecoration>()) { + ret.push_back({var, builtin}); break; } }
diff --git a/src/ast/location_decoration_test.cc b/src/ast/location_decoration_test.cc index d794925..e2c1b7c 100644 --- a/src/ast/location_decoration_test.cc +++ b/src/ast/location_decoration_test.cc
@@ -33,7 +33,7 @@ LocationDecoration ld{2, Source{}}; Decoration* d = &ld; EXPECT_FALSE(d->Is<BindingDecoration>()); - EXPECT_FALSE(ld.IsBuiltin()); + EXPECT_FALSE(d->Is<BuiltinDecoration>()); EXPECT_FALSE(ld.IsConstantId()); EXPECT_TRUE(ld.IsLocation()); EXPECT_FALSE(ld.IsSet());
diff --git a/src/ast/set_decoration_test.cc b/src/ast/set_decoration_test.cc index e457573..df5afa1 100644 --- a/src/ast/set_decoration_test.cc +++ b/src/ast/set_decoration_test.cc
@@ -31,7 +31,7 @@ SetDecoration sd{2, Source{}}; Decoration* d = &sd; EXPECT_FALSE(d->Is<BindingDecoration>()); - EXPECT_FALSE(sd.IsBuiltin()); + EXPECT_FALSE(d->Is<BuiltinDecoration>()); EXPECT_FALSE(sd.IsConstantId()); EXPECT_FALSE(sd.IsLocation()); EXPECT_TRUE(sd.IsSet());
diff --git a/src/ast/variable_decoration.cc b/src/ast/variable_decoration.cc index 5e902f1..3dfb875 100644 --- a/src/ast/variable_decoration.cc +++ b/src/ast/variable_decoration.cc
@@ -35,10 +35,6 @@ return Kind; } -bool VariableDecoration::IsBuiltin() const { - return false; -} - bool VariableDecoration::IsLocation() const { return false; } @@ -51,11 +47,6 @@ return false; } -BuiltinDecoration* VariableDecoration::AsBuiltin() { - assert(IsBuiltin()); - return static_cast<BuiltinDecoration*>(this); -} - ConstantIdDecoration* VariableDecoration::AsConstantId() { assert(IsConstantId()); return static_cast<ConstantIdDecoration*>(this);
diff --git a/src/ast/variable_decoration.h b/src/ast/variable_decoration.h index a6b4f9b..c83d22b 100644 --- a/src/ast/variable_decoration.h +++ b/src/ast/variable_decoration.h
@@ -25,7 +25,6 @@ namespace tint { namespace ast { -class BuiltinDecoration; class ConstantIdDecoration; class LocationDecoration; class SetDecoration; @@ -41,8 +40,6 @@ /// @return the decoration kind DecorationKind GetKind() const override; - /// @returns true if this is a builtin decoration - virtual bool IsBuiltin() const; /// @returns true if this is a constant id decoration virtual bool IsConstantId() const; /// @returns true if this is a location decoration @@ -50,8 +47,6 @@ /// @returns true if this is a set decoration virtual bool IsSet() const; - /// @returns the decoration as a builtin decoration - BuiltinDecoration* AsBuiltin(); /// @returns the decoration as a constant id decoration ConstantIdDecoration* AsConstantId(); /// @returns the decoration as a location decoration
diff --git a/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc b/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc index 81f5356..50b5e29 100644 --- a/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc +++ b/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc
@@ -38,8 +38,9 @@ ASSERT_TRUE(deco_0->IsLocation()); EXPECT_EQ(deco_0->AsLocation()->value(), 4u); - ASSERT_TRUE(deco_1->IsBuiltin()); - EXPECT_EQ(deco_1->AsBuiltin()->value(), ast::Builtin::kPosition); + ASSERT_TRUE(deco_1->Is<ast::BuiltinDecoration>()); + EXPECT_EQ(deco_1->As<ast::BuiltinDecoration>()->value(), + ast::Builtin::kPosition); } TEST_F(ParserImplTest, VariableDecorationList_Empty) {
diff --git a/src/reader/wgsl/parser_impl_variable_decoration_test.cc b/src/reader/wgsl/parser_impl_variable_decoration_test.cc index 33ba645..3c9cdcb 100644 --- a/src/reader/wgsl/parser_impl_variable_decoration_test.cc +++ b/src/reader/wgsl/parser_impl_variable_decoration_test.cc
@@ -104,9 +104,9 @@ auto* var_deco = deco.value->As<ast::VariableDecoration>(); ASSERT_FALSE(p->has_error()) << p->error(); ASSERT_NE(var_deco, nullptr); - ASSERT_TRUE(var_deco->IsBuiltin()); + ASSERT_TRUE(var_deco->Is<ast::BuiltinDecoration>()); - auto* builtin = var_deco->AsBuiltin(); + auto* builtin = var_deco->As<ast::BuiltinDecoration>(); EXPECT_EQ(builtin->value(), params.result); } INSTANTIATE_TEST_SUITE_P(
diff --git a/src/transform/vertex_pulling_transform.cc b/src/transform/vertex_pulling_transform.cc index 4d7a6e3..05a6ab0 100644 --- a/src/transform/vertex_pulling_transform.cc +++ b/src/transform/vertex_pulling_transform.cc
@@ -127,8 +127,9 @@ } for (auto* d : v->AsDecorated()->decorations()) { - if (d->IsBuiltin() && - d->AsBuiltin()->value() == ast::Builtin::kVertexIdx) { + if (d->Is<ast::BuiltinDecoration>() && + d->As<ast::BuiltinDecoration>()->value() == + ast::Builtin::kVertexIdx) { vertex_index_name_ = v->name(); return; } @@ -169,8 +170,9 @@ } for (auto* d : v->AsDecorated()->decorations()) { - if (d->IsBuiltin() && - d->AsBuiltin()->value() == ast::Builtin::kInstanceIdx) { + if (d->Is<ast::BuiltinDecoration>() && + d->As<ast::BuiltinDecoration>()->value() == + ast::Builtin::kInstanceIdx) { instance_index_name_ = v->name(); return; }
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc index b9f16d7..a8d14d4 100644 --- a/src/writer/hlsl/generator_impl.cc +++ b/src/writer/hlsl/generator_impl.cc
@@ -1383,8 +1383,9 @@ return false; } out << "TEXCOORD" << deco->AsLocation()->value(); - } else if (deco->IsBuiltin()) { - auto attr = builtin_to_attribute(deco->AsBuiltin()->value()); + } else if (deco->Is<ast::BuiltinDecoration>()) { + auto attr = + builtin_to_attribute(deco->As<ast::BuiltinDecoration>()->value()); if (attr.empty()) { error_ = "unsupported builtin"; return false; @@ -1433,8 +1434,9 @@ error_ = "invalid location variable for pipeline stage"; return false; } - } else if (deco->IsBuiltin()) { - auto attr = builtin_to_attribute(deco->AsBuiltin()->value()); + } else if (deco->Is<ast::BuiltinDecoration>()) { + auto attr = + builtin_to_attribute(deco->As<ast::BuiltinDecoration>()->value()); if (attr.empty()) { error_ = "unsupported builtin"; return false;
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc index 0bd9116..d38c9d9 100644 --- a/src/writer/msl/generator_impl.cc +++ b/src/writer/msl/generator_impl.cc
@@ -1070,8 +1070,9 @@ error_ = "invalid location variable for pipeline stage"; return false; } - } else if (deco->IsBuiltin()) { - auto attr = builtin_to_attribute(deco->AsBuiltin()->value()); + } else if (deco->Is<ast::BuiltinDecoration>()) { + auto attr = + builtin_to_attribute(deco->As<ast::BuiltinDecoration>()->value()); if (attr.empty()) { error_ = "unsupported builtin"; return false;
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc index a4a4840..c712310 100644 --- a/src/writer/spirv/builder.cc +++ b/src/writer/spirv/builder.cc
@@ -779,10 +779,10 @@ if (var->IsDecorated()) { for (auto* deco : var->AsDecorated()->decorations()) { - if (deco->IsBuiltin()) { + if (auto* builtin = deco->As<ast::BuiltinDecoration>()) { push_annot(spv::Op::OpDecorate, {Operand::Int(var_id), Operand::Int(SpvDecorationBuiltIn), - Operand::Int(ConvertBuiltin(deco->AsBuiltin()->value()))}); + Operand::Int(ConvertBuiltin(builtin->value()))}); } else if (deco->IsLocation()) { push_annot(spv::Op::OpDecorate, {Operand::Int(var_id), Operand::Int(SpvDecorationLocation),
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc index e2dda1c..b0d3fa5 100644 --- a/src/writer/wgsl/generator_impl.cc +++ b/src/writer/wgsl/generator_impl.cc
@@ -647,8 +647,8 @@ out_ << "set(" << deco->AsSet()->value() << ")"; } else if (deco->IsLocation()) { out_ << "location(" << deco->AsLocation()->value() << ")"; - } else if (deco->IsBuiltin()) { - out_ << "builtin(" << deco->AsBuiltin()->value() << ")"; + } else if (auto* builtin = deco->As<ast::BuiltinDecoration>()) { + out_ << "builtin(" << builtin->value() << ")"; } else if (deco->IsConstantId()) { out_ << "constant_id(" << deco->AsConstantId()->value() << ")"; } else {