// // Copyright 2017 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/translator/IsASTDepthBelowLimit.h" #include "compiler/translator/tree_util/IntermTraverse.h" namespace sh { namespace { // Traverse the tree and compute max depth. Takes a maximum depth limit to prevent stack overflow. class MaxDepthTraverser : public TIntermTraverser { public: MaxDepthTraverser(int depthLimit) : TIntermTraverser(true, false, false, nullptr) { setMaxAllowedDepth(depthLimit); } }; } // anonymous namespace bool IsASTDepthBelowLimit(TIntermNode *root, int maxDepth) { MaxDepthTraverser traverser(maxDepth + 1); root->traverse(&traverser); return traverser.getMaxDepth() <= maxDepth; } } // namespace sh