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