Generate code for unmangled name lookup

Instead of using an std::map at each symbol table level, use the
gen_builtin_symbols.py script to build a function to query unmangled
names.

BUG=angleproject:2267
TEST=angle_unittests

Change-Id: I4f1cf1df1f50fe9d909f3249150ee002ee6efb61
Reviewed-on: https://chromium-review.googlesource.com/931885
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/compiler/translator/SymbolTable.cpp b/src/compiler/translator/SymbolTable.cpp
index aecc95b..e8d0a8f 100644
--- a/src/compiler/translator/SymbolTable.cpp
+++ b/src/compiler/translator/SymbolTable.cpp
@@ -63,23 +63,15 @@
   public:
     TSymbolTableBuiltInLevel() = default;
 
-    bool insert(const TSymbol *symbol);
-
+    void insert(const TSymbol *symbol);
     const TSymbol *find(const ImmutableString &name) const;
 
-    void insertUnmangledBuiltIn(const ImmutableString &name, TExtension ext);
-    const UnmangledBuiltIn *getUnmangledBuiltIn(const ImmutableString &name) const;
-
   private:
     using tLevel        = TUnorderedMap<ImmutableString,
                                  const TSymbol *,
                                  ImmutableString::FowlerNollVoHash<sizeof(size_t)>>;
     using tLevelPair    = const tLevel::value_type;
-    using tInsertResult = std::pair<tLevel::iterator, bool>;
-
     tLevel mLevel;
-
-    std::map<ImmutableString, UnmangledBuiltIn> mUnmangledBuiltIns;
 };
 
 bool TSymbolTable::TSymbolTableLevel::insert(TSymbol *symbol)
@@ -103,11 +95,9 @@
         return (*it).second;
 }
 
-bool TSymbolTable::TSymbolTableBuiltInLevel::insert(const TSymbol *symbol)
+void TSymbolTable::TSymbolTableBuiltInLevel::insert(const TSymbol *symbol)
 {
-    // returning true means symbol was added to the table
-    tInsertResult result = mLevel.insert(tLevelPair(symbol->getMangledName(), symbol));
-    return result.second;
+    mLevel.insert(tLevelPair(symbol->getMangledName(), symbol));
 }
 
 const TSymbol *TSymbolTable::TSymbolTableBuiltInLevel::find(const ImmutableString &name) const
@@ -119,27 +109,8 @@
         return (*it).second;
 }
 
-void TSymbolTable::TSymbolTableBuiltInLevel::insertUnmangledBuiltIn(const ImmutableString &name,
-                                                                    TExtension ext)
-{
-    if (ext == TExtension::UNDEFINED || mUnmangledBuiltIns.find(name) == mUnmangledBuiltIns.end())
-    {
-        mUnmangledBuiltIns[name] = UnmangledBuiltIn(ext);
-    }
-}
-
-const UnmangledBuiltIn *TSymbolTable::TSymbolTableBuiltInLevel::getUnmangledBuiltIn(
-    const ImmutableString &name) const
-{
-    auto it = mUnmangledBuiltIns.find(ImmutableString(name));
-    if (it == mUnmangledBuiltIns.end())
-    {
-        return nullptr;
-    }
-    return &(it->second);
-}
-
-TSymbolTable::TSymbolTable() : mUniqueIdCounter(0), mUserDefinedUniqueIdsStart(-1)
+TSymbolTable::TSymbolTable()
+    : mUniqueIdCounter(0), mUserDefinedUniqueIdsStart(-1), mShaderType(GL_FRAGMENT_SHADER)
 {
 }
 
@@ -401,49 +372,6 @@
     mTable.back()->setGlobalInvariant(invariant);
 }
 
-void TSymbolTable::insertUnmangledBuiltIn(const ImmutableString &name,
-                                          TExtension ext,
-                                          ESymbolLevel level)
-{
-    ASSERT(level >= 0 && level <= LAST_BUILTIN_LEVEL);
-    ASSERT(mUserDefinedUniqueIdsStart == -1);
-    mBuiltInTable[level]->insertUnmangledBuiltIn(name, ext);
-}
-
-bool TSymbolTable::hasUnmangledBuiltInAtLevel(const char *name, ESymbolLevel level)
-{
-    ASSERT(level >= 0 && level <= LAST_BUILTIN_LEVEL);
-    return mBuiltInTable[level]->getUnmangledBuiltIn(ImmutableString(name)) != nullptr;
-}
-
-const UnmangledBuiltIn *TSymbolTable::getUnmangledBuiltInForShaderVersion(
-    const ImmutableString &name,
-    int shaderVersion)
-{
-    for (int level = LAST_BUILTIN_LEVEL; level >= 0; --level)
-    {
-        if (level == ESSL3_1_BUILTINS && shaderVersion != 310)
-        {
-            --level;
-        }
-        if (level == ESSL3_BUILTINS && shaderVersion < 300)
-        {
-            --level;
-        }
-        if (level == ESSL1_BUILTINS && shaderVersion != 100)
-        {
-            --level;
-        }
-
-        const UnmangledBuiltIn *builtIn = mBuiltInTable[level]->getUnmangledBuiltIn(name);
-        if (builtIn != nullptr)
-        {
-            return builtIn;
-        }
-    }
-    return nullptr;
-}
-
 void TSymbolTable::markBuiltInInitializationFinished()
 {
     mUserDefinedUniqueIdsStart = mUniqueIdCounter;
@@ -467,6 +395,8 @@
                                       ShShaderSpec spec,
                                       const ShBuiltInResources &resources)
 {
+    mShaderType = type;
+
     ASSERT(isEmpty());
     pushBuiltInLevel();  // COMMON_BUILTINS
     pushBuiltInLevel();  // ESSL1_BUILTINS
@@ -506,7 +436,6 @@
     setDefaultPrecision(EbtAtomicCounter, EbpHigh);
 
     insertBuiltInFunctions(type);
-    insertBuiltInFunctionUnmangledNames(type);
     mUniqueIdCounter = kLastStaticBuiltInId + 1;
 
     initializeBuiltInVariables(type, spec, resources);