// // Copyright 2002 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. // // CallDAG.h: Defines a call graph DAG of functions to be re-used accross // analyses, allows to efficiently traverse the functions in topological // order. #ifndef COMPILER_TRANSLATOR_CALLDAG_H_ #define COMPILER_TRANSLATOR_CALLDAG_H_ #include <map> #include "compiler/translator/IntermNode.h" namespace sh { // The translator needs to analyze the the graph of the function calls // to run checks and analyses; since in GLSL recursion is not allowed // that graph is a DAG. // This class is used to precompute that function call DAG so that it // can be reused by multiple analyses. // // It stores a vector of function records, with one record per defined function. // Records are accessed by index but a function symbol id can be converted // to the index of the corresponding record. The records contain the AST node // of the function definition and the indices of the function's callees. // // In addition, records are in reverse topological order: a function F being // called by a function G will have index index(F) < index(G), that way // depth-first analysis becomes analysis in the order of indices. class CallDAG : angle::NonCopyable { … }; } // namespace sh #endif // COMPILER_TRANSLATOR_CALLDAG_H_