blob: 3d950aab5a1611dadabf7063e77c03c48b123ac5 [file] [log] [blame]
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +00001//
2// Copyright (c) 2002-2010 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
Jamie Madillb1a85f42014-08-19 15:23:24 -04007#include "compiler/translator/IntermNode.h"
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +00008
9class TAliveTraverser : public TIntermTraverser {
10public:
11 TAliveTraverser(TQualifier q) : TIntermTraverser(true, false, false, true), found(false), qualifier(q)
12 {
13 }
14
15 bool wasFound() { return found; }
16
17protected:
18 bool found;
19 TQualifier qualifier;
20
21 void visitSymbol(TIntermSymbol*);
22 bool visitSelection(Visit, TIntermSelection*);
23};
24
25//
26// Report whether or not a variable of the given qualifier type
27// is guaranteed written. Not always possible to determine if
28// it is written conditionally.
29//
30// ?? It does not do this well yet, this is just a place holder
31// that simply determines if it was reference at all, anywhere.
32//
33bool QualifierWritten(TIntermNode* node, TQualifier qualifier)
34{
35 TAliveTraverser it(qualifier);
36
37 if (node)
38 node->traverse(&it);
39
40 return it.wasFound();
41}
42
43void TAliveTraverser::visitSymbol(TIntermSymbol* node)
44{
45 //
46 // If it's what we're looking for, record it.
47 //
48 if (node->getQualifier() == qualifier)
49 found = true;
50}
51
Austin Kinrossc67e6e92015-01-21 16:01:07 -080052bool TAliveTraverser::visitSelection(Visit, TIntermSelection*)
daniel@transgaming.com4f39fd92010-03-08 20:26:45 +000053{
54 if (wasFound())
55 return false;
56
57 return true;
58}