Remove StructMember::name().
This CL removes the name accessor from the struct member. Usages have
been replaced with symbol usages.
Change-Id: Idd9c5b34f0b5503ffee84e0c82d69aa65b1df7ea
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/36820
Reviewed-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
diff --git a/src/ast/struct.cc b/src/ast/struct.cc
index 452a93c..1cf1c38 100644
--- a/src/ast/struct.cc
+++ b/src/ast/struct.cc
@@ -34,9 +34,9 @@
Struct::~Struct() = default;
-StructMember* Struct::get_member(const std::string& name) const {
+StructMember* Struct::get_member(const Symbol& symbol) const {
for (auto* mem : members_) {
- if (mem->name() == name) {
+ if (mem->symbol() == symbol) {
return mem;
}
}
diff --git a/src/ast/struct.h b/src/ast/struct.h
index 260bfb6..9b4cb38 100644
--- a/src/ast/struct.h
+++ b/src/ast/struct.h
@@ -47,10 +47,10 @@
/// @returns the members
const StructMemberList& members() const { return members_; }
- /// Returns the struct member with the given name or nullptr if non exists.
- /// @param name the name of the member
+ /// Returns the struct member with the given symbol or nullptr if non exists.
+ /// @param symbol the symbol of the member
/// @returns the struct member or nullptr if not found
- StructMember* get_member(const std::string& name) const;
+ StructMember* get_member(const Symbol& symbol) const;
/// @returns true if the struct is block decorated
bool IsBlockDecorated() const;
diff --git a/src/ast/struct_member.h b/src/ast/struct_member.h
index 02da408..66d1977 100644
--- a/src/ast/struct_member.h
+++ b/src/ast/struct_member.h
@@ -50,8 +50,6 @@
/// @returns the symbol
const Symbol& symbol() const { return symbol_; }
- /// @returns the name
- const std::string& name() const { return name_; }
/// @returns the type
type::Type* type() const { return type_; }
diff --git a/src/ast/struct_member_test.cc b/src/ast/struct_member_test.cc
index cc7485b..df6758a 100644
--- a/src/ast/struct_member_test.cc
+++ b/src/ast/struct_member_test.cc
@@ -30,7 +30,6 @@
TEST_F(StructMemberTest, Creation) {
auto* st = Member("a", ty.i32, {MemberOffset(4)});
EXPECT_EQ(st->symbol(), Symbol(1));
- EXPECT_EQ(st->name(), "a");
EXPECT_EQ(st->type(), ty.i32);
EXPECT_EQ(st->decorations().size(), 1u);
EXPECT_TRUE(st->decorations()[0]->Is<StructMemberOffsetDecoration>());
@@ -45,7 +44,6 @@
Source{Source::Range{Source::Location{27, 4}, Source::Location{27, 8}}},
"a", ty.i32);
EXPECT_EQ(st->symbol(), Symbol(1));
- EXPECT_EQ(st->name(), "a");
EXPECT_EQ(st->type(), ty.i32);
EXPECT_EQ(st->decorations().size(), 0u);
EXPECT_EQ(st->source().range.begin.line, 27u);
diff --git a/src/reader/wgsl/parser_impl_struct_body_decl_test.cc b/src/reader/wgsl/parser_impl_struct_body_decl_test.cc
index 8577ecc..a66837b 100644
--- a/src/reader/wgsl/parser_impl_struct_body_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_body_decl_test.cc
@@ -34,7 +34,7 @@
ASSERT_EQ(m.value.size(), 1u);
const auto* mem = m.value[0];
- EXPECT_EQ(mem->name(), "a");
+ EXPECT_EQ(mem->symbol(), p->get_module().RegisterSymbol("a"));
EXPECT_EQ(mem->type(), i32);
EXPECT_EQ(mem->decorations().size(), 0u);
}
diff --git a/src/reader/wgsl/parser_impl_struct_decl_test.cc b/src/reader/wgsl/parser_impl_struct_decl_test.cc
index f176bb3..b218608 100644
--- a/src/reader/wgsl/parser_impl_struct_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_decl_test.cc
@@ -41,8 +41,10 @@
ASSERT_NE(s.value, nullptr);
ASSERT_EQ(s->symbol(), p->get_module().RegisterSymbol("S"));
ASSERT_EQ(s->impl()->members().size(), 2u);
- EXPECT_EQ(s->impl()->members()[0]->name(), "a");
- EXPECT_EQ(s->impl()->members()[1]->name(), "b");
+ EXPECT_EQ(s->impl()->members()[0]->symbol(),
+ p->get_module().RegisterSymbol("a"));
+ EXPECT_EQ(s->impl()->members()[1]->symbol(),
+ p->get_module().RegisterSymbol("b"));
}
TEST_F(ParserImplTest, StructDecl_ParsesWithDecoration) {
@@ -63,8 +65,10 @@
ASSERT_NE(s.value, nullptr);
ASSERT_EQ(s->symbol(), p->get_module().RegisterSymbol("B"));
ASSERT_EQ(s->impl()->members().size(), 2u);
- EXPECT_EQ(s->impl()->members()[0]->name(), "a");
- EXPECT_EQ(s->impl()->members()[1]->name(), "b");
+ EXPECT_EQ(s->impl()->members()[0]->symbol(),
+ p->get_module().RegisterSymbol("a"));
+ EXPECT_EQ(s->impl()->members()[1]->symbol(),
+ p->get_module().RegisterSymbol("b"));
ASSERT_EQ(s->impl()->decorations().size(), 1u);
EXPECT_TRUE(s->impl()->decorations()[0]->Is<ast::StructBlockDecoration>());
}
@@ -88,8 +92,10 @@
ASSERT_NE(s.value, nullptr);
ASSERT_EQ(s->symbol(), p->get_module().RegisterSymbol("S"));
ASSERT_EQ(s->impl()->members().size(), 2u);
- EXPECT_EQ(s->impl()->members()[0]->name(), "a");
- EXPECT_EQ(s->impl()->members()[1]->name(), "b");
+ EXPECT_EQ(s->impl()->members()[0]->symbol(),
+ p->get_module().RegisterSymbol("a"));
+ EXPECT_EQ(s->impl()->members()[1]->symbol(),
+ p->get_module().RegisterSymbol("b"));
ASSERT_EQ(s->impl()->decorations().size(), 2u);
EXPECT_TRUE(s->impl()->decorations()[0]->Is<ast::StructBlockDecoration>());
EXPECT_TRUE(s->impl()->decorations()[1]->Is<ast::StructBlockDecoration>());
diff --git a/src/reader/wgsl/parser_impl_struct_member_test.cc b/src/reader/wgsl/parser_impl_struct_member_test.cc
index 4223ca3..f5a9fd0 100644
--- a/src/reader/wgsl/parser_impl_struct_member_test.cc
+++ b/src/reader/wgsl/parser_impl_struct_member_test.cc
@@ -39,7 +39,7 @@
ASSERT_FALSE(m.errored);
ASSERT_NE(m.value, nullptr);
- EXPECT_EQ(m->name(), "a");
+ EXPECT_EQ(m->symbol(), p->get_module().RegisterSymbol("a"));
EXPECT_EQ(m->type(), i32);
EXPECT_EQ(m->decorations().size(), 0u);
@@ -65,7 +65,7 @@
ASSERT_FALSE(m.errored);
ASSERT_NE(m.value, nullptr);
- EXPECT_EQ(m->name(), "a");
+ EXPECT_EQ(m->symbol(), p->get_module().RegisterSymbol("a"));
EXPECT_EQ(m->type(), i32);
EXPECT_EQ(m->decorations().size(), 1u);
EXPECT_TRUE(m->decorations()[0]->Is<ast::StructMemberOffsetDecoration>());
@@ -96,7 +96,7 @@
ASSERT_FALSE(m.errored);
ASSERT_NE(m.value, nullptr);
- EXPECT_EQ(m->name(), "a");
+ EXPECT_EQ(m->symbol(), p->get_module().RegisterSymbol("a"));
EXPECT_EQ(m->type(), i32);
EXPECT_EQ(m->decorations().size(), 2u);
EXPECT_TRUE(m->decorations()[0]->Is<ast::StructMemberOffsetDecoration>());
diff --git a/src/type_determiner.cc b/src/type_determiner.cc
index 048120b..967f0e2 100644
--- a/src/type_determiner.cc
+++ b/src/type_determiner.cc
@@ -1048,17 +1048,18 @@
ast::type::Type* ret = nullptr;
if (auto* ty = data_type->As<ast::type::Struct>()) {
auto* strct = ty->impl();
- auto name = expr->member()->name();
+ auto symbol = expr->member()->symbol();
for (auto* member : strct->members()) {
- if (member->name() == name) {
+ if (member->symbol() == symbol) {
ret = member->type();
break;
}
}
if (ret == nullptr) {
- set_error(expr->source(), "struct member " + name + " not found");
+ set_error(expr->source(),
+ "struct member " + mod_->SymbolToName(symbol) + " not found");
return false;
}
@@ -1067,7 +1068,9 @@
ret = mod_->create<ast::type::Pointer>(ret, ptr->storage_class());
}
} else if (auto* vec = data_type->As<ast::type::Vector>()) {
- auto size = expr->member()->name().size();
+ // TODO(dsinclair): Swizzle, record into the identifier experesion
+
+ auto size = mod_->SymbolToName(expr->member()->symbol()).size();
if (size == 1) {
// A single element swizzle is just the type of the vector.
ret = vec->type();
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index 4eaaf59..b631141 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -1749,7 +1749,7 @@
auto* res_type = mem->structure()->result_type()->UnwrapAll();
if (auto* str = res_type->As<ast::type::Struct>()) {
auto* str_type = str->impl();
- auto* str_member = str_type->get_member(mem->member()->name());
+ auto* str_member = str_type->get_member(mem->member()->symbol());
if (!str_member->has_offset_decoration()) {
error_ = "missing offset decoration for struct member";
@@ -1758,9 +1758,11 @@
out << str_member->offset();
} else if (res_type->Is<ast::type::Vector>()) {
+ // TODO(dsinclair): Swizzle stuff
+ //
// This must be a single element swizzle if we've got a vector at this
// point.
- if (mem->member()->name().size() != 1) {
+ if (module_->SymbolToName(mem->member()->symbol()).size() != 1) {
error_ =
"Encountered multi-element swizzle when should have only one "
"level";
@@ -1770,7 +1772,9 @@
// TODO(dsinclair): All our types are currently 4 bytes (f32, i32, u32)
// so this is assuming 4. This will need to be fixed when we get f16 or
// f64 types.
- out << "(4 * " << convert_swizzle_to_index(mem->member()->name())
+ out << "(4 * "
+ << convert_swizzle_to_index(
+ module_->SymbolToName(mem->member()->symbol()))
<< ")";
} else {
error_ =
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index b662656..f45ef18 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -888,12 +888,12 @@
}
auto* strct = data_type->As<ast::type::Struct>()->impl();
- auto name = expr->member()->name();
+ auto symbol = expr->member()->symbol();
uint32_t i = 0;
for (; i < strct->members().size(); ++i) {
auto* member = strct->members()[i];
- if (member->name() == name) {
+ if (member->symbol() == symbol) {
break;
}
}
@@ -912,7 +912,8 @@
return false;
}
- auto swiz = expr->member()->name();
+ // TODO(dsinclair): Swizzle stuff
+ auto swiz = mod_->SymbolToName(expr->member()->symbol());
// Single element swizzle is either an access chain or a composite extract
if (swiz.size() == 1) {
auto val = IndexFromName(swiz[0]);
@@ -2832,8 +2833,9 @@
uint32_t Builder::GenerateStructMember(uint32_t struct_id,
uint32_t idx,
ast::StructMember* member) {
- push_debug(spv::Op::OpMemberName, {Operand::Int(struct_id), Operand::Int(idx),
- Operand::String(member->name())});
+ push_debug(spv::Op::OpMemberName,
+ {Operand::Int(struct_id), Operand::Int(idx),
+ Operand::String(namer_->NameFor(member->symbol()))});
bool has_layout = false;
for (auto* deco : member->decorations()) {
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index 514ccc2..5440330 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -567,7 +567,7 @@
out_ << "[[offset(" << offset->offset() << ")]]" << std::endl;
}
make_indent();
- out_ << mem->name() << " : ";
+ out_ << module_.SymbolToName(mem->symbol()) << " : ";
if (!EmitType(mem->type())) {
return false;
}