summaryrefslogtreecommitdiffstats
path: root/gfx/angle/src/compiler/translator/IntermNodePatternMatcher.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/angle/src/compiler/translator/IntermNodePatternMatcher.cpp')
-rwxr-xr-xgfx/angle/src/compiler/translator/IntermNodePatternMatcher.cpp23
1 files changed, 16 insertions, 7 deletions
diff --git a/gfx/angle/src/compiler/translator/IntermNodePatternMatcher.cpp b/gfx/angle/src/compiler/translator/IntermNodePatternMatcher.cpp
index dd2054f68..b614d8365 100755
--- a/gfx/angle/src/compiler/translator/IntermNodePatternMatcher.cpp
+++ b/gfx/angle/src/compiler/translator/IntermNodePatternMatcher.cpp
@@ -12,9 +12,17 @@
#include "compiler/translator/IntermNode.h"
-namespace sh
+namespace
{
+bool IsNodeBlock(TIntermNode *node)
+{
+ ASSERT(node != nullptr);
+ return (node->getAsAggregate() && node->getAsAggregate()->getOp() == EOpSequence);
+}
+
+} // anonymous namespace
+
IntermNodePatternMatcher::IntermNodePatternMatcher(const unsigned int mask) : mMask(mask)
{
}
@@ -31,7 +39,7 @@ bool IntermNodePatternMatcher::matchInternal(TIntermBinary *node, TIntermNode *p
if ((mMask & kExpressionReturningArray) != 0)
{
if (node->isArray() && node->getOp() == EOpAssign && parentNode != nullptr &&
- !parentNode->getAsBlock())
+ !IsNodeBlock(parentNode))
{
return true;
}
@@ -88,7 +96,7 @@ bool IntermNodePatternMatcher::match(TIntermAggregate *node, TIntermNode *parent
if (node->getType().isArray() && !parentIsAssignment &&
(node->isConstructor() || node->getOp() == EOpFunctionCall) &&
- !parentNode->getAsBlock())
+ !IsNodeBlock(parentNode))
{
return true;
}
@@ -97,13 +105,14 @@ bool IntermNodePatternMatcher::match(TIntermAggregate *node, TIntermNode *parent
return false;
}
-bool IntermNodePatternMatcher::match(TIntermTernary *node)
+bool IntermNodePatternMatcher::match(TIntermSelection *node)
{
if ((mMask & kUnfoldedShortCircuitExpression) != 0)
{
- return true;
+ if (node->usesTernaryOperator())
+ {
+ return true;
+ }
}
return false;
}
-
-} // namespace sh