| // | |
| // 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 |