Store symbol names as a ImmutableString

This will enable compile-time initialization of built-in symbols as
well as reducing copying strings.

Most of the code that deals with names is changed to use
ImmutableString where it makes sense to avoid conversions.

The lexer/parser now allocate const char pointers into pool memory
instead of allocating TStrings. These are then converted to
ImmutableString upon entering TParseContext.

BUG=angleproject:2267
TEST=angle_unittests, angle_end2end_tests

Change-Id: I244d6271ea1ecf7150d4f89dfa388a7745a1150c
Reviewed-on: https://chromium-review.googlesource.com/881561
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/compiler/translator/ASTMetadataHLSL.cpp b/src/compiler/translator/ASTMetadataHLSL.cpp
index a15fc36..055408d 100644
--- a/src/compiler/translator/ASTMetadataHLSL.cpp
+++ b/src/compiler/translator/ASTMetadataHLSL.cpp
@@ -35,15 +35,15 @@
         ASSERT(index < metadataList->size());
 
         // ESSL 100 builtin gradient functions
-        mGradientBuiltinFunctions.insert("texture2D");
-        mGradientBuiltinFunctions.insert("texture2DProj");
-        mGradientBuiltinFunctions.insert("textureCube");
+        mGradientBuiltinFunctions.insert(ImmutableString("texture2D"));
+        mGradientBuiltinFunctions.insert(ImmutableString("texture2DProj"));
+        mGradientBuiltinFunctions.insert(ImmutableString("textureCube"));
 
         // ESSL 300 builtin gradient functions
-        mGradientBuiltinFunctions.insert("texture");
-        mGradientBuiltinFunctions.insert("textureProj");
-        mGradientBuiltinFunctions.insert("textureOffset");
-        mGradientBuiltinFunctions.insert("textureProjOffset");
+        mGradientBuiltinFunctions.insert(ImmutableString("texture"));
+        mGradientBuiltinFunctions.insert(ImmutableString("textureProj"));
+        mGradientBuiltinFunctions.insert(ImmutableString("textureOffset"));
+        mGradientBuiltinFunctions.insert(ImmutableString("textureProjOffset"));
 
         // ESSL 310 doesn't add builtin gradient functions
     }
@@ -151,7 +151,7 @@
     std::vector<TIntermNode *> mParents;
 
     // A list of builtin functions that use gradients
-    std::set<TString> mGradientBuiltinFunctions;
+    std::set<ImmutableString> mGradientBuiltinFunctions;
 };
 
 // Traverses the AST of a function definition to compute the the discontinuous loops