// // Copyright (c) 2002-2010 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/intermediate.h" class TAliveTraverser : public TIntermTraverser { public: TAliveTraverser(TQualifier q) : TIntermTraverser(true, false, false, true), found(false), qualifier(q) { } bool wasFound() { return found; } protected: bool found; TQualifier qualifier; void visitSymbol(TIntermSymbol*); bool visitSelection(Visit, TIntermSelection*); }; // // Report whether or not a variable of the given qualifier type // is guaranteed written. Not always possible to determine if // it is written conditionally. // // ?? It does not do this well yet, this is just a place holder // that simply determines if it was reference at all, anywhere. // bool QualifierWritten(TIntermNode* node, TQualifier qualifier) { TAliveTraverser it(qualifier); if (node) node->traverse(&it); return it.wasFound(); } void TAliveTraverser::visitSymbol(TIntermSymbol* node) { // // If it's what we're looking for, record it. // if (node->getQualifier() == qualifier) found = true; } bool TAliveTraverser::visitSelection(Visit preVisit, TIntermSelection* node) { if (wasFound()) return false; return true; }