1 // 2 // Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved. 3 // Use of this source code is governed by a BSD-style license that can be 4 // found in the LICENSE file. 5 // 6 // UnfoldShortCircuit is an AST traverser to output short-circuiting operators as if-else statements 7 // 8 9 #ifndef COMPILER_UNFOLDSHORTCIRCUIT_H_ 10 #define COMPILER_UNFOLDSHORTCIRCUIT_H_ 11 12 #include "compiler/intermediate.h" 13 #include "compiler/ParseContext.h" 14 15 namespace sh 16 { 17 class OutputHLSL; 18 19 class UnfoldShortCircuit : public TIntermTraverser 20 { 21 public: 22 UnfoldShortCircuit(TParseContext &context, OutputHLSL *outputHLSL); 23 24 void traverse(TIntermNode *node); 25 bool visitBinary(Visit visit, TIntermBinary*); 26 bool visitSelection(Visit visit, TIntermSelection *node); 27 bool visitLoop(Visit visit, TIntermLoop *node); 28 29 int getNextTemporaryIndex(); 30 31 protected: 32 TParseContext &mContext; 33 OutputHLSL *const mOutputHLSL; 34 35 int mTemporaryIndex; 36 }; 37 } 38 39 #endif // COMPILER_UNFOLDSHORTCIRCUIT_H_ 40