diff options
Diffstat (limited to 'src/3rdparty/angle/src/compiler/translator/UnfoldShortCircuitAST.cpp')
-rw-r--r-- | src/3rdparty/angle/src/compiler/translator/UnfoldShortCircuitAST.cpp | 59 |
1 files changed, 0 insertions, 59 deletions
diff --git a/src/3rdparty/angle/src/compiler/translator/UnfoldShortCircuitAST.cpp b/src/3rdparty/angle/src/compiler/translator/UnfoldShortCircuitAST.cpp deleted file mode 100644 index 4e4653bbe5..0000000000 --- a/src/3rdparty/angle/src/compiler/translator/UnfoldShortCircuitAST.cpp +++ /dev/null @@ -1,59 +0,0 @@ -// -// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. -// - -#include "compiler/translator/UnfoldShortCircuitAST.h" - -namespace sh -{ - -namespace -{ - -// "x || y" is equivalent to "x ? true : y". -TIntermTernary *UnfoldOR(TIntermTyped *x, TIntermTyped *y) -{ - TConstantUnion *u = new TConstantUnion; - u->setBConst(true); - TIntermConstantUnion *trueNode = - new TIntermConstantUnion(u, TType(EbtBool, EbpUndefined, EvqConst, 1)); - return new TIntermTernary(x, trueNode, y); -} - -// "x && y" is equivalent to "x ? y : false". -TIntermTernary *UnfoldAND(TIntermTyped *x, TIntermTyped *y) -{ - TConstantUnion *u = new TConstantUnion; - u->setBConst(false); - TIntermConstantUnion *falseNode = - new TIntermConstantUnion(u, TType(EbtBool, EbpUndefined, EvqConst, 1)); - return new TIntermTernary(x, y, falseNode); -} - -} // namespace anonymous - -bool UnfoldShortCircuitAST::visitBinary(Visit visit, TIntermBinary *node) -{ - TIntermTernary *replacement = nullptr; - - switch (node->getOp()) - { - case EOpLogicalOr: - replacement = UnfoldOR(node->getLeft(), node->getRight()); - break; - case EOpLogicalAnd: - replacement = UnfoldAND(node->getLeft(), node->getRight()); - break; - default: - break; - } - if (replacement) - { - queueReplacement(replacement, OriginalNode::IS_DROPPED); - } - return true; -} - -} // namespace sh |