Make TVariable type immutable
This enables using constexpr types for built-in variables and some of
the variables created in AST transformations.
BUG=angleproject:2267
TEST=angle_unittests
Change-Id: Ie85b3c9872a071a7c023ced013b14ad91cff7cee
Reviewed-on: https://chromium-review.googlesource.com/868134
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 8e4b8b2..90a88cd 100644
--- a/src/compiler/translator/SymbolTable.cpp
+++ b/src/compiler/translator/SymbolTable.cpp
@@ -14,7 +14,6 @@
#include "compiler/translator/SymbolTable.h"
#include "compiler/translator/IntermNode.h"
-#include "compiler/translator/StaticType.h"
#include <stdio.h>
#include <algorithm>
@@ -223,24 +222,22 @@
return insert(currentLevel(), interfaceBlock);
}
-TVariable *TSymbolTable::insertVariable(ESymbolLevel level, const char *name, const TType &type)
+TVariable *TSymbolTable::insertVariable(ESymbolLevel level, const char *name, const TType *type)
{
ASSERT(level <= LAST_BUILTIN_LEVEL);
+ ASSERT(type->isRealized());
return insertVariable(level, NewPoolTString(name), type, SymbolType::BuiltIn);
}
TVariable *TSymbolTable::insertVariable(ESymbolLevel level,
const TString *name,
- const TType &type,
+ const TType *type,
SymbolType symbolType)
{
+ ASSERT(level > LAST_BUILTIN_LEVEL || type->isRealized());
TVariable *var = new TVariable(this, name, type, symbolType);
if (insert(level, var))
{
- if (level <= LAST_BUILTIN_LEVEL)
- {
- var->getType().realize();
- }
return var;
}
return nullptr;
@@ -249,15 +246,13 @@
TVariable *TSymbolTable::insertVariableExt(ESymbolLevel level,
TExtension ext,
const char *name,
- const TType &type)
+ const TType *type)
{
+ ASSERT(level <= LAST_BUILTIN_LEVEL);
+ ASSERT(type->isRealized());
TVariable *var = new TVariable(this, NewPoolTString(name), type, SymbolType::BuiltIn, ext);
if (insert(level, var))
{
- if (level <= LAST_BUILTIN_LEVEL)
- {
- var->getType().realize();
- }
return var;
}
return nullptr;
@@ -266,6 +261,7 @@
bool TSymbolTable::insertVariable(ESymbolLevel level, TVariable *variable)
{
ASSERT(variable);
+ ASSERT(level > LAST_BUILTIN_LEVEL || variable->getType().isRealized());
return insert(level, variable);
}