|
||
callgraph.hGo to the documentation of this file.00001 // $Id: callgraph.h,v 1.6 2003/08/07 23:13:40 pnav Exp $ 00002 // ---------------------------------------------------------------------- 00003 // 00004 // C-Breeze 00005 // C Compiler Framework 00006 // 00007 // Copyright (c) 2000 University of Texas at Austin 00008 // 00009 // Samuel Z. Guyer 00010 // Daniel A. Jimenez 00011 // Calvin Lin 00012 // 00013 // Permission is hereby granted, free of charge, to any person 00014 // obtaining a copy of this software and associated documentation 00015 // files (the "Software"), to deal in the Software without 00016 // restriction, including without limitation the rights to use, copy, 00017 // modify, merge, publish, distribute, sublicense, and/or sell copies 00018 // of the Software, and to permit persons to whom the Software is 00019 // furnished to do so, subject to the following conditions: 00020 // 00021 // The above copyright notice and this permission notice shall be 00022 // included in all copies or substantial portions of the Software. 00023 // 00024 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 00025 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 00026 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 00027 // NONINFRINGEMENT. IN NO EVENT SHALL THE UNIVERSITY OF TEXAS AT 00028 // AUSTIN BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 00029 // IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF 00030 // OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 00031 // THE SOFTWARE. 00032 // 00033 // We acknowledge the C-to-C Translator from MIT Laboratory for 00034 // Computer Science for inspiring parts of the C-Breeze design. 00035 // 00036 // ---------------------------------------------------------------------- 00037 00038 #ifndef CBZ_CALLGRAPH_H 00039 #define CBZ_CALLGRAPH_H 00040 00041 #include "linker.h" 00042 #include <set> 00043 00044 class callGraphNode; 00045 00046 typedef list< callGraphNode * > callgraph_edge_list; 00047 typedef callgraph_edge_list::iterator callgraph_edge_list_p; 00048 typedef callgraph_edge_list::const_iterator callgraph_edge_list_cp; 00049 00050 typedef set< callGraphNode * > callgraph_node_set; 00051 typedef callgraph_node_set::iterator callgraph_node_set_p; 00052 00055 class callGraphNode 00056 { 00057 private: 00058 00059 procNode * _proc; 00060 callgraph_edge_list _calls; 00061 callgraph_edge_list _called_by; 00062 int _times_called; 00063 00064 public: 00065 00066 callGraphNode(procNode * proc) 00067 : _proc(proc), 00068 _calls(), 00069 _called_by(), 00070 _times_called(-1) 00071 {} 00072 00073 void add_edge(callGraphNode * to); 00078 procNode * proc() const { return _proc; } 00079 00083 const callgraph_edge_list & calls() const { return _calls; } 00084 00085 00089 const callgraph_edge_list & called_by() const { return _called_by; } 00090 00092 int times_called(); 00093 00094 void ancestors(callgraph_node_set & ancestors_set); 00095 00096 private: 00097 00098 int times_called(callgraph_node_set & visited); 00099 00100 }; 00101 00102 typedef map< procNode *, callGraphNode *> callgraph_map; 00103 typedef callgraph_map::iterator callgraph_map_p; 00104 00108 class callGraph : public Walker 00109 { 00110 private: 00111 00112 callgraph_map _callgraph; 00113 procNode * _root; 00114 Linker & _linker; 00115 callGraphNode * _current; 00116 00117 public: 00118 00122 callGraph(procNode * root, Linker & linker); 00123 00124 ~callGraph(); 00125 00126 virtual void at_id(idNode * the_id, Order ord); 00127 00128 callGraphNode * lookup(procNode * proc); 00129 00130 void show_all_contexts(); 00131 00132 private: 00133 00134 void show_all_contexts(callGraphNode * cur, 00135 callgraph_edge_list & stack, 00136 int & count); 00137 }; 00138 00139 00140 #endif // CBZ_CALLGRAPH_H 00141 |
Generated on August 27, 2003
Back to the C-Breeze home page