Make TSymbol immutable

There's still an exception for changing the names of structures, but
otherwise the data stored in the TSymbol base class is never changed.

BUG=angleproject:2267
TEST=angle_unittests

Change-Id: I5b3f44cd365320ad09b46d2cfa3654a7d3f4bbc3
Reviewed-on: https://chromium-review.googlesource.com/806556
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/compiler/translator/SymbolTable.cpp b/src/compiler/translator/SymbolTable.cpp
index 90d4c15..7a9d57e 100644
--- a/src/compiler/translator/SymbolTable.cpp
+++ b/src/compiler/translator/SymbolTable.cpp
@@ -29,13 +29,16 @@
 
 }  // anonymous namespace
 
-TSymbol::TSymbol(TSymbolTable *symbolTable, const TString *name)
-    : mName(name), mUniqueId(symbolTable->nextUniqueId()), mExtension(TExtension::UNDEFINED)
+TSymbol::TSymbol(TSymbolTable *symbolTable, const TString *name, TExtension extension)
+    : mName(name), mUniqueId(symbolTable->nextUniqueId()), mExtension(extension)
 {
 }
 
-TVariable::TVariable(TSymbolTable *symbolTable, const TString *name, const TType &t)
-    : TSymbol(symbolTable, name), type(t), unionArray(nullptr)
+TVariable::TVariable(TSymbolTable *symbolTable,
+                     const TString *name,
+                     const TType &t,
+                     TExtension extension)
+    : TSymbol(symbolTable, name, extension), type(t), unionArray(nullptr)
 {
 }
 
@@ -73,8 +76,9 @@
 TInterfaceBlock::TInterfaceBlock(TSymbolTable *symbolTable,
                                  const TString *name,
                                  const TFieldList *fields,
-                                 const TLayoutQualifier &layoutQualifier)
-    : TSymbol(symbolTable, name),
+                                 const TLayoutQualifier &layoutQualifier,
+                                 TExtension extension)
+    : TSymbol(symbolTable, name, extension),
       TFieldListCollection(fields),
       mBlockStorage(layoutQualifier.blockStorage),
       mBinding(layoutQualifier.binding)
@@ -356,8 +360,7 @@
                                            const char *name,
                                            const TType &type)
 {
-    TVariable *var = new TVariable(this, NewPoolTString(name), type);
-    var->relateToExtension(ext);
+    TVariable *var = new TVariable(this, NewPoolTString(name), type, ext);
     if (insert(level, var))
     {
         if (var->getType().getBasicType() == EbtStruct)