xref: /aosp_15_r20/external/angle/src/compiler/translator/IsASTDepthBelowLimit.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 //
2 // Copyright 2017 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 
7 #include "compiler/translator/IsASTDepthBelowLimit.h"
8 
9 #include "compiler/translator/tree_util/IntermTraverse.h"
10 
11 namespace sh
12 {
13 
14 namespace
15 {
16 
17 // Traverse the tree and compute max depth. Takes a maximum depth limit to prevent stack overflow.
18 class MaxDepthTraverser : public TIntermTraverser
19 {
20   public:
MaxDepthTraverser(int depthLimit)21     MaxDepthTraverser(int depthLimit) : TIntermTraverser(true, false, false, nullptr)
22     {
23         setMaxAllowedDepth(depthLimit);
24     }
25 };
26 
27 }  // anonymous namespace
28 
IsASTDepthBelowLimit(TIntermNode * root,int maxDepth)29 bool IsASTDepthBelowLimit(TIntermNode *root, int maxDepth)
30 {
31     MaxDepthTraverser traverser(maxDepth + 1);
32     root->traverse(&traverser);
33 
34     return traverser.getMaxDepth() <= maxDepth;
35 }
36 
37 }  // namespace sh
38