Always create TVariables for TIntermSymbol nodes
TIntermSymbol nodes are now constructed based on a specific TVariable.
This makes sure that all TIntermSymbol nodes that are created to refer
to a specific temporary in an AST transform will have consistent data.
The TVariable objects are not necessarily added to the symbol table
levels - just those variables that can be referred to by their name
during parsing need to be reachable through there.
In the future this can be taken a step further so that TIntermSymbol
nodes just to point to a TVariable instead of duplicating the
information.
BUG=angleproject:2267
TEST=angle_unittests
Change-Id: I4e7bcdb0637cd3b588d3c202ef02f4b7bd7954a1
Reviewed-on: https://chromium-review.googlesource.com/811925
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
diff --git a/src/compiler/translator/IntermTraverse.cpp b/src/compiler/translator/IntermTraverse.cpp
index 6c25c6c..65fe819 100644
--- a/src/compiler/translator/IntermTraverse.cpp
+++ b/src/compiler/translator/IntermTraverse.cpp
@@ -113,8 +113,7 @@
mDepth(-1),
mMaxDepth(0),
mInGlobalScope(true),
- mSymbolTable(symbolTable),
- mTemporaryId(nullptr)
+ mSymbolTable(symbolTable)
{
}
@@ -177,58 +176,6 @@
insertStatementsInParentBlock(insertions);
}
-TIntermSymbol *TIntermTraverser::createTempSymbol(const TType &type, TQualifier qualifier)
-{
- ASSERT(mTemporaryId != nullptr);
- // nextTemporaryId() needs to be called when the code wants to start using another temporary
- // symbol.
- return CreateTempSymbolNode(*mTemporaryId, type, qualifier);
-}
-
-TIntermSymbol *TIntermTraverser::createTempSymbol(const TType &type)
-{
- return createTempSymbol(type, EvqTemporary);
-}
-
-TIntermDeclaration *TIntermTraverser::createTempDeclaration(const TType &type)
-{
- ASSERT(mTemporaryId != nullptr);
- TIntermDeclaration *tempDeclaration = new TIntermDeclaration();
- tempDeclaration->appendDeclarator(CreateTempSymbolNode(*mTemporaryId, type, EvqTemporary));
- return tempDeclaration;
-}
-
-TIntermDeclaration *TIntermTraverser::createTempInitDeclaration(TIntermTyped *initializer,
- TQualifier qualifier)
-{
- ASSERT(mTemporaryId != nullptr);
- return CreateTempInitDeclarationNode(*mTemporaryId, initializer, qualifier);
-}
-
-TIntermDeclaration *TIntermTraverser::createTempInitDeclaration(TIntermTyped *initializer)
-{
- return createTempInitDeclaration(initializer, EvqTemporary);
-}
-
-TIntermBinary *TIntermTraverser::createTempAssignment(TIntermTyped *rightNode)
-{
- ASSERT(rightNode != nullptr);
- TIntermSymbol *tempSymbol = createTempSymbol(rightNode->getType());
- TIntermBinary *assignment = new TIntermBinary(EOpAssign, tempSymbol, rightNode);
- return assignment;
-}
-
-void TIntermTraverser::nextTemporaryId()
-{
- ASSERT(mSymbolTable);
- if (!mTemporaryId)
- {
- mTemporaryId = new TSymbolUniqueId(mSymbolTable);
- return;
- }
- *mTemporaryId = TSymbolUniqueId(mSymbolTable);
-}
-
void TLValueTrackingTraverser::addToFunctionMap(const TSymbolUniqueId &id,
TIntermSequence *paramSequence)
{