svf-tools 1.0.463 → 1.0.466
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +6 -6
- package/SVF-doxygen/html/html/BDDExpr_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitiveTBHC_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Graph2Json_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LeakChecker_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MSSAMuChi_8h.html +7 -1
- package/SVF-doxygen/html/html/MSSAMuChi_8h_source.html +2 -1
- package/SVF-doxygen/html/html/MTAAnnotator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MemRegion_8cpp_source.html +10 -1
- package/SVF-doxygen/html/html/Options_8cpp_source.html +40 -39
- package/SVF-doxygen/html/html/Options_8h_source.html +41 -40
- package/SVF-doxygen/html/html/PathCondAllocator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFBasicTypes_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +2 -2
- package/SVF-doxygen/html/html/SVFGReadWrite_8cpp.html +86 -0
- package/SVF-doxygen/html/html/SVFGReadWrite_8cpp_source.html +125 -0
- package/SVF-doxygen/html/html/SVFG_8cpp_source.html +48 -43
- package/SVF-doxygen/html/html/SVFG_8h_source.html +41 -38
- package/SVF-doxygen/html/html/SVFUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/TCT_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1BDDExprManager.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveTBHC.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1ICFGPrinter.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LeakChecker.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +7 -7
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +55 -54
- package/SVF-doxygen/html/html/classSVF_1_1Options.html +90 -64
- package/SVF-doxygen/html/html/classSVF_1_1PathCondAllocator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFG-members.html +91 -88
- package/SVF-doxygen/html/html/classSVF_1_1SVFG.html +299 -113
- package/SVF-doxygen/html/html/classSVF_1_1SVFGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT-members.html +100 -97
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +18 -12
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableInfo.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1TCT.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +2 -2
- package/SVF-doxygen/html/html/dir_1870ebf480d659cc38d2dd7ac3aa8993.html +2 -0
- package/SVF-doxygen/html/html/files.html +4 -3
- package/SVF-doxygen/html/html/functions_c.html +5 -9
- package/SVF-doxygen/html/html/functions_func_g.html +7 -4
- package/SVF-doxygen/html/html/functions_func_r.html +7 -4
- package/SVF-doxygen/html/html/functions_func_w.html +1 -0
- package/SVF-doxygen/html/html/functions_g.html +10 -10
- package/SVF-doxygen/html/html/functions_l.html +3 -3
- package/SVF-doxygen/html/html/functions_n.html +3 -3
- package/SVF-doxygen/html/html/functions_o.html +17 -17
- package/SVF-doxygen/html/html/functions_p.html +10 -10
- package/SVF-doxygen/html/html/functions_r.html +9 -3
- package/SVF-doxygen/html/html/functions_s.html +14 -14
- package/SVF-doxygen/html/html/functions_t.html +4 -4
- package/SVF-doxygen/html/html/functions_v.html +3 -3
- package/SVF-doxygen/html/html/functions_vars_g.html +0 -3
- package/SVF-doxygen/html/html/functions_vars_r.html +3 -0
- package/SVF-doxygen/html/html/functions_vars_w.html +3 -0
- package/SVF-doxygen/html/html/functions_w.html +4 -0
- package/SVF-doxygen/html/html/globals_s.html +1 -3
- package/SVF-doxygen/html/html/namespaceSVF.html +40 -1
- package/SVF-doxygen/html/html/namespacemembers_o.html +1 -1
- package/SVF-doxygen/html/html/search/all_10.js +6 -6
- package/SVF-doxygen/html/html/search/all_12.js +5 -3
- package/SVF-doxygen/html/html/search/all_13.js +13 -12
- package/SVF-doxygen/html/html/search/all_14.js +5 -5
- package/SVF-doxygen/html/html/search/all_15.js +1 -1
- package/SVF-doxygen/html/html/search/all_16.js +2 -2
- package/SVF-doxygen/html/html/search/all_17.js +2 -1
- package/SVF-doxygen/html/html/search/all_3.js +1 -1
- package/SVF-doxygen/html/html/search/all_7.js +1 -1
- package/SVF-doxygen/html/html/search/all_c.js +1 -1
- package/SVF-doxygen/html/html/search/all_d.js +2 -2
- package/SVF-doxygen/html/html/search/all_e.js +5 -5
- package/SVF-doxygen/html/html/search/all_f.js +4 -4
- package/SVF-doxygen/html/html/search/files_d.js +1 -0
- package/SVF-doxygen/html/html/search/functions_14.js +1 -1
- package/SVF-doxygen/html/html/search/functions_6.js +1 -0
- package/SVF-doxygen/html/html/search/functions_d.js +1 -1
- package/SVF-doxygen/html/html/search/functions_f.js +1 -0
- package/SVF-doxygen/html/html/search/variables_12.js +1 -0
- package/SVF-doxygen/html/html/search/variables_14.js +3 -3
- package/SVF-doxygen/html/html/search/variables_15.js +1 -1
- package/SVF-doxygen/html/html/search/variables_17.js +2 -1
- package/SVF-doxygen/html/html/search/variables_7.js +0 -1
- package/SVF-doxygen/html/html/search/variables_e.js +3 -3
- package/SVF-doxygen/html/html/structllvm_1_1DOTGraphTraits_3_01SVFG_01_5_01_4.html +20 -20
- package/SVF-doxygen/html/html/structllvm_1_1GraphTraits_3_01SVF_1_1SVFG_01_5_01_4.html +2 -2
- package/include/Graphs/SVFG.h +4 -0
- package/include/MSSA/MSSAMuChi.h +1 -0
- package/include/Util/Options.h +3 -3
- package/lib/Graphs/SVFG.cpp +31 -27
- package/lib/Graphs/SVFGReadWrite.cpp +478 -0
- package/lib/MSSA/MemRegion.cpp +7 -0
- package/lib/Util/Options.cpp +11 -8
- package/lib/WPA/TypeAnalysis.cpp +1 -1
- package/package.json +1 -1
|
@@ -66,7 +66,7 @@ $(function() {
|
|
|
66
66
|
<div class="title">Graph2Json.cpp</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="Graph2Json_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#include "llvm/Support/JSON.h"</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor">#include "<a class="code" href="SVFIR_8h.html">MemoryModel/SVFIR.h</a>"</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="preprocessor">#include "<a class="code" href="Graph2Json_8h.html">SVF-FE/Graph2Json.h</a>"</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> </div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include <fstream></span> <span class="comment">// for ICFGBuilderFromFile</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include <string></span> <span class="comment">// for ICFGBuilderFromFile</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include <sstream></span> <span class="comment">// for ICFGBuilderFromFile</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include <llvm/Support/ToolOutputFile.h></span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div><div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGPrinter.html#ab51ba2c92e69d3688b0a185b4b1d69cb"> 15</a></span> ICFGPrinter::ICFGPrinter() {}</div><div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGPrinter.html#a5ef3cd8fa4c2dd99289725f1aa781721"> 16</a></span> <span class="keywordtype">void</span> ICFGPrinter::printICFGToJson(<span class="keyword">const</span> std::string& filename)</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"write symbols to '"</span> << filename << <span class="stringliteral">"'..."</span>;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  std::error_code err;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  llvm::ToolOutputFile <a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>(filename.c_str(), err, llvm::sys::fs::OF_None);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keywordflow">if</span> (err)</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">" error opening file for writing!\n"</span>;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>.os().clear_error();</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  }</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  llvm::json::Array root_array;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1ICFG.html#a498f84068ef643a94970aeb171607e31">ICFG::iterator</a> it = begin(), eit = end(); it!=eit; ++it)</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* node = it->second;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  llvm::json::Object ICFGNode_Obj;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  ICFGNode_Obj[<span class="stringliteral">"ICFG_ID"</span>] = id;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  ICFGNode_Obj[<span class="stringliteral">"Node Type"</span>] = getICFGKind(node-><a class="code" href="classSVF_1_1GenericNode.html#a391e996d695b114530120723da1d003e">getNodeKind</a>());</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1IntraICFGNode.html">IntraICFGNode</a>* bNode = SVFUtil::dyn_cast<IntraICFGNode>(node))</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  ICFGNode_Obj[<span class="stringliteral">"Source Location"</span>] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(bNode->getInst());</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <a class="code" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVFIR::SVFStmtList</a>& edges = SVFIR::getPAG()->getPTASVFStmtList(bNode);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  llvm::json::Array PAGEdge_array;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="comment">//dump pag edges</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">for</span> (SVFIR::SVFStmtList::iterator it = edges.begin(),</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  eit = edges.end(); it != eit; ++it)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *it;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  llvm::json::Object edge_obj;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  edge_obj[<span class="stringliteral">"Source Node"</span>] = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  edge_obj[<span class="stringliteral">"Destination Node"</span>] = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  edge_obj[<span class="stringliteral">"Source Type"</span>] = getPAGNodeKindValue(edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()->getNodeKind());</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  edge_obj[<span class="stringliteral">"Destination Type"</span>] = getPAGNodeKindValue(edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()->getNodeKind());</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  edge_obj[<span class="stringliteral">"Edge Type"</span>] = getPAGEdgeKindValue(edge-><a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>());</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  edge_obj[<span class="stringliteral">"srcValueName"</span>] = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()->getValueName();</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  edge_obj[<span class="stringliteral">"dstValueName"</span>] = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()->getValueName();</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">if</span>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>()==SVFStmt::Gep)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a>* gepEdge = SVFUtil::cast<GepStmt>(edge);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  edge_obj[<span class="stringliteral">"offset"</span>] = gepEdge-><a class="code" href="classSVF_1_1GepStmt.html#a959a9c95d25f90fd7acc8e6e36056b56">getConstantFieldIdx</a>();</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">llvm::json::Value</a> edge_value = llvm::json::Object{edge_obj};</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  PAGEdge_array.push_back(edge_value);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">llvm::json::Value</a> PagEdge_value = llvm::json::Array{PAGEdge_array};</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  ICFGNode_Obj[<span class="stringliteral">"SVFIR Edges"</span>] = PagEdge_value;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* <a class="code" href="cuddInt_8c.html#a936a27e51e66afb57c2b3a12d78a238e">entry</a> = SVFUtil::dyn_cast<FunEntryICFGNode>(node))</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(<a class="code" href="cuddInt_8c.html#a936a27e51e66afb57c2b3a12d78a238e">entry</a>->getFun()))</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  ICFGNode_Obj[<span class="stringliteral">"isExtCall"</span>] = <span class="keyword">true</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  ICFGNode_Obj[<span class="stringliteral">"isExtCall"</span>] = <span class="keyword">false</span>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  ICFGNode_Obj[<span class="stringliteral">"Source Location"</span>] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(<a class="code" href="cuddInt_8c.html#a936a27e51e66afb57c2b3a12d78a238e">entry</a>->getFun()->getLLVMFun());</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  }</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  ICFGNode_Obj[<span class="stringliteral">"Function Name"</span>] = <a class="code" href="cuddInt_8c.html#a936a27e51e66afb57c2b3a12d78a238e">entry</a>->getFun()->getName();</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* <a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a> = SVFUtil::dyn_cast<FunExitICFGNode>(node))</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(<a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a>->getFun()))</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  ICFGNode_Obj[<span class="stringliteral">"isExtCall"</span>] = <span class="keyword">true</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  ICFGNode_Obj[<span class="stringliteral">"isExtCall"</span>] = <span class="keyword">false</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  ICFGNode_Obj[<span class="stringliteral">"Source Location"</span>] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(&(<a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a>->getFun()->getLLVMFun()->back()));</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  ICFGNode_Obj[<span class="stringliteral">"Function Name"</span>] = <a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a>->getFun()->getName();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* call = SVFUtil::dyn_cast<CallICFGNode>(node))</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  ICFGNode_Obj[<span class="stringliteral">"Source Location"</span>] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(call->getCallSite());</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* ret = SVFUtil::dyn_cast<RetICFGNode>(node))</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  ICFGNode_Obj[<span class="stringliteral">"Source Location"</span>] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(ret->getCallSite());</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"what else kinds of nodes do we have??"</span>);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  llvm::json::Array ICFGEdges_array;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1ICFGNode.html#a5a148eccec266a67e4ff5364d7268fff">ICFGNode::iterator</a> sit = node-><a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), esit = node-><a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); sit!=esit; ++sit)</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = *sit;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  llvm::json::Object ICFGEdge_obj;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">if</span> (SVFUtil::isa<CallCFGEdge>(edge))</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <a class="code" href="classSVF_1_1CallCFGEdge.html">CallCFGEdge</a>* call = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1CallCFGEdge.html">CallCFGEdge</a>>(edge);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  ICFGEdge_obj[<span class="stringliteral">"ICFG Edge Type"</span>] = <span class="stringliteral">"CallCFGEdge"</span>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  ICFGEdge_obj[<span class="stringliteral">"ICFGEdgeSrcID"</span>] = call-><a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  ICFGEdge_obj[<span class="stringliteral">"ICFGEdgeDstID"</span>] = call-><a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<RetCFGEdge>(edge))</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="classSVF_1_1RetCFGEdge.html">RetCFGEdge</a>* call = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1RetCFGEdge.html">RetCFGEdge</a>>(edge);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  ICFGEdge_obj[<span class="stringliteral">"ICFG Edge Type"</span>] = <span class="stringliteral">"RetCFGEdge"</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  ICFGEdge_obj[<span class="stringliteral">"ICFGEdgeSrcID"</span>] = call-><a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  ICFGEdge_obj[<span class="stringliteral">"ICFGEdgeDstID"</span>] = call-><a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<IntraCFGEdge>(edge))</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="classSVF_1_1IntraCFGEdge.html">IntraCFGEdge</a>* intraCFGEdge = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1IntraCFGEdge.html">IntraCFGEdge</a>>(edge);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  ICFGEdge_obj[<span class="stringliteral">"ICFG Edge Type"</span>] = <span class="stringliteral">"IntraCFGEdge"</span>;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  ICFGEdge_obj[<span class="stringliteral">"ICFGEdgeSrcID"</span>] = intraCFGEdge-><a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  ICFGEdge_obj[<span class="stringliteral">"ICFGEdgeDstID"</span>] = intraCFGEdge-><a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">llvm::json::Value</a> ICFGEdge_Val = llvm::json::Object{ICFGEdge_obj};</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  ICFGEdges_array.push_back(ICFGEdge_Val);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">llvm::json::Value</a> ICFGEdges_val = llvm::json::Array{ICFGEdges_array};</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  ICFGNode_Obj[<span class="stringliteral">"ICFGEdges"</span>] = ICFGEdges_val;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">llvm::json::Value</a> ICFGNode_val = llvm::json::Object{ICFGNode_Obj};</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  root_array.push_back(ICFGNode_val);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">llvm::json::Value</a> root_value = llvm::json::Array{root_array};</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <a class="code" href="namespaceSVF.html#af83f5c5c68cdb80576cdc1d62c01b207">llvm::json::operator<<</a>(<a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>.os(),root_value);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>.os().close();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">if</span> (!<a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>.os().has_error())</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>.keep();</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGPrinter.html#a2c022308f9c7ae3bf33d9482fcb51e03"> 145</a></span> std::string ICFGPrinter::getICFGKind(<span class="keyword">const</span> <span class="keywordtype">int</span> kind)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">switch</span>(kind)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">case</span> ICFGNode::IntraBlock:</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">return</span> <span class="stringliteral">"IntraBlock"</span>;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">case</span> ICFGNode::FunEntryBlock:</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">return</span> <span class="stringliteral">"FunEntryBlock"</span>;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">case</span> ICFGNode::FunExitBlock:</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">return</span> <span class="stringliteral">"FunExitBlock"</span>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">case</span> ICFGNode::FunCallBlock:</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">return</span> <span class="stringliteral">"FunCallBlock"</span>;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">case</span> ICFGNode::FunRetBlock:</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">return</span> <span class="stringliteral">"FunRetBlock"</span>;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div><div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGPrinter.html#a54f0729c869b5061b5fb9fe056c326ef"> 170</a></span> std::string ICFGPrinter::getPAGNodeKindValue(<span class="keywordtype">int</span> kind)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">switch</span> (kind)</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  {</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">case</span> (SVFVar::ValNode):</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ValNode"</span>;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keywordflow">case</span> SVFVar::ObjNode:</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ObjNode"</span>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">case</span> SVFVar::RetNode:</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">return</span> <span class="stringliteral">"RetNode"</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">case</span> SVFVar::VarargNode:</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">return</span> <span class="stringliteral">"VarargNode"</span>;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">case</span> SVFVar::GepValNode:</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">return</span> <span class="stringliteral">"GepValNode"</span>;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">case</span> SVFVar::GepObjNode:</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordflow">return</span> <span class="stringliteral">"GepObjNode"</span>;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">case</span> SVFVar::FIObjNode:</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">return</span> <span class="stringliteral">"FIObjNode"</span>;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">case</span> SVFVar::DummyValNode:</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">return</span> <span class="stringliteral">"DummyValNode"</span>;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">case</span> SVFVar::DummyObjNode:</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">return</span> <span class="stringliteral">"DummyObjNode"</span>;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGPrinter.html#a38aa67e172459a72d8fc92a6172903be"> 205</a></span> std::string ICFGPrinter::getPAGEdgeKindValue(<span class="keywordtype">int</span> kind)</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">switch</span>(kind)</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  {</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">case</span> (<a class="code" href="CFLGrammar_8txt.html#a017fa6c558fa1eff0a13180c8340aba8">SVFStmt::Addr</a>):</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Addr"</span>;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">case</span> (SVFStmt::Copy):</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Copy"</span>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">case</span> (SVFStmt::Store):</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Store"</span>;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">case</span> (SVFStmt::Load):</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Load"</span>;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordflow">case</span> (SVFStmt::Call):</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Call"</span>;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">case</span> (SVFStmt::Ret):</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Ret"</span>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">case</span> (SVFStmt::Gep):</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">return</span> <span class="stringliteral">"NormalGep"</span>;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">case</span> (SVFStmt::ThreadFork):</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ThreadFork"</span>;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">case</span> (SVFStmt::ThreadJoin):</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ThreadJoin"</span>;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">case</span> (SVFStmt::Cmp):</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Cmp"</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">case</span> (SVFStmt::BinaryOp):</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordflow">return</span> <span class="stringliteral">"BinaryOp"</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">case</span> (SVFStmt::UnaryOp):</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">return</span> <span class="stringliteral">"UnaryOp"</span>;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> }</div><div class="ttc" id="classSVF_1_1ICFGEdge_html"><div class="ttname"><a href="classSVF_1_1ICFGEdge.html">SVF::ICFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00044">ICFGEdge.h:44</a></div></div>
|
|
69
|
+
<a href="Graph2Json_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#include "llvm/Support/JSON.h"</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor">#include "<a class="code" href="SVFIR_8h.html">MemoryModel/SVFIR.h</a>"</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="preprocessor">#include "<a class="code" href="Graph2Json_8h.html">SVF-FE/Graph2Json.h</a>"</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> </div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include <fstream></span> <span class="comment">// for ICFGBuilderFromFile</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include <string></span> <span class="comment">// for ICFGBuilderFromFile</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> <span class="preprocessor">#include <sstream></span> <span class="comment">// for ICFGBuilderFromFile</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> </div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include <llvm/Support/ToolOutputFile.h></span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="keyword">using namespace </span><a class="code" href="namespacestd.html">std</a>;</div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="keyword">using namespace </span><a class="code" href="namespaceSVF.html">SVF</a>;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="keyword">using namespace </span>SVFUtil;</div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> </div><div class="line"><a name="l00015"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGPrinter.html#ab51ba2c92e69d3688b0a185b4b1d69cb"> 15</a></span> ICFGPrinter::ICFGPrinter() {}</div><div class="line"><a name="l00016"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGPrinter.html#a5ef3cd8fa4c2dd99289725f1aa781721"> 16</a></span> <span class="keywordtype">void</span> ICFGPrinter::printICFGToJson(<span class="keyword">const</span> std::string& filename)</div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> {</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"write symbols to '"</span> << filename << <span class="stringliteral">"'..."</span>;</div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>  std::error_code err;</div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>  llvm::ToolOutputFile <a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>(filename.c_str(), err, llvm::sys::fs::OF_None);</div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>  <span class="keywordflow">if</span> (err)</div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>  {</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">" error opening file for writing!\n"</span>;</div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>  <a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>.os().clear_error();</div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>  }</div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> </div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>  llvm::json::Array root_array;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1ICFG.html#a498f84068ef643a94970aeb171607e31">ICFG::iterator</a> it = begin(), eit = end(); it!=eit; ++it)</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>  {</div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>  <a class="code" href="classSVF_1_1ICFGNode.html">ICFGNode</a>* node = it->second;</div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>  <a class="code" href="namespaceSVF.html#a43a65e0d33af3c743294f7a1139d2301">NodeID</a> <span class="keywordtype">id</span> = node-><a class="code" href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">getId</a>();</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>  llvm::json::Object ICFGNode_Obj;</div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>  ICFGNode_Obj[<span class="stringliteral">"ICFG_ID"</span>] = id;</div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>  ICFGNode_Obj[<span class="stringliteral">"Node Type"</span>] = getICFGKind(node-><a class="code" href="classSVF_1_1GenericNode.html#a391e996d695b114530120723da1d003e">getNodeKind</a>());</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>  <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1IntraICFGNode.html">IntraICFGNode</a>* bNode = SVFUtil::dyn_cast<IntraICFGNode>(node))</div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>  {</div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>  ICFGNode_Obj[<span class="stringliteral">"Source Location"</span>] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(bNode->getInst());</div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span>  <a class="code" href="classSVF_1_1SVFIR.html#a6bc360d2604ae4a0af74530b263b10d9">SVFIR::SVFStmtList</a>& edges = SVFIR::getPAG()->getPTASVFStmtList(bNode);</div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>  llvm::json::Array PAGEdge_array;</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>  <span class="comment">//dump pag edges</span></div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>  <span class="keywordflow">for</span> (SVFIR::SVFStmtList::iterator it = edges.begin(),</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>  eit = edges.end(); it != eit; ++it)</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>  {</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFStmt.html">PAGEdge</a>* edge = *it;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>  llvm::json::Object edge_obj;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>  edge_obj[<span class="stringliteral">"Source Node"</span>] = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>  edge_obj[<span class="stringliteral">"Destination Node"</span>] = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>  edge_obj[<span class="stringliteral">"Source Type"</span>] = getPAGNodeKindValue(edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()->getNodeKind());</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>  edge_obj[<span class="stringliteral">"Destination Type"</span>] = getPAGNodeKindValue(edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()->getNodeKind());</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>  edge_obj[<span class="stringliteral">"Edge Type"</span>] = getPAGEdgeKindValue(edge-><a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>());</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>  edge_obj[<span class="stringliteral">"srcValueName"</span>] = edge-><a class="code" href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">getSrcNode</a>()->getValueName();</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>  edge_obj[<span class="stringliteral">"dstValueName"</span>] = edge-><a class="code" href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">getDstNode</a>()->getValueName();</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>  <span class="keywordflow">if</span>(edge-><a class="code" href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">getEdgeKind</a>()==SVFStmt::Gep)</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>  {</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>  <span class="keyword">const</span> <a class="code" href="classSVF_1_1GepStmt.html">GepStmt</a>* gepEdge = SVFUtil::cast<GepStmt>(edge);</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>  edge_obj[<span class="stringliteral">"offset"</span>] = gepEdge-><a class="code" href="classSVF_1_1GepStmt.html#a959a9c95d25f90fd7acc8e6e36056b56">getConstantFieldIdx</a>();</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  }</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">llvm::json::Value</a> edge_value = llvm::json::Object{edge_obj};</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  PAGEdge_array.push_back(edge_value);</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  }</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">llvm::json::Value</a> PagEdge_value = llvm::json::Array{PAGEdge_array};</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  ICFGNode_Obj[<span class="stringliteral">"SVFIR Edges"</span>] = PagEdge_value;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  }</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(<a class="code" href="classSVF_1_1FunEntryICFGNode.html">FunEntryICFGNode</a>* <a class="code" href="cuddInt_8c.html#a936a27e51e66afb57c2b3a12d78a238e">entry</a> = SVFUtil::dyn_cast<FunEntryICFGNode>(node))</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  {</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(<a class="code" href="cuddInt_8c.html#a936a27e51e66afb57c2b3a12d78a238e">entry</a>->getFun()))</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  ICFGNode_Obj[<span class="stringliteral">"isExtCall"</span>] = <span class="keyword">true</span>;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  {</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  ICFGNode_Obj[<span class="stringliteral">"isExtCall"</span>] = <span class="keyword">false</span>;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  ICFGNode_Obj[<span class="stringliteral">"Source Location"</span>] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(<a class="code" href="cuddInt_8c.html#a936a27e51e66afb57c2b3a12d78a238e">entry</a>->getFun()->getLLVMFun());</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  }</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  ICFGNode_Obj[<span class="stringliteral">"Function Name"</span>] = <a class="code" href="cuddInt_8c.html#a936a27e51e66afb57c2b3a12d78a238e">entry</a>->getFun()->getName();</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1FunExitICFGNode.html">FunExitICFGNode</a>* <a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a> = SVFUtil::dyn_cast<FunExitICFGNode>(node))</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  {</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  <span class="keywordflow">if</span> (<a class="code" href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">isExtCall</a>(<a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a>->getFun()))</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  ICFGNode_Obj[<span class="stringliteral">"isExtCall"</span>] = <span class="keyword">true</span>;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  {</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  ICFGNode_Obj[<span class="stringliteral">"isExtCall"</span>] = <span class="keyword">false</span>;</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  ICFGNode_Obj[<span class="stringliteral">"Source Location"</span>] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(&(<a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a>->getFun()->getLLVMFun()->back()));</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  ICFGNode_Obj[<span class="stringliteral">"Function Name"</span>] = <a class="code" href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a>->getFun()->getName();</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  }</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1CallICFGNode.html">CallICFGNode</a>* call = SVFUtil::dyn_cast<CallICFGNode>(node))</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  {</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  ICFGNode_Obj[<span class="stringliteral">"Source Location"</span>] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(call->getCallSite());</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  }</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1RetICFGNode.html">RetICFGNode</a>* ret = SVFUtil::dyn_cast<RetICFGNode>(node))</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>  {</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>  ICFGNode_Obj[<span class="stringliteral">"Source Location"</span>] = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">getSourceLoc</a>(ret->getCallSite());</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>  }</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>  <span class="keywordflow">else</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>  <a class="code" href="util_8h.html#a07d17d6d5d1074c0969bc5d3c3d1d84a">assert</a>(<span class="keyword">false</span> && <span class="stringliteral">"what else kinds of nodes do we have??"</span>);</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>  llvm::json::Array ICFGEdges_array;</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>  <span class="keywordflow">for</span>(<a class="code" href="classSVF_1_1ICFGNode.html#a5a148eccec266a67e4ff5364d7268fff">ICFGNode::iterator</a> sit = node-><a class="code" href="classSVF_1_1GenericNode.html#aa4f103330118c8976bf95e4bf53416eb">OutEdgeBegin</a>(), esit = node-><a class="code" href="classSVF_1_1GenericNode.html#a19a3366fd8a58290d0c740c46c3dcb3d">OutEdgeEnd</a>(); sit!=esit; ++sit)</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>  {</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>  <a class="code" href="classSVF_1_1ICFGEdge.html">ICFGEdge</a>* edge = *sit;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>  llvm::json::Object ICFGEdge_obj;</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>  <span class="keywordflow">if</span> (SVFUtil::isa<CallCFGEdge>(edge))</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>  {</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>  <a class="code" href="classSVF_1_1CallCFGEdge.html">CallCFGEdge</a>* call = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1CallCFGEdge.html">CallCFGEdge</a>>(edge);</div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  ICFGEdge_obj[<span class="stringliteral">"ICFG Edge Type"</span>] = <span class="stringliteral">"CallCFGEdge"</span>;</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>  ICFGEdge_obj[<span class="stringliteral">"ICFGEdgeSrcID"</span>] = call-><a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  ICFGEdge_obj[<span class="stringliteral">"ICFGEdgeDstID"</span>] = call-><a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  }</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span> (SVFUtil::isa<RetCFGEdge>(edge))</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>  {</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>  <a class="code" href="classSVF_1_1RetCFGEdge.html">RetCFGEdge</a>* call = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1RetCFGEdge.html">RetCFGEdge</a>>(edge);</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>  ICFGEdge_obj[<span class="stringliteral">"ICFG Edge Type"</span>] = <span class="stringliteral">"RetCFGEdge"</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>  ICFGEdge_obj[<span class="stringliteral">"ICFGEdgeSrcID"</span>] = call-><a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>  ICFGEdge_obj[<span class="stringliteral">"ICFGEdgeDstID"</span>] = call-><a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  }</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>  <span class="keywordflow">else</span> <span class="keywordflow">if</span>(SVFUtil::isa<IntraCFGEdge>(edge))</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>  <a class="code" href="classSVF_1_1IntraCFGEdge.html">IntraCFGEdge</a>* intraCFGEdge = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a><<a class="code" href="classSVF_1_1IntraCFGEdge.html">IntraCFGEdge</a>>(edge);</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>  ICFGEdge_obj[<span class="stringliteral">"ICFG Edge Type"</span>] = <span class="stringliteral">"IntraCFGEdge"</span>;</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>  ICFGEdge_obj[<span class="stringliteral">"ICFGEdgeSrcID"</span>] = intraCFGEdge-><a class="code" href="classSVF_1_1GenericEdge.html#ae6792506a0150a9400d635eceab7f9e7">getSrcID</a>();</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  ICFGEdge_obj[<span class="stringliteral">"ICFGEdgeDstID"</span>] = intraCFGEdge-><a class="code" href="classSVF_1_1GenericEdge.html#ad9edb45e74ae675d9da82f5acf02d56e">getDstID</a>();</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  }</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">llvm::json::Value</a> ICFGEdge_Val = llvm::json::Object{ICFGEdge_obj};</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>  ICFGEdges_array.push_back(ICFGEdge_Val);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>  }</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">llvm::json::Value</a> ICFGEdges_val = llvm::json::Array{ICFGEdges_array};</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>  ICFGNode_Obj[<span class="stringliteral">"ICFGEdges"</span>] = ICFGEdges_val;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">llvm::json::Value</a> ICFGNode_val = llvm::json::Object{ICFGNode_Obj};</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>  root_array.push_back(ICFGNode_val);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>  }</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>  <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">llvm::json::Value</a> root_value = llvm::json::Array{root_array};</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>  <a class="code" href="namespaceSVF.html#aec4534b227e8f43b9077e708b74817fa">llvm::json::operator<<</a>(<a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>.os(),root_value);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span> </div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>.os().close();</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  <span class="keywordflow">if</span> (!<a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>.os().has_error())</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>  {</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">outs</a>() << <span class="stringliteral">"\n"</span>;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>  <a class="code" href="CFLGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>.keep();</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>  <span class="keywordflow">return</span>;</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>  }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> }</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span> </div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGPrinter.html#a2c022308f9c7ae3bf33d9482fcb51e03"> 145</a></span> std::string ICFGPrinter::getICFGKind(<span class="keyword">const</span> <span class="keywordtype">int</span> kind)</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span> {</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  <span class="keywordflow">switch</span>(kind)</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span>  {</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span>  <span class="keywordflow">case</span> ICFGNode::IntraBlock:</div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>  <span class="keywordflow">return</span> <span class="stringliteral">"IntraBlock"</span>;</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>  <span class="keywordflow">case</span> ICFGNode::FunEntryBlock:</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  <span class="keywordflow">return</span> <span class="stringliteral">"FunEntryBlock"</span>;</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  <span class="keywordflow">case</span> ICFGNode::FunExitBlock:</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>  <span class="keywordflow">return</span> <span class="stringliteral">"FunExitBlock"</span>;</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>  <span class="keywordflow">case</span> ICFGNode::FunCallBlock:</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>  <span class="keywordflow">return</span> <span class="stringliteral">"FunCallBlock"</span>;</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  <span class="keywordflow">case</span> ICFGNode::FunRetBlock:</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">return</span> <span class="stringliteral">"FunRetBlock"</span>;</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <span class="keywordflow">default</span>:</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  }</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> }</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span> </div><div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGPrinter.html#a54f0729c869b5061b5fb9fe056c326ef"> 170</a></span> std::string ICFGPrinter::getPAGNodeKindValue(<span class="keywordtype">int</span> kind)</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span> {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">switch</span> (kind)</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  {</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  <span class="keywordflow">case</span> (SVFVar::ValNode):</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ValNode"</span>;</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>  <span class="keywordflow">case</span> SVFVar::ObjNode:</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ObjNode"</span>;</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  <span class="keywordflow">case</span> SVFVar::RetNode:</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">return</span> <span class="stringliteral">"RetNode"</span>;</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>  <span class="keywordflow">case</span> SVFVar::VarargNode:</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <span class="keywordflow">return</span> <span class="stringliteral">"VarargNode"</span>;</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  <span class="keywordflow">case</span> SVFVar::GepValNode:</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  <span class="keywordflow">return</span> <span class="stringliteral">"GepValNode"</span>;</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordflow">case</span> SVFVar::GepObjNode:</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordflow">return</span> <span class="stringliteral">"GepObjNode"</span>;</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <span class="keywordflow">case</span> SVFVar::FIObjNode:</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  <span class="keywordflow">return</span> <span class="stringliteral">"FIObjNode"</span>;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <span class="keywordflow">case</span> SVFVar::DummyValNode:</div><div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  <span class="keywordflow">return</span> <span class="stringliteral">"DummyValNode"</span>;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  <span class="keywordflow">case</span> SVFVar::DummyObjNode:</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">return</span> <span class="stringliteral">"DummyObjNode"</span>;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  }</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span> }</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> </div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classSVF_1_1ICFGPrinter.html#a38aa67e172459a72d8fc92a6172903be"> 205</a></span> std::string ICFGPrinter::getPAGEdgeKindValue(<span class="keywordtype">int</span> kind)</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span> {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  <span class="keywordflow">switch</span>(kind)</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  {</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  <span class="keywordflow">case</span> (<a class="code" href="CFLGrammar_8txt.html#a017fa6c558fa1eff0a13180c8340aba8">SVFStmt::Addr</a>):</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Addr"</span>;</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  <span class="keywordflow">case</span> (SVFStmt::Copy):</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Copy"</span>;</div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="keywordflow">case</span> (SVFStmt::Store):</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Store"</span>;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  <span class="keywordflow">case</span> (SVFStmt::Load):</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Load"</span>;</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <span class="keywordflow">case</span> (SVFStmt::Call):</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Call"</span>;</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  <span class="keywordflow">case</span> (SVFStmt::Ret):</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Ret"</span>;</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>  <span class="keywordflow">case</span> (SVFStmt::Gep):</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="keywordflow">return</span> <span class="stringliteral">"NormalGep"</span>;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  <span class="keywordflow">case</span> (SVFStmt::ThreadFork):</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ThreadFork"</span>;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>  <span class="keywordflow">case</span> (SVFStmt::ThreadJoin):</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>  <span class="keywordflow">return</span> <span class="stringliteral">"ThreadJoin"</span>;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>  <span class="keywordflow">case</span> (SVFStmt::Cmp):</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>  <span class="keywordflow">return</span> <span class="stringliteral">"Cmp"</span>;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>  <span class="keywordflow">case</span> (SVFStmt::BinaryOp):</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>  <span class="keywordflow">return</span> <span class="stringliteral">"BinaryOp"</span>;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">case</span> (SVFStmt::UnaryOp):</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">return</span> <span class="stringliteral">"UnaryOp"</span>;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keywordflow">break</span>;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>  }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>  <span class="keywordflow">return</span> <span class="stringliteral">""</span>;</div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> }</div><div class="ttc" id="classSVF_1_1ICFGEdge_html"><div class="ttname"><a href="classSVF_1_1ICFGEdge.html">SVF::ICFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00044">ICFGEdge.h:44</a></div></div>
|
|
70
70
|
<div class="ttc" id="classSVF_1_1GenericEdge_html_abe8525c542def8162b094c169a01993b"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#abe8525c542def8162b094c169a01993b">SVF::GenericEdge::getEdgeKind</a></div><div class="ttdeci">GEdgeKind getEdgeKind() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00081">GenericGraph.h:81</a></div></div>
|
|
71
71
|
<div class="ttc" id="util_8h_html_a43b6ea6be735bb828bc062c70cadeff8"><div class="ttname"><a href="util_8h.html#a43b6ea6be735bb828bc062c70cadeff8">exit</a></div><div class="ttdeci">VOID_OR_INT exit()</div></div>
|
|
72
72
|
<div class="ttc" id="Graph2Json_8h_html"><div class="ttname"><a href="Graph2Json_8h.html">Graph2Json.h</a></div></div>
|
|
@@ -87,6 +87,7 @@ $(function() {
|
|
|
87
87
|
<div class="ttc" id="classSVF_1_1FunEntryICFGNode_html"><div class="ttname"><a href="classSVF_1_1FunEntryICFGNode.html">SVF::FunEntryICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00251">ICFGNode.h:251</a></div></div>
|
|
88
88
|
<div class="ttc" id="classSVF_1_1IntraCFGEdge_html"><div class="ttname"><a href="classSVF_1_1IntraCFGEdge.html">SVF::IntraCFGEdge</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGEdge_8h_source.html#l00113">ICFGEdge.h:113</a></div></div>
|
|
89
89
|
<div class="ttc" id="classSVF_1_1GenericEdge_html_aeaa31a2c8479e831b36ce2e2582ceb86"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#aeaa31a2c8479e831b36ce2e2582ceb86">SVF::GenericEdge::getDstNode</a></div><div class="ttdeci">NodeType * getDstNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00093">GenericGraph.h:93</a></div></div>
|
|
90
|
+
<div class="ttc" id="namespaceSVF_html_aec4534b227e8f43b9077e708b74817fa"><div class="ttname"><a href="namespaceSVF.html#aec4534b227e8f43b9077e708b74817fa">SVF::operator<<</a></div><div class="ttdeci">std::ostream & operator<<(std::ostream &o, const MRVer &mrver)</div><div class="ttdef"><b>Definition:</b> <a href="MemRegion_8cpp_source.html#l00811">MemRegion.cpp:811</a></div></div>
|
|
90
91
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
91
92
|
<div class="ttc" id="classSVF_1_1GenericEdge_html_ab47ca533c415841ef75456cbad439589"><div class="ttname"><a href="classSVF_1_1GenericEdge.html#ab47ca533c415841ef75456cbad439589">SVF::GenericEdge::getSrcNode</a></div><div class="ttdeci">NodeType * getSrcNode() const</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00089">GenericGraph.h:89</a></div></div>
|
|
92
93
|
<div class="ttc" id="classSVF_1_1ICFG_html_a498f84068ef643a94970aeb171607e31"><div class="ttname"><a href="classSVF_1_1ICFG.html#a498f84068ef643a94970aeb171607e31">SVF::ICFG::iterator</a></div><div class="ttdeci">ICFGNodeIDToNodeMapTy::iterator iterator</div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00055">ICFG.h:55</a></div></div>
|
|
@@ -95,7 +96,6 @@ $(function() {
|
|
|
95
96
|
<div class="ttc" id="classSVF_1_1CallICFGNode_html"><div class="ttname"><a href="classSVF_1_1CallICFGNode.html">SVF::CallICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00363">ICFGNode.h:363</a></div></div>
|
|
96
97
|
<div class="ttc" id="classSVF_1_1ICFGNode_html_a5a148eccec266a67e4ff5364d7268fff"><div class="ttname"><a href="classSVF_1_1ICFGNode.html#a5a148eccec266a67e4ff5364d7268fff">SVF::ICFGNode::iterator</a></div><div class="ttdeci">ICFGEdge::ICFGEdgeSetTy::iterator iterator</div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00065">ICFGNode.h:65</a></div></div>
|
|
97
98
|
<div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8h_source.html#l00035">CFGNormalizer.h:35</a></div></div>
|
|
98
|
-
<div class="ttc" id="namespaceSVF_html_af83f5c5c68cdb80576cdc1d62c01b207"><div class="ttname"><a href="namespaceSVF.html#af83f5c5c68cdb80576cdc1d62c01b207">SVF::operator<<</a></div><div class="ttdeci">OutStream & operator<<(OutStream &o, const std::pair< F, S > &var)</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00281">BasicTypes.h:281</a></div></div>
|
|
99
99
|
<div class="ttc" id="classSVF_1_1GenericNode_html_ac3e55ef37aefb411ea4c87b1aa3b1895"><div class="ttname"><a href="classSVF_1_1GenericNode.html#ac3e55ef37aefb411ea4c87b1aa3b1895">SVF::GenericNode::getId</a></div><div class="ttdeci">NodeID getId() const</div><div class="ttdoc">Get ID. </div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00169">GenericGraph.h:169</a></div></div>
|
|
100
100
|
<div class="ttc" id="classSVF_1_1FunExitICFGNode_html"><div class="ttname"><a href="classSVF_1_1FunExitICFGNode.html">SVF::FunExitICFGNode</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFGNode_8h_source.html#l00308">ICFGNode.h:308</a></div></div>
|
|
101
101
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a8182be247907420db00837cef9bcfa70"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type >::type dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
|
|
@@ -102,7 +102,7 @@ $(function() {
|
|
|
102
102
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
103
103
|
<div class="ttc" id="classSVF_1_1LeakChecker_html_a0aa051a956b61cad9ec5419f33829e6a"><div class="ttname"><a href="classSVF_1_1LeakChecker.html#a0aa051a956b61cad9ec5419f33829e6a">SVF::LeakChecker::validateSuccessTests</a></div><div class="ttdeci">void validateSuccessTests(const SVFGNode *source, const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="LeakChecker_8cpp_source.html#l00200">LeakChecker.cpp:200</a></div></div>
|
|
104
104
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a7486fd8e5350879ed1cbd835c0d4e191"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a7486fd8e5350879ed1cbd835c0d4e191">SVF::SVFUtil::value2String</a></div><div class="ttdeci">const std::string value2String(const Value *value)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00392">SVFUtil.cpp:392</a></div></div>
|
|
105
|
-
<div class="ttc" id="classSVF_1_1Options_html_aec491143ded97649da1ed61b8fda796c"><div class="ttname"><a href="classSVF_1_1Options.html#aec491143ded97649da1ed61b8fda796c">SVF::Options::ValidateTests</a></div><div class="ttdeci">static const llvm::cl::opt< bool > ValidateTests</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#
|
|
105
|
+
<div class="ttc" id="classSVF_1_1Options_html_aec491143ded97649da1ed61b8fda796c"><div class="ttname"><a href="classSVF_1_1Options.html#aec491143ded97649da1ed61b8fda796c">SVF::Options::ValidateTests</a></div><div class="ttdeci">static const llvm::cl::opt< bool > ValidateTests</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00198">Options.h:198</a></div></div>
|
|
106
106
|
<div class="ttc" id="classSVF_1_1ICFG_html"><div class="ttname"><a href="classSVF_1_1ICFG.html">SVF::ICFG</a></div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00046">ICFG.h:46</a></div></div>
|
|
107
107
|
<div class="ttc" id="Options_8h_html"><div class="ttname"><a href="Options_8h.html">Options.h</a></div></div>
|
|
108
108
|
<div class="ttc" id="classSVF_1_1SVFValue_html_a2409c01221b9a6632655cee43d1b35e4"><div class="ttname"><a href="classSVF_1_1SVFValue.html#a2409c01221b9a6632655cee43d1b35e4">SVF::SVFValue::getName</a></div><div class="ttdeci">const std::string getName() const</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00252">SVFBasicTypes.h:252</a></div></div>
|
|
@@ -80,7 +80,7 @@ $(function() {
|
|
|
80
80
|
<div class="ttc" id="namespaceSVF_html_adc8b60ca7d60cf6c81feae20e4a04c63"><div class="ttname"><a href="namespaceSVF.html#adc8b60ca7d60cf6c81feae20e4a04c63">SVF::CallInst</a></div><div class="ttdeci">llvm::CallInst CallInst</div><div class="ttdoc">LLVM Instructions. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00101">BasicTypes.h:101</a></div></div>
|
|
81
81
|
<div class="ttc" id="classSVF_1_1LockAnalysis_html_a842ddef4d1cb9c45555d949375627a48"><div class="ttname"><a href="classSVF_1_1LockAnalysis.html#a842ddef4d1cb9c45555d949375627a48">SVF::LockAnalysis::isProtectedByCommonCILock</a></div><div class="ttdeci">bool isProtectedByCommonCILock(const Instruction *i1, const Instruction *i2)</div><div class="ttdef"><b>Definition:</b> <a href="LockAnalysis_8cpp_source.html#l00583">LockAnalysis.cpp:583</a></div></div>
|
|
82
82
|
<div class="ttc" id="SVFUtil_8h_html"><div class="ttname"><a href="SVFUtil_8h.html">SVFUtil.h</a></div></div>
|
|
83
|
-
<div class="ttc" id="classSVF_1_1Options_html_a78b3b44f2c0dc94dc1363ca57ee76d66"><div class="ttname"><a href="classSVF_1_1Options.html#a78b3b44f2c0dc94dc1363ca57ee76d66">SVF::Options::LockValid</a></div><div class="ttdeci">static const llvm::cl::opt< bool > LockValid</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#
|
|
83
|
+
<div class="ttc" id="classSVF_1_1Options_html_a78b3b44f2c0dc94dc1363ca57ee76d66"><div class="ttname"><a href="classSVF_1_1Options.html#a78b3b44f2c0dc94dc1363ca57ee76d66">SVF::Options::LockValid</a></div><div class="ttdeci">static const llvm::cl::opt< bool > LockValid</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00187">Options.h:187</a></div></div>
|
|
84
84
|
<div class="ttc" id="classSVF_1_1CallSite_html_ab36a6a35eea673d4bdca615efc4336b1"><div class="ttname"><a href="classSVF_1_1CallSite.html#ab36a6a35eea673d4bdca615efc4336b1">SVF::CallSite::getInstruction</a></div><div class="ttdeci">CallBase * getInstruction() const</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00207">BasicTypes.h:207</a></div></div>
|
|
85
85
|
<div class="ttc" id="classSVF_1_1LockAnalysis_html_ad1516b6cb1dbd06b8dff04ae3c944621"><div class="ttname"><a href="classSVF_1_1LockAnalysis.html#ad1516b6cb1dbd06b8dff04ae3c944621">SVF::LockAnalysis::analyze</a></div><div class="ttdeci">void analyze()</div><div class="ttdef"><b>Definition:</b> <a href="LockAnalysis_8cpp_source.html#l00041">LockAnalysis.cpp:41</a></div></div>
|
|
86
86
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a28c0ede7e4765d2a686fc8ae0f5641a4"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a28c0ede7e4765d2a686fc8ae0f5641a4">SVF::SVFUtil::getSourceLoc</a></div><div class="ttdeci">std::string getSourceLoc(const Value *val)</div><div class="ttdoc">Return source code including line number and file name from debug information. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8cpp_source.html#l00269">SVFUtil.cpp:269</a></div></div>
|
|
@@ -85,7 +85,7 @@ $(function() {
|
|
|
85
85
|
<div class="ttc" id="SVF-FE_2BasicTypes_8h_html"><div class="ttname"><a href="SVF-FE_2BasicTypes_8h.html">BasicTypes.h</a></div></div>
|
|
86
86
|
<div class="ttc" id="LockResultValidator_8h_html"><div class="ttname"><a href="LockResultValidator_8h.html">LockResultValidator.h</a></div></div>
|
|
87
87
|
<div class="ttc" id="namespaceSVF_html_a7875172ff434b2210eea7cecfbbd959e"><div class="ttname"><a href="namespaceSVF.html#a7875172ff434b2210eea7cecfbbd959e">SVF::Instruction</a></div><div class="ttdeci">llvm::Instruction Instruction</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00069">BasicTypes.h:69</a></div></div>
|
|
88
|
-
<div class="ttc" id="classSVF_1_1Options_html_ac609142ee5a0caaf3ac51238ec421c2e"><div class="ttname"><a href="classSVF_1_1Options.html#ac609142ee5a0caaf3ac51238ec421c2e">SVF::Options::PrintValidRes</a></div><div class="ttdeci">static const llvm::cl::opt< bool > PrintValidRes</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#
|
|
88
|
+
<div class="ttc" id="classSVF_1_1Options_html_ac609142ee5a0caaf3ac51238ec421c2e"><div class="ttname"><a href="classSVF_1_1Options.html#ac609142ee5a0caaf3ac51238ec421c2e">SVF::Options::PrintValidRes</a></div><div class="ttdeci">static const llvm::cl::opt< bool > PrintValidRes</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00185">Options.h:185</a></div></div>
|
|
89
89
|
<div class="ttc" id="classSVF_1_1LockResultValidator_html_a760c0f6f891daa4532a44c6594794bb8"><div class="ttname"><a href="classSVF_1_1LockResultValidator.html#a760c0f6f891daa4532a44c6594794bb8">SVF::LockResultValidator::LOCK_IMPRECISE</a></div><div class="ttdeci">static const LOCK_FLAG LOCK_IMPRECISE</div><div class="ttdef"><b>Definition:</b> <a href="LockResultValidator_8h_source.html#l00110">LockResultValidator.h:110</a></div></div>
|
|
90
90
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af54e70082388bbd70868250aaa0bc86b"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af54e70082388bbd70868250aaa0bc86b">SVF::SVFUtil::split</a></div><div class="ttdeci">std::vector< std::string > split(const std::string &s, char seperator)</div><div class="ttdoc">Split into two substrings around the first occurrence of a separator string. </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00243">SVFUtil.h:243</a></div></div>
|
|
91
91
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
@@ -167,7 +167,7 @@ $(function() {
|
|
|
167
167
|
<div class="ttc" id="classSVF_1_1MHP_html_a23ab5a03b7c00ba0ebac65568a83a5cc"><div class="ttname"><a href="classSVF_1_1MHP.html#a23ab5a03b7c00ba0ebac65568a83a5cc">SVF::MHP::updateSiblingThreads</a></div><div class="ttdeci">void updateSiblingThreads(NodeID tid)</div><div class="ttdef"><b>Definition:</b> <a href="MHP_8cpp_source.html#l00410">MHP.cpp:410</a></div></div>
|
|
168
168
|
<div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a98ecfe14be2d38d292b5919716cdd29d"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a98ecfe14be2d38d292b5919716cdd29d">SVF::ThreadCallGraph::joinsitesBegin</a></div><div class="ttdeci">CallSiteSet::const_iterator joinsitesBegin() const</div><div class="ttdoc">Join sites iterators. </div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00285">ThreadCallGraph.h:285</a></div></div>
|
|
169
169
|
<div class="ttc" id="classSVF_1_1GenericNode_html_afe6a7b286d9af4992f41b59612fd2900"><div class="ttname"><a href="classSVF_1_1GenericNode.html#afe6a7b286d9af4992f41b59612fd2900">SVF::GenericNode::InEdgeEnd</a></div><div class="ttdeci">iterator InEdgeEnd()</div><div class="ttdef"><b>Definition:</b> <a href="GenericGraph_8h_source.html#l00218">GenericGraph.h:218</a></div></div>
|
|
170
|
-
<div class="ttc" id="classSVF_1_1Options_html_aa3e6c78eb346a52bbaaac2610573604a"><div class="ttname"><a href="classSVF_1_1Options.html#aa3e6c78eb346a52bbaaac2610573604a">SVF::Options::PrintInterLev</a></div><div class="ttdeci">static const llvm::cl::opt< bool > PrintInterLev</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#
|
|
170
|
+
<div class="ttc" id="classSVF_1_1Options_html_aa3e6c78eb346a52bbaaac2610573604a"><div class="ttname"><a href="classSVF_1_1Options.html#aa3e6c78eb346a52bbaaac2610573604a">SVF::Options::PrintInterLev</a></div><div class="ttdeci">static const llvm::cl::opt< bool > PrintInterLev</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00174">Options.h:174</a></div></div>
|
|
171
171
|
<div class="ttc" id="classSVF_1_1PTACallGraphNode_html_adf17f5699c9f40ffc8837e813e3af3ec"><div class="ttname"><a href="classSVF_1_1PTACallGraphNode.html#adf17f5699c9f40ffc8837e813e3af3ec">SVF::PTACallGraphNode::const_iterator</a></div><div class="ttdeci">PTACallGraphEdge::CallGraphEdgeSet::const_iterator const_iterator</div><div class="ttdef"><b>Definition:</b> <a href="PTACallGraph_8h_source.html#l00180">PTACallGraph.h:180</a></div></div>
|
|
172
172
|
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_aed0b0b9f035057552a6a82154fd88e61"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVF::SVFUtil::outs</a></div><div class="ttdeci">std::ostream & outs()</div><div class="ttdoc">Overwrite llvm::outs() </div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00049">SVFUtil.h:49</a></div></div>
|
|
173
173
|
<div class="ttc" id="classSVF_1_1ForkJoinAnalysis_html_ab55532eefbcef639ced957ad82fbd340"><div class="ttname"><a href="classSVF_1_1ForkJoinAnalysis.html#ab55532eefbcef639ced957ad82fbd340">SVF::ForkJoinAnalysis::isFullJoin</a></div><div class="ttdeci">bool isFullJoin(NodeID tid1, NodeID tid2)</div><div class="ttdoc">Whether t1 fully joins t2. </div><div class="ttdef"><b>Definition:</b> <a href="MHP_8h_source.html#l00329">MHP.h:329</a></div></div>
|
|
@@ -64,7 +64,8 @@ $(function() {
|
|
|
64
64
|
<div class="header">
|
|
65
65
|
<div class="summary">
|
|
66
66
|
<a href="#nested-classes">Classes</a> |
|
|
67
|
-
<a href="#namespaces">Namespaces</a>
|
|
67
|
+
<a href="#namespaces">Namespaces</a> |
|
|
68
|
+
<a href="#func-members">Functions</a> </div>
|
|
68
69
|
<div class="headertitle">
|
|
69
70
|
<div class="title">MSSAMuChi.h File Reference</div> </div>
|
|
70
71
|
</div><!--header-->
|
|
@@ -103,6 +104,11 @@ Namespaces</h2></td></tr>
|
|
|
103
104
|
<tr class="memitem:namespaceSVF"><td class="memItemLeft" align="right" valign="top">  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceSVF.html">SVF</a></td></tr>
|
|
104
105
|
<tr class="memdesc:namespaceSVF"><td class="mdescLeft"> </td><td class="mdescRight">for isBitcode <br /></td></tr>
|
|
105
106
|
<tr class="separator:"><td class="memSeparator" colspan="2"> </td></tr>
|
|
107
|
+
</table><table class="memberdecls">
|
|
108
|
+
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="func-members"></a>
|
|
109
|
+
Functions</h2></td></tr>
|
|
110
|
+
<tr class="memitem:aec4534b227e8f43b9077e708b74817fa"><td class="memItemLeft" align="right" valign="top">std::ostream & </td><td class="memItemRight" valign="bottom"><a class="el" href="namespaceSVF.html#aec4534b227e8f43b9077e708b74817fa">SVF::operator<<</a> (std::ostream &o, const <a class="el" href="classSVF_1_1MRVer.html">MRVer</a> &mrver)</td></tr>
|
|
111
|
+
<tr class="separator:aec4534b227e8f43b9077e708b74817fa"><td class="memSeparator" colspan="2"> </td></tr>
|
|
106
112
|
</table>
|
|
107
113
|
</div><!-- contents -->
|
|
108
114
|
<!-- start footer part -->
|