diff options
author | wolfbeast <mcwerewolf@gmail.com> | 2018-07-11 23:29:50 +0200 |
---|---|---|
committer | wolfbeast <mcwerewolf@gmail.com> | 2018-07-11 23:31:02 +0200 |
commit | 70dd5e7c66b1fe3f82e5b4db2406050baba15f05 (patch) | |
tree | 3f012200ef3c934f33db1a4ef2b790fae3141860 /gfx/angle/src/compiler/translator/IntermNodePatternMatcher.cpp | |
parent | 3b7ffb477eec078c7036c92c6a51bb5de6de4f28 (diff) | |
parent | 8481fa25d246f1968d0a254ee3c6cdd82c60781a (diff) | |
download | UXP-70dd5e7c66b1fe3f82e5b4db2406050baba15f05.tar UXP-70dd5e7c66b1fe3f82e5b4db2406050baba15f05.tar.gz UXP-70dd5e7c66b1fe3f82e5b4db2406050baba15f05.tar.lz UXP-70dd5e7c66b1fe3f82e5b4db2406050baba15f05.tar.xz UXP-70dd5e7c66b1fe3f82e5b4db2406050baba15f05.zip |
Merge branch 'ANGLE-rollback'
This resolves #624
Note: Cherry-picked some fixes on top of the ANGLE version that we want to keep.
Diffstat (limited to 'gfx/angle/src/compiler/translator/IntermNodePatternMatcher.cpp')
-rwxr-xr-x | gfx/angle/src/compiler/translator/IntermNodePatternMatcher.cpp | 23 |
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 |