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