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;
     }