Split TIntermInvariantDeclaration from TIntermAggregate
This change is pure refactoring and doesn't fix bugs related to
invariant declarations. Invariant declarations are supposed to accept
a list of identifiers, but this refactoring keeps the current behavior
of only accepting a single identifier in an invariant declaration.
When the bug will be fixed, the new TIntermInvariantDeclaration class
that now has only a single child node can be changed so that it may
have multiple children.
TIntermAggregate is still used for function calls, function
prototypes and function parameter lists.
BUG=angleproject:1490
TEST=angle_unittests
Change-Id: I3e22092c87e1c06445fd7e123d9922c2fcb59428
Reviewed-on: https://chromium-review.googlesource.com/419415
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
diff --git a/src/compiler/translator/IntermTraverse.cpp b/src/compiler/translator/IntermTraverse.cpp
index e6be777..ab3ad15 100644
--- a/src/compiler/translator/IntermTraverse.cpp
+++ b/src/compiler/translator/IntermTraverse.cpp
@@ -71,6 +71,11 @@
it->traverseBlock(this);
}
+void TIntermInvariantDeclaration::traverse(TIntermTraverser *it)
+{
+ it->traverseInvariantDeclaration(this);
+}
+
void TIntermDeclaration::traverse(TIntermTraverser *it)
{
it->traverseDeclaration(this);
@@ -504,6 +509,25 @@
visitBlock(PostVisit, node);
}
+void TIntermTraverser::traverseInvariantDeclaration(TIntermInvariantDeclaration *node)
+{
+ bool visit = true;
+
+ if (preVisit)
+ {
+ visit = visitInvariantDeclaration(PreVisit, node);
+ }
+
+ if (visit)
+ {
+ node->getSymbol()->traverse(this);
+ if (postVisit)
+ {
+ visitInvariantDeclaration(PostVisit, node);
+ }
+ }
+}
+
// Traverse a declaration node.
void TIntermTraverser::traverseDeclaration(TIntermDeclaration *node)
{