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)