Refer to GLSL extensions through TExtension enum

Extensions are now referred to by enum values instead of strings most
of the time. This gets rid of unnecessary copying of strings. The code
is easier to work with than before as typoing the extension enum names
will be caught by the compiler.

BUG=angleproject:2147
TEST=angle_unittests

Change-Id: Ifa61b9f86ef03211188fc23bc23a5ce4e4d8c390
Reviewed-on: https://chromium-review.googlesource.com/571002
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 1c2de5c..7885df7 100644
--- a/src/compiler/translator/SymbolTable.cpp
+++ b/src/compiler/translator/SymbolTable.cpp
@@ -43,7 +43,7 @@
 }
 
 TSymbol::TSymbol(TSymbolTable *symbolTable, const TString *n)
-    : uniqueId(symbolTable->nextUniqueId()), name(n)
+    : uniqueId(symbolTable->nextUniqueId()), name(n), extension(TExtension::UNDEFINED)
 {
 }
 
@@ -300,7 +300,7 @@
 }
 
 TInterfaceBlockName *TSymbolTable::insertInterfaceBlockNameExt(ESymbolLevel level,
-                                                               const char *ext,
+                                                               TExtension ext,
                                                                const TString *name)
 {
     TInterfaceBlockName *blockNameSymbol = new TInterfaceBlockName(this, name);
@@ -332,7 +332,7 @@
 }
 
 TVariable *TSymbolTable::insertVariableExt(ESymbolLevel level,
-                                           const char *ext,
+                                           TExtension ext,
                                            const char *name,
                                            const TType &type)
 {
@@ -361,7 +361,7 @@
 
 void TSymbolTable::insertBuiltIn(ESymbolLevel level,
                                  TOperator op,
-                                 const char *ext,
+                                 TExtension ext,
                                  const TType *rvalue,
                                  const char *name,
                                  const TType *ptype1,
@@ -530,12 +530,13 @@
     const char *name = GetOperatorString(op);
     ASSERT(strlen(name) > 0);
     insertUnmangledBuiltInName(name, level);
-    insertBuiltIn(level, op, "", rvalue, name, ptype1, ptype2, ptype3, ptype4, ptype5);
+    insertBuiltIn(level, op, TExtension::UNDEFINED, rvalue, name, ptype1, ptype2, ptype3, ptype4,
+                  ptype5);
 }
 
 void TSymbolTable::insertBuiltInOp(ESymbolLevel level,
                                    TOperator op,
-                                   const char *ext,
+                                   TExtension ext,
                                    const TType *rvalue,
                                    const TType *ptype1,
                                    const TType *ptype2,
@@ -558,7 +559,7 @@
 }
 
 void TSymbolTable::insertBuiltInFunctionNoParametersExt(ESymbolLevel level,
-                                                        const char *ext,
+                                                        TExtension ext,
                                                         TOperator op,
                                                         const TType *rvalue,
                                                         const char *name)