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 b9f16d72..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..c7123100 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 {