Replace remaining usage of TName with TSymbol

TName used to contain just a subset of the information stored in
TSymbol. It makes more sense to use TSymbol directly instead of
converting it to TName.

This also improves type safety a bit by making some functions only
take in TVariable or TFunction instead of the more generic TName.

BUG=angleproject:2267
TEST=angle_unittests

Change-Id: Icb46923c25d33ebbbbc06ddc487da25957dda771
Reviewed-on: https://chromium-review.googlesource.com/829143
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/compiler/translator/HashNames.cpp b/src/compiler/translator/HashNames.cpp
index 6bc90fa..df448d8 100644
--- a/src/compiler/translator/HashNames.cpp
+++ b/src/compiler/translator/HashNames.cpp
@@ -7,6 +7,7 @@
 #include "compiler/translator/HashNames.h"
 
 #include "compiler/translator/IntermNode.h"
+#include "compiler/translator/Symbol.h"
 
 namespace sh
 {
@@ -38,35 +39,45 @@
 
 }  // anonymous namespace
 
-TString HashName(const TName &name, ShHashFunction64 hashFunction, NameMap *nameMap)
+TString HashName(const TString &name, ShHashFunction64 hashFunction, NameMap *nameMap)
 {
-    if (name.getString().empty() || name.isInternal())
-    {
-        return name.getString();
-    }
     if (hashFunction == nullptr)
     {
-        if (name.getString().length() + kUnhashedNamePrefixLength > kESSLMaxIdentifierLength)
+        if (name.length() + kUnhashedNamePrefixLength > kESSLMaxIdentifierLength)
         {
             // If the identifier length is already close to the limit, we can't prefix it. This is
             // not a problem since there are no builtins or ANGLE's internal variables that would
             // have as long names and could conflict.
-            return name.getString();
+            return name;
         }
-        return kUnhashedNamePrefix + name.getString();
+        return kUnhashedNamePrefix + name;
     }
     if (nameMap)
     {
-        NameMap::const_iterator it = nameMap->find(name.getString().c_str());
+        NameMap::const_iterator it = nameMap->find(name.c_str());
         if (it != nameMap->end())
             return it->second.c_str();
     }
-    TString hashedName = HashName(name.getString(), hashFunction);
+    TString hashedName = HashName(name, hashFunction);
     if (nameMap)
     {
-        (*nameMap)[name.getString().c_str()] = hashedName.c_str();
+        (*nameMap)[name.c_str()] = hashedName.c_str();
     }
     return hashedName;
 }
 
+TString HashName(const TSymbol *symbol, ShHashFunction64 hashFunction, NameMap *nameMap)
+{
+    if (symbol->symbolType() == SymbolType::Empty)
+    {
+        return TString();
+    }
+    if (symbol->symbolType() == SymbolType::AngleInternal ||
+        symbol->symbolType() == SymbolType::BuiltIn)
+    {
+        return symbol->name();
+    }
+    return HashName(symbol->name(), hashFunction, nameMap);
+}
+
 }  // namespace sh