18b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com// 28b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved. 38b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be 48b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com// found in the LICENSE file. 58b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com// 68b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com// UnfoldShortCircuit is an AST traverser to output short-circuiting operators as if-else statements 78b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com// 88b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com 98b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com#ifndef COMPILER_UNFOLDSHORTCIRCUIT_H_ 108b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com#define COMPILER_UNFOLDSHORTCIRCUIT_H_ 118b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com 12b1a85f48a6cb63c32e884a9dea86b1ca7275bf7cJamie Madill#include "compiler/translator/IntermNode.h" 136b9cb25980022d0c792d858bc6f6500c00a6c29dJamie Madill#include "compiler/translator/ParseContext.h" 148b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com 158b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.comnamespace sh 168b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com{ 178b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.comclass OutputHLSL; 188b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com 198b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.comclass UnfoldShortCircuit : public TIntermTraverser 208b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com{ 218b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com public: 228b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com UnfoldShortCircuit(TParseContext &context, OutputHLSL *outputHLSL); 238b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com 248b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com void traverse(TIntermNode *node); 258b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com bool visitBinary(Visit visit, TIntermBinary*); 268b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com bool visitSelection(Visit visit, TIntermSelection *node); 278b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com bool visitLoop(Visit visit, TIntermLoop *node); 288b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com 298b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com int getNextTemporaryIndex(); 308b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com 318b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com protected: 328b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com TParseContext &mContext; 338b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com OutputHLSL *const mOutputHLSL; 348b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com 358b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com int mTemporaryIndex; 368b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com}; 378b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com} 388b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com 398b47903c8280127324f71ab67ed1ead925316cf5daniel@transgaming.com#endif // COMPILER_UNFOLDSHORTCIRCUIT_H_ 40