svf-tools 1.0.539 → 1.0.540

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.
Files changed (180) hide show
  1. package/SVF-doxygen/html/html/AndersenStat_8cpp_source.html +2 -2
  2. package/SVF-doxygen/html/html/Andersen_8h_source.html +1 -1
  3. package/SVF-doxygen/html/html/BreakConstantExpr_8h_source.html +2 -1
  4. package/SVF-doxygen/html/html/CFGNormalizer_8h_source.html +1 -1
  5. package/SVF-doxygen/html/html/CFLAlias_8cpp_source.html +5 -4
  6. package/SVF-doxygen/html/html/CFLAlias_8h_source.html +15 -15
  7. package/SVF-doxygen/html/html/CFLGramGraphChecker_8h_source.html +4 -4
  8. package/SVF-doxygen/html/html/CFLGrammar_8txt.html +39 -39
  9. package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +20 -8
  10. package/SVF-doxygen/html/html/CFLGraphBuilder_8h_source.html +16 -15
  11. package/SVF-doxygen/html/html/CHGBuilder_8cpp.html +1 -1
  12. package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +2 -1
  13. package/SVF-doxygen/html/html/CHGBuilder_8h_source.html +2 -1
  14. package/SVF-doxygen/html/html/CPPUtil_8h.html +4 -4
  15. package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +2 -2
  16. package/SVF-doxygen/html/html/DDAStat_8h.html +1 -1
  17. package/SVF-doxygen/html/html/DDAStat_8h_source.html +1 -1
  18. package/SVF-doxygen/html/html/ExtAPI_8h_source.html +1 -1
  19. package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +2 -2
  20. package/SVF-doxygen/html/html/GrammarBuilder_8cpp_source.html +4 -4
  21. package/SVF-doxygen/html/html/GrammarBuilder_8h_source.html +3 -3
  22. package/SVF-doxygen/html/html/ICFGStat_8h.html +1 -1
  23. package/SVF-doxygen/html/html/ICFGStat_8h_source.html +1 -1
  24. package/SVF-doxygen/html/html/LLVMLoopAnalysis_8cpp_source.html +1 -1
  25. package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +2 -1
  26. package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +1 -1
  27. package/SVF-doxygen/html/html/LockAnalysis_8cpp.html +1 -1
  28. package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
  29. package/SVF-doxygen/html/html/MHP_8cpp.html +1 -1
  30. package/SVF-doxygen/html/html/MHP_8cpp_source.html +1 -1
  31. package/SVF-doxygen/html/html/MTAResultValidator_8h_source.html +2 -1
  32. package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +1 -1
  33. package/SVF-doxygen/html/html/MTAStat_8h.html +1 -1
  34. package/SVF-doxygen/html/html/MTAStat_8h_source.html +1 -1
  35. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp.html +1 -1
  36. package/SVF-doxygen/html/html/NodeIDAllocator_8cpp_source.html +1 -1
  37. package/SVF-doxygen/html/html/Options_8cpp_source.html +5 -3
  38. package/SVF-doxygen/html/html/Options_8h.html +1 -1
  39. package/SVF-doxygen/html/html/Options_8h_source.html +5 -3
  40. package/SVF-doxygen/html/html/PEGGrammar_8txt.html +314 -0
  41. package/SVF-doxygen/html/html/PTAStat_8cpp.html +1 -1
  42. package/SVF-doxygen/html/html/PTAStat_8cpp_source.html +5 -5
  43. package/SVF-doxygen/html/html/PTAStat_8h.html +2 -2
  44. package/SVF-doxygen/html/html/PTAStat_8h_source.html +2 -2
  45. package/SVF-doxygen/html/html/PointerAnalysis_8cpp.html +1 -1
  46. package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +2 -2
  47. package/SVF-doxygen/html/html/SVFGStat_8cpp_source.html +1 -1
  48. package/SVF-doxygen/html/html/SVFGStat_8h.html +1 -1
  49. package/SVF-doxygen/html/html/SVFGStat_8h_source.html +1 -1
  50. package/SVF-doxygen/html/html/SVFUtil_8h.html +1 -1
  51. package/SVF-doxygen/html/html/SaberCondAllocator_8cpp_source.html +2 -1
  52. package/SVF-doxygen/html/html/TypeAnalysis_8cpp.html +1 -1
  53. package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +1 -1
  54. package/SVF-doxygen/html/html/Util_2BasicTypes_8h.html +1 -1
  55. package/SVF-doxygen/html/html/VersionedFlowSensitiveStat_8cpp_source.html +2 -2
  56. package/SVF-doxygen/html/html/WPAStat_8h.html +1 -1
  57. package/SVF-doxygen/html/html/WPAStat_8h_source.html +1 -1
  58. package/SVF-doxygen/html/html/cfl_8cpp.html +1 -1
  59. package/SVF-doxygen/html/html/cfl_8cpp_source.html +1 -1
  60. package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder-members.html +12 -11
  61. package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder.html +73 -4
  62. package/SVF-doxygen/html/html/classSVF_1_1Andersen.html +1 -1
  63. package/SVF-doxygen/html/html/classSVF_1_1AndersenSCD.html +1 -1
  64. package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +1 -1
  65. package/SVF-doxygen/html/html/classSVF_1_1AndersenStat.html +3 -3
  66. package/SVF-doxygen/html/html/classSVF_1_1AndersenWaveDiff.html +1 -1
  67. package/SVF-doxygen/html/html/classSVF_1_1BreakConstantGEPs.html +1 -1
  68. package/SVF-doxygen/html/html/classSVF_1_1CFLAlias.html +50 -49
  69. package/SVF-doxygen/html/html/classSVF_1_1CFLGraphBuilder.html +26 -26
  70. package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +10 -7
  71. package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +2 -2
  72. package/SVF-doxygen/html/html/classSVF_1_1ExtAPI.html +11 -11
  73. package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +2 -2
  74. package/SVF-doxygen/html/html/classSVF_1_1GrammarBuilder.html +10 -10
  75. package/SVF-doxygen/html/html/classSVF_1_1LLVMLoopAnalysis.html +1 -1
  76. package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +2 -1
  77. package/SVF-doxygen/html/html/classSVF_1_1MTA.html +1 -1
  78. package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +4 -4
  79. package/SVF-doxygen/html/html/classSVF_1_1MemSSAStat.html +1 -1
  80. package/SVF-doxygen/html/html/classSVF_1_1MergeFunctionRets.html +3 -2
  81. package/SVF-doxygen/html/html/classSVF_1_1Options-members.html +8 -6
  82. package/SVF-doxygen/html/html/classSVF_1_1Options.html +54 -2
  83. package/SVF-doxygen/html/html/classSVF_1_1PTAStat.html +16 -16
  84. package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +1 -1
  85. package/SVF-doxygen/html/html/classSVF_1_1SVFGStat.html +2 -2
  86. package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +3 -3
  87. package/SVF-doxygen/html/html/classSVF_1_1SaberCheckerAPI.html +1 -1
  88. package/SVF-doxygen/html/html/classSVF_1_1ThreadAPI.html +1 -1
  89. package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +1 -1
  90. package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitiveStat.html +2 -2
  91. package/SVF-doxygen/html/html/dir_95e22971b5dbae2382075a3453e365b4.html +2 -0
  92. package/SVF-doxygen/html/html/dir_eef3a4ca6ca2cab0eb5fbea30ec32c1a.html +0 -2
  93. package/SVF-doxygen/html/html/files.html +15 -15
  94. package/SVF-doxygen/html/html/functions_b.html +3 -0
  95. package/SVF-doxygen/html/html/functions_c.html +22 -20
  96. package/SVF-doxygen/html/html/functions_f.html +10 -12
  97. package/SVF-doxygen/html/html/functions_func_b.html +3 -0
  98. package/SVF-doxygen/html/html/functions_func_p.html +2 -2
  99. package/SVF-doxygen/html/html/functions_i.html +6 -6
  100. package/SVF-doxygen/html/html/functions_l.html +6 -6
  101. package/SVF-doxygen/html/html/functions_n.html +3 -0
  102. package/SVF-doxygen/html/html/functions_p.html +19 -18
  103. package/SVF-doxygen/html/html/functions_r.html +4 -2
  104. package/SVF-doxygen/html/html/functions_s.html +13 -11
  105. package/SVF-doxygen/html/html/functions_t.html +3 -3
  106. package/SVF-doxygen/html/html/functions_v.html +3 -3
  107. package/SVF-doxygen/html/html/functions_vars_n.html +3 -0
  108. package/SVF-doxygen/html/html/functions_vars_p.html +3 -0
  109. package/SVF-doxygen/html/html/globals.html +1 -0
  110. package/SVF-doxygen/html/html/globals_a.html +3 -1
  111. package/SVF-doxygen/html/html/globals_c.html +6 -5
  112. package/SVF-doxygen/html/html/globals_e.html +1 -0
  113. package/SVF-doxygen/html/html/globals_f.html +7 -5
  114. package/SVF-doxygen/html/html/globals_g.html +7 -3
  115. package/SVF-doxygen/html/html/globals_m.html +6 -3
  116. package/SVF-doxygen/html/html/globals_v.html +2 -1
  117. package/SVF-doxygen/html/html/globals_vars.html +22 -7
  118. package/SVF-doxygen/html/html/namespaceSVF.html +2 -2
  119. package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +1 -1
  120. package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +4 -4
  121. package/SVF-doxygen/html/html/search/all_0.js +1 -1
  122. package/SVF-doxygen/html/html/search/all_1.js +2 -2
  123. package/SVF-doxygen/html/html/search/all_10.js +11 -9
  124. package/SVF-doxygen/html/html/search/all_11.js +2 -2
  125. package/SVF-doxygen/html/html/search/all_12.js +8 -8
  126. package/SVF-doxygen/html/html/search/all_13.js +6 -6
  127. package/SVF-doxygen/html/html/search/all_14.js +1 -1
  128. package/SVF-doxygen/html/html/search/all_15.js +2 -2
  129. package/SVF-doxygen/html/html/search/all_2.js +1 -0
  130. package/SVF-doxygen/html/html/search/all_3.js +4 -4
  131. package/SVF-doxygen/html/html/search/all_5.js +1 -1
  132. package/SVF-doxygen/html/html/search/all_6.js +6 -6
  133. package/SVF-doxygen/html/html/search/all_7.js +4 -4
  134. package/SVF-doxygen/html/html/search/all_9.js +2 -2
  135. package/SVF-doxygen/html/html/search/all_b.js +1 -1
  136. package/SVF-doxygen/html/html/search/all_c.js +5 -5
  137. package/SVF-doxygen/html/html/search/all_d.js +2 -2
  138. package/SVF-doxygen/html/html/search/all_e.js +5 -4
  139. package/SVF-doxygen/html/html/search/files_c.js +1 -0
  140. package/SVF-doxygen/html/html/search/functions_1.js +1 -0
  141. package/SVF-doxygen/html/html/search/functions_f.js +2 -2
  142. package/SVF-doxygen/html/html/search/variables_0.js +1 -1
  143. package/SVF-doxygen/html/html/search/variables_1.js +2 -2
  144. package/SVF-doxygen/html/html/search/variables_10.js +2 -1
  145. package/SVF-doxygen/html/html/search/variables_13.js +3 -3
  146. package/SVF-doxygen/html/html/search/variables_14.js +1 -1
  147. package/SVF-doxygen/html/html/search/variables_15.js +1 -1
  148. package/SVF-doxygen/html/html/search/variables_3.js +1 -1
  149. package/SVF-doxygen/html/html/search/variables_5.js +1 -1
  150. package/SVF-doxygen/html/html/search/variables_6.js +2 -2
  151. package/SVF-doxygen/html/html/search/variables_7.js +4 -4
  152. package/SVF-doxygen/html/html/search/variables_c.js +1 -1
  153. package/SVF-doxygen/html/html/search/variables_d.js +1 -1
  154. package/SVF-doxygen/html/html/search/variables_e.js +4 -3
  155. package/include/CFL/CFGNormalizer.h +3 -3
  156. package/include/CFL/CFLAlias.h +5 -1
  157. package/include/CFL/CFLGraphBuilder.h +11 -1
  158. package/include/CFL/PEGGrammar.txt +28 -0
  159. package/include/DDA/DDAStat.h +1 -1
  160. package/include/Graphs/ICFGStat.h +1 -1
  161. package/include/Graphs/SVFGStat.h +1 -1
  162. package/include/MTA/MTAStat.h +1 -1
  163. package/include/SVF-FE/LLVMUtil.h +2 -2
  164. package/include/Util/ExtAPI.h +2 -2
  165. package/include/Util/Options.h +3 -1
  166. package/include/{MemoryModel → Util}/PTAStat.h +0 -0
  167. package/include/WPA/Andersen.h +3 -3
  168. package/include/WPA/WPAStat.h +1 -1
  169. package/lib/CFL/CFLAlias.cpp +12 -7
  170. package/lib/CFL/CFLGraphBuilder.cpp +135 -0
  171. package/lib/CFL/GrammarBuilder.cpp +12 -8
  172. package/lib/MTA/LockAnalysis.cpp +1 -1
  173. package/lib/MTA/MHP.cpp +1 -1
  174. package/lib/MemoryModel/PointerAnalysis.cpp +1 -1
  175. package/lib/SVF-FE/CHGBuilder.cpp +1 -1
  176. package/lib/Util/NodeIDAllocator.cpp +1 -1
  177. package/lib/Util/Options.cpp +16 -4
  178. package/lib/Util/PTAStat.cpp +4 -3
  179. package/lib/WPA/TypeAnalysis.cpp +1 -1
  180. package/package.json +1 -1
@@ -161,14 +161,14 @@ Private Attributes</h2></td></tr>
161
161
  <p>Build grammarBase from fileName. </p>
162
162
  <p>build grammarbase from textfile </p>
163
163
 
164
- <p class="definition">Definition at line <a class="el" href="GrammarBuilder_8cpp_source.html#l00106">106</a> of file <a class="el" href="GrammarBuilder_8cpp_source.html">GrammarBuilder.cpp</a>.</p>
165
- <div class="fragment"><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;{</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160; std::smatch matches;</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> delimiter = <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> delimiter1 = <span class="stringliteral">&quot;-&gt;&quot;</span>;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> word = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; <span class="keywordtype">size_t</span> pos;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> prod;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; std::vector&lt;std::string&gt; wordProdVec = <a class="code" href="classSVF_1_1GrammarBuilder.html#abad6b574d9f88e2b4ebb6372dc903f62">loadWordProductions</a>();</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> wordProd : wordProdVec)</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; {</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; <span class="keywordflow">if</span> ((pos = wordProd.find(delimiter1)) != std::string::npos)</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160; {</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> RHS = <a class="code" href="classSVF_1_1GrammarBuilder.html#a6de372fbe80d33a5688cada0adca0bb8">stripSpace</a>(wordProd.substr(0, pos));</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> LHS = wordProd.substr(pos + delimiter1.size(), wordProd.size() - 1);</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#ad4f53184d04d9f7a737b19f63d002550">GrammarBase::Symbol</a> RHSSymbol = <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a63389968c8d246a84562a8d17e08790b">insertNonTerminalSymbol</a>(RHS);</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; prod.push_back(RHSSymbol);</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>().find(RHSSymbol) == <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>().end()) <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>().insert({RHSSymbol, {}});</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; std::regex LHSRegEx(<span class="stringliteral">&quot;\\s*(.*)&quot;</span>);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; std::regex_search(LHS, matches, LHSRegEx);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; LHS = matches.str(1);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">while</span> ((pos = LHS.find(delimiter)) != std::string::npos)</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; {</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; word = LHS.substr(0, pos);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; LHS.erase(0, pos + delimiter.length()); <span class="comment">//Capital is Nonterminal, Otherwise is terminal</span></div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; prod.push_back(<a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a3c16f37c05de31fbd2be1ae9c0961e84">insertSymbol</a>(word));</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; }</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; prod.push_back(<a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a3c16f37c05de31fbd2be1ae9c0961e84">insertSymbol</a>(LHS));</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>().at(RHSSymbol).insert(prod);</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; prod = {};</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; }</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>;</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160;};</div><div class="ttc" id="classSVF_1_1GrammarBuilder_html_a7b81810150ce896801e4e6a831ab98aa"><div class="ttname"><a href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">SVF::GrammarBuilder::grammar</a></div><div class="ttdeci">GrammarBase * grammar</div><div class="ttdef"><b>Definition:</b> <a href="GrammarBuilder_8h_source.html#l00074">GrammarBuilder.h:74</a></div></div>
164
+ <p class="definition">Definition at line <a class="el" href="GrammarBuilder_8cpp_source.html#l00110">110</a> of file <a class="el" href="GrammarBuilder_8cpp_source.html">GrammarBuilder.cpp</a>.</p>
165
+ <div class="fragment"><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>&#160;{</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span>&#160; std::smatch matches;</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> delimiter = <span class="stringliteral">&quot; &quot;</span>;</div><div class="line"><a name="l00114"></a><span class="lineno"> 114</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> delimiter1 = <span class="stringliteral">&quot;-&gt;&quot;</span>;</div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> word = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00116"></a><span class="lineno"> 116</span>&#160; <span class="keywordtype">size_t</span> pos;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">GrammarBase::Production</a> prod;</div><div class="line"><a name="l00118"></a><span class="lineno"> 118</span>&#160; std::vector&lt;std::string&gt; wordProdVec = <a class="code" href="classSVF_1_1GrammarBuilder.html#abad6b574d9f88e2b4ebb6372dc903f62">loadWordProductions</a>();</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno"> 120</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> wordProd : wordProdVec)</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; {</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160; <span class="keywordflow">if</span> ((pos = wordProd.find(delimiter1)) != std::string::npos)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> RHS = <a class="code" href="classSVF_1_1GrammarBuilder.html#a6de372fbe80d33a5688cada0adca0bb8">stripSpace</a>(wordProd.substr(0, pos));</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> LHS = wordProd.substr(pos + delimiter1.size(), wordProd.size() - 1);</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <a class="code" href="classSVF_1_1GrammarBase.html#ad4f53184d04d9f7a737b19f63d002550">GrammarBase::Symbol</a> RHSSymbol = <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a63389968c8d246a84562a8d17e08790b">insertNonTerminalSymbol</a>(RHS);</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; prod.push_back(RHSSymbol);</div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160; <span class="keywordflow">if</span> (<a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>().find(RHSSymbol) == <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>().end()) <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>().insert({RHSSymbol, {}});</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160; std::regex LHSRegEx(<span class="stringliteral">&quot;\\s*(.*)&quot;</span>);</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; std::regex_search(LHS, matches, LHSRegEx);</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; LHS = matches.str(1);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160; <span class="keywordflow">while</span> ((pos = LHS.find(delimiter)) != std::string::npos)</div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span>&#160; {</div><div class="line"><a name="l00134"></a><span class="lineno"> 134</span>&#160; word = LHS.substr(0, pos);</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>&#160; LHS.erase(0, pos + delimiter.length()); <span class="comment">//Capital is Nonterminal, Otherwise is terminal</span></div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>&#160; prod.push_back(<a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a3c16f37c05de31fbd2be1ae9c0961e84">insertSymbol</a>(word));</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>&#160; }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span>&#160; prod.push_back(<a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a3c16f37c05de31fbd2be1ae9c0961e84">insertSymbol</a>(LHS));</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span>&#160; <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">getRawProductions</a>().at(RHSSymbol).insert(prod);</div><div class="line"><a name="l00140"></a><span class="lineno"> 140</span>&#160; prod = {};</div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span>&#160; }</div><div class="line"><a name="l00142"></a><span class="lineno"> 142</span>&#160; }</div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160;</div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>;</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>&#160;};</div><div class="ttc" id="classSVF_1_1GrammarBuilder_html_a7b81810150ce896801e4e6a831ab98aa"><div class="ttname"><a href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">SVF::GrammarBuilder::grammar</a></div><div class="ttdeci">GrammarBase * grammar</div><div class="ttdef"><b>Definition:</b> <a href="GrammarBuilder_8h_source.html#l00074">GrammarBuilder.h:74</a></div></div>
166
166
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a4561438149716c91178ea013686f66ae"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a4561438149716c91178ea013686f66ae">SVF::GrammarBase::getRawProductions</a></div><div class="ttdeci">SymbolMap&lt; Symbol, Productions &gt; &amp; getRawProductions()</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00180">CFLGrammar.h:180</a></div></div>
167
- <div class="ttc" id="classSVF_1_1GrammarBuilder_html_abad6b574d9f88e2b4ebb6372dc903f62"><div class="ttname"><a href="classSVF_1_1GrammarBuilder.html#abad6b574d9f88e2b4ebb6372dc903f62">SVF::GrammarBuilder::loadWordProductions</a></div><div class="ttdeci">const std::vector&lt; std::string &gt; loadWordProductions() const</div><div class="ttdoc">Parse whole production string to production vector. </div><div class="ttdef"><b>Definition:</b> <a href="GrammarBuilder_8cpp_source.html#l00080">GrammarBuilder.cpp:80</a></div></div>
167
+ <div class="ttc" id="classSVF_1_1GrammarBuilder_html_abad6b574d9f88e2b4ebb6372dc903f62"><div class="ttname"><a href="classSVF_1_1GrammarBuilder.html#abad6b574d9f88e2b4ebb6372dc903f62">SVF::GrammarBuilder::loadWordProductions</a></div><div class="ttdeci">const std::vector&lt; std::string &gt; loadWordProductions() const</div><div class="ttdoc">Parse whole production string to production vector. </div><div class="ttdef"><b>Definition:</b> <a href="GrammarBuilder_8cpp_source.html#l00084">GrammarBuilder.cpp:84</a></div></div>
168
168
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a63389968c8d246a84562a8d17e08790b"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a63389968c8d246a84562a8d17e08790b">SVF::GrammarBase::insertNonTerminalSymbol</a></div><div class="ttdeci">Symbol insertNonTerminalSymbol(std::string strLit)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00231">CFLGrammar.cpp:231</a></div></div>
169
169
  <div class="ttc" id="classSVF_1_1GrammarBase_html_af384c960a5edc576cbfb60a869e346ec"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#af384c960a5edc576cbfb60a869e346ec">SVF::GrammarBase::Production</a></div><div class="ttdeci">std::vector&lt; Symbol &gt; Production</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00156">CFLGrammar.h:156</a></div></div>
170
170
  <div class="ttc" id="classSVF_1_1GrammarBase_html_ad4f53184d04d9f7a737b19f63d002550"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#ad4f53184d04d9f7a737b19f63d002550">SVF::GrammarBase::Symbol</a></div><div class="ttdeci">struct SVF::GrammarBase::Symbol Symbol</div></div>
171
- <div class="ttc" id="classSVF_1_1GrammarBuilder_html_a6de372fbe80d33a5688cada0adca0bb8"><div class="ttname"><a href="classSVF_1_1GrammarBuilder.html#a6de372fbe80d33a5688cada0adca0bb8">SVF::GrammarBuilder::stripSpace</a></div><div class="ttdeci">const std::string stripSpace(std::string s) const</div><div class="ttdoc">Strip front and tail space. </div><div class="ttdef"><b>Definition:</b> <a href="GrammarBuilder_8cpp_source.html#l00096">GrammarBuilder.cpp:96</a></div></div>
171
+ <div class="ttc" id="classSVF_1_1GrammarBuilder_html_a6de372fbe80d33a5688cada0adca0bb8"><div class="ttname"><a href="classSVF_1_1GrammarBuilder.html#a6de372fbe80d33a5688cada0adca0bb8">SVF::GrammarBuilder::stripSpace</a></div><div class="ttdeci">const std::string stripSpace(std::string s) const</div><div class="ttdoc">Strip front and tail space. </div><div class="ttdef"><b>Definition:</b> <a href="GrammarBuilder_8cpp_source.html#l00100">GrammarBuilder.cpp:100</a></div></div>
172
172
  <div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
173
173
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a3c16f37c05de31fbd2be1ae9c0961e84"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a3c16f37c05de31fbd2be1ae9c0961e84">SVF::GrammarBase::insertSymbol</a></div><div class="ttdeci">Symbol insertSymbol(std::string strLit)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00217">CFLGrammar.cpp:217</a></div></div>
174
174
  </div><!-- fragment -->
@@ -219,8 +219,8 @@ Private Attributes</h2></td></tr>
219
219
 
220
220
  <p>Parse whole production string to production vector. </p>
221
221
 
222
- <p class="definition">Definition at line <a class="el" href="GrammarBuilder_8cpp_source.html#l00080">80</a> of file <a class="el" href="GrammarBuilder_8cpp_source.html">GrammarBuilder.cpp</a>.</p>
223
- <div class="fragment"><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;{</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160; <span class="keywordtype">size_t</span> pos = 0;</div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> lines = <a class="code" href="classSVF_1_1GrammarBuilder.html#a5a34166b4b1ce1dcc985f4619f4a2bbc">parseProductionsString</a>();</div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> word = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160; std::vector&lt;std::string&gt; wordProds;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> delimiter = <span class="stringliteral">&quot;;&quot;</span>;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <span class="keywordflow">while</span> ((pos = lines.find(<span class="stringliteral">&quot;;&quot;</span>)) != std::string::npos)</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; {</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; word = lines.substr(0, pos);</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; wordProds.push_back(word);</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; lines.erase(0, pos + delimiter.length());</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; }</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; <span class="keywordflow">return</span> wordProds;</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;}</div><div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
222
+ <p class="definition">Definition at line <a class="el" href="GrammarBuilder_8cpp_source.html#l00084">84</a> of file <a class="el" href="GrammarBuilder_8cpp_source.html">GrammarBuilder.cpp</a>.</p>
223
+ <div class="fragment"><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;{</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160; <span class="keywordtype">size_t</span> pos = 0;</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> lines = <a class="code" href="classSVF_1_1GrammarBuilder.html#a5a34166b4b1ce1dcc985f4619f4a2bbc">parseProductionsString</a>();</div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> word = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160; std::vector&lt;std::string&gt; wordProds;</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> delimiter = <span class="stringliteral">&quot;;&quot;</span>;</div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160; <span class="keywordflow">while</span> ((pos = lines.find(<span class="stringliteral">&quot;;&quot;</span>)) != std::string::npos)</div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160; {</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160; word = lines.substr(0, pos);</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160; wordProds.push_back(word);</div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160; lines.erase(0, pos + delimiter.length());</div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160; }</div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160; <span class="keywordflow">return</span> wordProds;</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;}</div><div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
224
224
  <div class="ttc" id="classSVF_1_1GrammarBuilder_html_a5a34166b4b1ce1dcc985f4619f4a2bbc"><div class="ttname"><a href="classSVF_1_1GrammarBuilder.html#a5a34166b4b1ce1dcc985f4619f4a2bbc">SVF::GrammarBuilder::parseProductionsString</a></div><div class="ttdeci">const std::string parseProductionsString() const</div><div class="ttdoc">Parse start symbol and production from file string. </div><div class="ttdef"><b>Definition:</b> <a href="GrammarBuilder_8cpp_source.html#l00039">GrammarBuilder.cpp:39</a></div></div>
225
225
  </div><!-- fragment -->
226
226
  </div>
@@ -251,10 +251,10 @@ Private Attributes</h2></td></tr>
251
251
  <p>Parse start symbol and production from file string. </p>
252
252
 
253
253
  <p class="definition">Definition at line <a class="el" href="GrammarBuilder_8cpp_source.html#l00039">39</a> of file <a class="el" href="GrammarBuilder_8cpp_source.html">GrammarBuilder.cpp</a>.</p>
254
- <div class="fragment"><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;{</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; std::ifstream textFile(<a class="code" href="classSVF_1_1GrammarBuilder.html#aa0f5135a232adc1ca42d4f51a3c70704">fileName</a>);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> lineString;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> lines = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> startString;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> WHITESPACE = <span class="stringliteral">&quot; \n\r\t\f\v&quot;</span>;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keywordtype">int</span> lineNum = 0;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordflow">while</span> (getline(textFile, lineString))</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; {</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; <span class="keywordflow">if</span>(lineNum == 1)</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; {</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; startString = <a class="code" href="classSVF_1_1GrammarBuilder.html#a6de372fbe80d33a5688cada0adca0bb8">stripSpace</a>(lineString);</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; }</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; lines.append(lineString.substr(lineString.find_first_not_of(WHITESPACE), lineString.find_last_not_of(WHITESPACE)+1));</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; lineNum++;</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; }</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160; std::regex reg(<span class="stringliteral">&quot;Start:([\\s\\S]*)Terminal:([\\s\\S]*)Productions:([\\s\\S]*)&quot;</span>);</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; std::smatch matches;</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; <span class="keywordflow">if</span> (std::regex_search(lines, matches, reg))</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; {</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160; lines = matches.str(3);</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; }</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> terminalString = matches.str(2);</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> symbolString;</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; <span class="keywordtype">size_t</span> pos;</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; <span class="keywordflow">while</span> ((pos = terminalString.find(<span class="stringliteral">&quot; &quot;</span>)) != std::string::npos)</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; {</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; symbolString = <a class="code" href="classSVF_1_1GrammarBuilder.html#a6de372fbe80d33a5688cada0adca0bb8">stripSpace</a>(terminalString.substr(0, pos));</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; terminalString.erase(0, pos + 1); <span class="comment">//Capital is Nonterminal, Otherwise is terminal</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a3c16f37c05de31fbd2be1ae9c0961e84">insertSymbol</a>(symbolString);</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a3c16f37c05de31fbd2be1ae9c0961e84">insertSymbol</a>(symbolString);</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a1de2b9f6c39936afa8f821ca262deadd">setStartKind</a>(<a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a3c16f37c05de31fbd2be1ae9c0961e84">insertSymbol</a>(startString));</div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ad2f1a578ba72a2b600014b21b6f2d542">insertTerminalKind</a>(<span class="stringliteral">&quot;epsilon&quot;</span>);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <span class="keywordflow">return</span> lines;</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;}</div><div class="ttc" id="classSVF_1_1GrammarBuilder_html_a7b81810150ce896801e4e6a831ab98aa"><div class="ttname"><a href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">SVF::GrammarBuilder::grammar</a></div><div class="ttdeci">GrammarBase * grammar</div><div class="ttdef"><b>Definition:</b> <a href="GrammarBuilder_8h_source.html#l00074">GrammarBuilder.h:74</a></div></div>
254
+ <div class="fragment"><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;{</div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160; std::ifstream textFile(<a class="code" href="classSVF_1_1GrammarBuilder.html#aa0f5135a232adc1ca42d4f51a3c70704">fileName</a>);</div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> lineString;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> lines = <span class="stringliteral">&quot;&quot;</span>;</div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> startString;</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> symbolString;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160; <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> WHITESPACE = <span class="stringliteral">&quot; \n\r\t\f\v&quot;</span>;</div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160; <span class="keywordtype">int</span> lineNum = 0;</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160; <span class="keywordflow">while</span> (getline(textFile, lineString))</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160; {</div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160; <span class="keywordflow">if</span>(lineNum == 1)</div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160; {</div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160; startString = <a class="code" href="classSVF_1_1GrammarBuilder.html#a6de372fbe80d33a5688cada0adca0bb8">stripSpace</a>(lineString);</div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160; }</div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160; <span class="keywordflow">if</span>(lineNum == 3)</div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160; {</div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160; symbolString = lineString.substr(lineString.find_first_not_of(WHITESPACE), lineString.find_last_not_of(WHITESPACE)+1);</div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160; }</div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;</div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160; lines.append(lineString.substr(lineString.find_first_not_of(WHITESPACE), lineString.find_last_not_of(WHITESPACE)+1));</div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160; lineNum++;</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160; }</div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;</div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160; std::regex reg(<span class="stringliteral">&quot;Start:([\\s\\S]*)Terminal:(.*)Productions:([\\s\\S]*)&quot;</span>);</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160; std::smatch matches;</div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160; <span class="keywordflow">if</span> (std::regex_search(lines, matches, reg))</div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160; {</div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160; lines = matches.str(3);</div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160; }</div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> sString;</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <span class="keywordtype">size_t</span> pos = 0;</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">while</span> ((pos = symbolString.find(<span class="stringliteral">&quot; &quot;</span>)) != std::string::npos)</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; {</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160; sString = <a class="code" href="classSVF_1_1GrammarBuilder.html#a6de372fbe80d33a5688cada0adca0bb8">stripSpace</a>(symbolString.substr(0, pos));</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160; symbolString.erase(0, pos + 1); <span class="comment">//Capital is Nonterminal, Otherwise is terminal</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160; <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a3c16f37c05de31fbd2be1ae9c0961e84">insertSymbol</a>(sString);</div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160; }</div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160; <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a3c16f37c05de31fbd2be1ae9c0961e84">insertSymbol</a>(symbolString);</div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160; <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a1de2b9f6c39936afa8f821ca262deadd">setStartKind</a>(<a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#a3c16f37c05de31fbd2be1ae9c0961e84">insertSymbol</a>(startString));</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160; <a class="code" href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">grammar</a>-&gt;<a class="code" href="classSVF_1_1GrammarBase.html#ad2f1a578ba72a2b600014b21b6f2d542">insertTerminalKind</a>(<span class="stringliteral">&quot;epsilon&quot;</span>);</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160; <span class="keywordflow">return</span> lines;</div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;}</div><div class="ttc" id="classSVF_1_1GrammarBuilder_html_a7b81810150ce896801e4e6a831ab98aa"><div class="ttname"><a href="classSVF_1_1GrammarBuilder.html#a7b81810150ce896801e4e6a831ab98aa">SVF::GrammarBuilder::grammar</a></div><div class="ttdeci">GrammarBase * grammar</div><div class="ttdef"><b>Definition:</b> <a href="GrammarBuilder_8h_source.html#l00074">GrammarBuilder.h:74</a></div></div>
255
255
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a1de2b9f6c39936afa8f821ca262deadd"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a1de2b9f6c39936afa8f821ca262deadd">SVF::GrammarBase::setStartKind</a></div><div class="ttdeci">void setStartKind(Kind startKind)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8h_source.html#l00200">CFLGrammar.h:200</a></div></div>
256
256
  <div class="ttc" id="classSVF_1_1GrammarBuilder_html_aa0f5135a232adc1ca42d4f51a3c70704"><div class="ttname"><a href="classSVF_1_1GrammarBuilder.html#aa0f5135a232adc1ca42d4f51a3c70704">SVF::GrammarBuilder::fileName</a></div><div class="ttdeci">std::string fileName</div><div class="ttdef"><b>Definition:</b> <a href="GrammarBuilder_8h_source.html#l00073">GrammarBuilder.h:73</a></div></div>
257
- <div class="ttc" id="classSVF_1_1GrammarBuilder_html_a6de372fbe80d33a5688cada0adca0bb8"><div class="ttname"><a href="classSVF_1_1GrammarBuilder.html#a6de372fbe80d33a5688cada0adca0bb8">SVF::GrammarBuilder::stripSpace</a></div><div class="ttdeci">const std::string stripSpace(std::string s) const</div><div class="ttdoc">Strip front and tail space. </div><div class="ttdef"><b>Definition:</b> <a href="GrammarBuilder_8cpp_source.html#l00096">GrammarBuilder.cpp:96</a></div></div>
257
+ <div class="ttc" id="classSVF_1_1GrammarBuilder_html_a6de372fbe80d33a5688cada0adca0bb8"><div class="ttname"><a href="classSVF_1_1GrammarBuilder.html#a6de372fbe80d33a5688cada0adca0bb8">SVF::GrammarBuilder::stripSpace</a></div><div class="ttdeci">const std::string stripSpace(std::string s) const</div><div class="ttdoc">Strip front and tail space. </div><div class="ttdef"><b>Definition:</b> <a href="GrammarBuilder_8cpp_source.html#l00100">GrammarBuilder.cpp:100</a></div></div>
258
258
  <div class="ttc" id="cJSON_8h_html_ad4c68ea99a26b0a98ad9a79982960458"><div class="ttname"><a href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">string</a></div><div class="ttdeci">const char *const string</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00172">cJSON.h:172</a></div></div>
259
259
  <div class="ttc" id="classSVF_1_1GrammarBase_html_a3c16f37c05de31fbd2be1ae9c0961e84"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#a3c16f37c05de31fbd2be1ae9c0961e84">SVF::GrammarBase::insertSymbol</a></div><div class="ttdeci">Symbol insertSymbol(std::string strLit)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00217">CFLGrammar.cpp:217</a></div></div>
260
260
  <div class="ttc" id="classSVF_1_1GrammarBase_html_ad2f1a578ba72a2b600014b21b6f2d542"><div class="ttname"><a href="classSVF_1_1GrammarBase.html#ad2f1a578ba72a2b600014b21b6f2d542">SVF::GrammarBase::insertTerminalKind</a></div><div class="ttdeci">Kind insertTerminalKind(std::string strLit)</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8cpp_source.html#l00163">CFLGrammar.cpp:163</a></div></div>
@@ -287,8 +287,8 @@ Private Attributes</h2></td></tr>
287
287
 
288
288
  <p>Strip front and tail space. </p>
289
289
 
290
- <p class="definition">Definition at line <a class="el" href="GrammarBuilder_8cpp_source.html#l00096">96</a> of file <a class="el" href="GrammarBuilder_8cpp_source.html">GrammarBuilder.cpp</a>.</p>
291
- <div class="fragment"><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;{</div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160; std::smatch matches;</div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160; std::regex stripReg(<span class="stringliteral">&quot;\\s*(\\S*)\\s*&quot;</span>);</div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160; std::regex_search(s, matches, stripReg);</div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160; <span class="keywordflow">return</span> matches.str(1);</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;}</div></div><!-- fragment -->
290
+ <p class="definition">Definition at line <a class="el" href="GrammarBuilder_8cpp_source.html#l00100">100</a> of file <a class="el" href="GrammarBuilder_8cpp_source.html">GrammarBuilder.cpp</a>.</p>
291
+ <div class="fragment"><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;{</div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160; std::smatch matches;</div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160; std::regex stripReg(<span class="stringliteral">&quot;\\s*(\\S*)\\s*&quot;</span>);</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160; std::regex_search(s, matches, stripReg);</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160; <span class="keywordflow">return</span> matches.str(1);</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160;}</div></div><!-- fragment -->
292
292
  </div>
293
293
  </div>
294
294
  <h2 class="groupheader">Member Data Documentation</h2>
@@ -298,7 +298,7 @@ Public Member Functions</h2></td></tr>
298
298
  <div class="ttc" id="classSVF_1_1ICFG_html_a5f2c0aaba07d6fdd63058da0fb60ca8b"><div class="ttname"><a href="classSVF_1_1ICFG.html#a5f2c0aaba07d6fdd63058da0fb60ca8b">SVF::ICFG::getICFGNode</a></div><div class="ttdeci">ICFGNode * getICFGNode(NodeID id) const</div><div class="ttdoc">Get a ICFG node. </div><div class="ttdef"><b>Definition:</b> <a href="ICFG_8h_source.html#l00087">ICFG.h:87</a></div></div>
299
299
  <div class="ttc" id="SVFBasicTypes_8h_html_a7a295e02c56a93cf9206dd9d3b18dd17"><div class="ttname"><a href="SVFBasicTypes_8h.html#a7a295e02c56a93cf9206dd9d3b18dd17">DPAGBuild</a></div><div class="ttdeci">#define DPAGBuild</div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00162">SVFBasicTypes.h:162</a></div></div>
300
300
  <div class="ttc" id="classSVF_1_1SVFLoop_html_a03c6de676a1d8f99687ea973b9b25d58"><div class="ttname"><a href="classSVF_1_1SVFLoop.html#a03c6de676a1d8f99687ea973b9b25d58">SVF::SVFLoop::addBackICFGEdge</a></div><div class="ttdeci">void addBackICFGEdge(const ICFGEdge *edge)</div><div class="ttdef"><b>Definition:</b> <a href="SVFLoop_8h_source.html#l00121">SVFLoop.h:121</a></div></div>
301
- <div class="ttc" id="classSVF_1_1Options_html_ab7161ca7a809792af82e5aabdfcc3bfb"><div class="ttname"><a href="classSVF_1_1Options.html#ab7161ca7a809792af82e5aabdfcc3bfb">SVF::Options::LoopBound</a></div><div class="ttdeci">static const llvm::cl::opt&lt; unsigned &gt; LoopBound</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00259">Options.h:259</a></div></div>
301
+ <div class="ttc" id="classSVF_1_1Options_html_ab7161ca7a809792af82e5aabdfcc3bfb"><div class="ttname"><a href="classSVF_1_1Options.html#ab7161ca7a809792af82e5aabdfcc3bfb">SVF::Options::LoopBound</a></div><div class="ttdeci">static const llvm::cl::opt&lt; unsigned &gt; LoopBound</div><div class="ttdef"><b>Definition:</b> <a href="Options_8h_source.html#l00261">Options.h:261</a></div></div>
302
302
  <div class="ttc" id="SVFBasicTypes_8h_html_a173ce1b9b505fdadf5613b663749d3b0"><div class="ttname"><a href="SVFBasicTypes_8h.html#a173ce1b9b505fdadf5613b663749d3b0">DBOUT</a></div><div class="ttdeci">#define DBOUT(TYPE, X)</div><div class="ttdoc">LLVM debug macros, define type of your DEBUG model of each pass. </div><div class="ttdef"><b>Definition:</b> <a href="SVFBasicTypes_8h_source.html#l00155">SVFBasicTypes.h:155</a></div></div>
303
303
  </div><!-- fragment -->
304
304
  </div>
@@ -321,7 +321,7 @@ Static Private Attributes</h2></td></tr>
321
321
  </div><div class="memdoc">
322
322
 
323
323
  <p class="definition">Definition at line <a class="el" href="LLVMModule_8cpp_source.html#l00352">352</a> of file <a class="el" href="LLVMModule_8cpp_source.html">LLVMModule.cpp</a>.</p>
324
- <div class="fragment"><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;{</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; std::vector&lt;const Function *&gt; ctor_funcs;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; std::vector&lt;const Function *&gt; dtor_funcs;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> * orgMain = 0;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* mainMod = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; {</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="comment">// Collect ctor and dtor functions</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">for</span> (Module::global_iterator it = mod.global_begin(),</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; eit = mod.global_end();</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; {</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *global = &amp;*it;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">if</span> (global-&gt;getName().equals(<a class="code" href="LLVMModule_8cpp.html#aa18802f2f60ef8030c66a42f20f285af">SVF_GLOBAL_CTORS</a>) &amp;&amp;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; global-&gt;hasInitializer())</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; {</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; ctor_funcs = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">getLLVMGlobalFunctions</a>(global);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; }</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (global-&gt;getName().equals(<a class="code" href="LLVMModule_8cpp.html#a9fd6e28e6ed93f65a20a348ab0646320">SVF_GLOBAL_DTORS</a>) &amp;&amp;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; global-&gt;hasInitializer())</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; {</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; dtor_funcs = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">getLLVMGlobalFunctions</a>(global);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; }</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="comment">// Find main function</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;func : mod)</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; {</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">if</span> (func.getName().equals(<a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>))</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a> <span class="stringliteral">&quot; already defined&quot;</span>);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">if</span>(func.getName().equals(<span class="stringliteral">&quot;main&quot;</span>))</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; orgMain = &amp;func;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; mainMod = &amp;mod;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; }</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">// Only create svf.main when the original main function is found, and also</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="comment">// there are global contructor or destructor functions.</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">if</span> (orgMain &amp;&amp; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>() &gt; 0 &amp;&amp;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; (ctor_funcs.size() &gt; 0 || dtor_funcs.size() &gt; 0))</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; assert(mainMod &amp;&amp; <span class="stringliteral">&quot;Module with main function not found.&quot;</span>);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp; M = *mainMod;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="comment">// char **</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> * i8ptr2 = PointerType::getInt8PtrTy(M.getContext())-&gt;getPointerTo();</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> * i32 = IntegerType::getInt32Ty(M.getContext());</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="comment">// define void @svf.main(i32, i8**, i8**)</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;<span class="preprocessor">#if (LLVM_VERSION_MAJOR &gt;= 9)</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; FunctionCallee svfmainFn = M.getOrInsertFunction(</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>,</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; Type::getVoidTy(M.getContext()),</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; i32,i8ptr2,i8ptr2</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; );</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *svfmain = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&gt;(svfmainFn.getCallee());</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *svfmain = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&gt;(M.getOrInsertFunction(</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>,</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; Type::getVoidTy(M.getContext()),</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; i32,i8ptr2,i8ptr2</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; ));</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; svfmain-&gt;setCallingConv(llvm::CallingConv::C);</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* block = BasicBlock::Create(M.getContext(), <span class="stringliteral">&quot;entry&quot;</span>, svfmain);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <a class="code" href="namespaceSVF.html#a94824519e439aeef1568d415b6f7331c">IRBuilder</a> Builder(block);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="comment">// emit &quot;call void @ctor()&quot;. ctor_funcs is sorted so the functions are</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="comment">// emitted in the order of priority</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp; ctor: ctor_funcs)</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; {</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keyword">auto</span> target = M.getOrInsertFunction(</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; ctor-&gt;getName(),</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; Type::getVoidTy(M.getContext())</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; );</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; Builder.CreateCall(target);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="comment">// main() should be called after all ctor functions and before dtor</span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="comment">// functions.</span></div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; Function::arg_iterator arg_it = svfmain-&gt;arg_begin();</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> * args[] = {arg_it, arg_it + 1, arg_it + 2 };</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordtype">size_t</span> cnt = orgMain-&gt;arg_size();</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; assert(cnt &lt;= 3 &amp;&amp; <span class="stringliteral">&quot;Too many arguments for main()&quot;</span>);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; Builder.CreateCall(orgMain, llvm::ArrayRef&lt;Value*&gt;(args,args + cnt));</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="comment">// emit &quot;call void @dtor()&quot;. dtor_funcs is sorted so the functions are</span></div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="comment">// emitted in the order of priority</span></div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;dtor : dtor_funcs)</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keyword">auto</span> target = M.getOrInsertFunction(</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; dtor-&gt;getName(),</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; Type::getVoidTy(M.getContext())</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; );</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; Builder.CreateCall(target);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="comment">// return;</span></div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; Builder.CreateRetVoid();</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00077">BasicTypes.h:77</a></div></div>
324
+ <div class="fragment"><div class="line"><a name="l00353"></a><span class="lineno"> 353</span>&#160;{</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span>&#160; std::vector&lt;const Function *&gt; ctor_funcs;</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>&#160; std::vector&lt;const Function *&gt; dtor_funcs;</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> * orgMain = 0;</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a>* mainMod = <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span>&#160;</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>&#160; <span class="keywordflow">for</span> (<a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;mod : <a class="code" href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">modules</a>)</div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span>&#160; {</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span>&#160; <span class="comment">// Collect ctor and dtor functions</span></div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>&#160; <span class="keywordflow">for</span> (Module::global_iterator it = mod.global_begin(),</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>&#160; eit = mod.global_end();</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>&#160; it != eit; ++it)</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>&#160; {</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span>&#160; <span class="keyword">const</span> <a class="code" href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">GlobalVariable</a> *global = &amp;*it;</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span>&#160; <span class="keywordflow">if</span> (global-&gt;getName().equals(<a class="code" href="LLVMModule_8cpp.html#aa18802f2f60ef8030c66a42f20f285af">SVF_GLOBAL_CTORS</a>) &amp;&amp;</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span>&#160; global-&gt;hasInitializer())</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>&#160; {</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>&#160; ctor_funcs = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">getLLVMGlobalFunctions</a>(global);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>&#160; }</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>&#160; <span class="keywordflow">else</span> <span class="keywordflow">if</span> (global-&gt;getName().equals(<a class="code" href="LLVMModule_8cpp.html#a9fd6e28e6ed93f65a20a348ab0646320">SVF_GLOBAL_DTORS</a>) &amp;&amp;</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span>&#160; global-&gt;hasInitializer())</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span>&#160; {</div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span>&#160; dtor_funcs = <a class="code" href="classSVF_1_1LLVMModuleSet.html#a0b46a2a5ff2165d17993a071d9cc82c1">getLLVMGlobalFunctions</a>(global);</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span>&#160; }</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>&#160; }</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>&#160;</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>&#160; <span class="comment">// Find main function</span></div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;func : mod)</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>&#160; {</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>&#160; <span class="keywordflow">if</span> (func.getName().equals(<a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>))</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>&#160; assert(<span class="keyword">false</span> &amp;&amp; <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a> <span class="stringliteral">&quot; already defined&quot;</span>);</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span>&#160; <span class="keywordflow">if</span>(func.getName().equals(<span class="stringliteral">&quot;main&quot;</span>))</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span>&#160; {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>&#160; orgMain = &amp;func;</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>&#160; mainMod = &amp;mod;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>&#160; }</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>&#160; }</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>&#160; }</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span>&#160;</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span>&#160; <span class="comment">// Only create svf.main when the original main function is found, and also</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span>&#160; <span class="comment">// there are global contructor or destructor functions.</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span>&#160; <span class="keywordflow">if</span> (orgMain &amp;&amp; <a class="code" href="classSVF_1_1LLVMModuleSet.html#ae265a7f3cc7367d62013e0f15cf3d233">getModuleNum</a>() &gt; 0 &amp;&amp;</div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span>&#160; (ctor_funcs.size() &gt; 0 || dtor_funcs.size() &gt; 0))</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span>&#160; {</div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span>&#160; assert(mainMod &amp;&amp; <span class="stringliteral">&quot;Module with main function not found.&quot;</span>);</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span>&#160; <a class="code" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp; <a class="code" href="PEGGrammar_8txt.html#abd600039647a1e73c88e7161fa6eb989">M</a> = *mainMod;</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>&#160; <span class="comment">// char **</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> * i8ptr2 = PointerType::getInt8PtrTy(M.getContext())-&gt;getPointerTo();</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span>&#160; <a class="code" href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">Type</a> * i32 = IntegerType::getInt32Ty(M.getContext());</div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span>&#160; <span class="comment">// define void @svf.main(i32, i8**, i8**)</span></div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span>&#160;<span class="preprocessor">#if (LLVM_VERSION_MAJOR &gt;= 9)</span></div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span>&#160; FunctionCallee svfmainFn = M.getOrInsertFunction(</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>&#160; <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>,</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>&#160; Type::getVoidTy(M.getContext()),</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span>&#160; i32,i8ptr2,i8ptr2</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span>&#160; );</div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *svfmain = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&gt;(svfmainFn.getCallee());</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>&#160; <a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *svfmain = <a class="code" href="namespaceSVF_1_1SVFUtil.html#a8182be247907420db00837cef9bcfa70">SVFUtil::dyn_cast</a>&lt;<a class="code" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a>&gt;(M.getOrInsertFunction(</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>&#160; <a class="code" href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a>,</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span>&#160; Type::getVoidTy(M.getContext()),</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span>&#160; i32,i8ptr2,i8ptr2</div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span>&#160; ));</div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span>&#160; svfmain-&gt;setCallingConv(llvm::CallingConv::C);</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>&#160; <a class="code" href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">BasicBlock</a>* block = BasicBlock::Create(M.getContext(), <span class="stringliteral">&quot;entry&quot;</span>, svfmain);</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span>&#160; <a class="code" href="namespaceSVF.html#a94824519e439aeef1568d415b6f7331c">IRBuilder</a> Builder(block);</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span>&#160; <span class="comment">// emit &quot;call void @ctor()&quot;. ctor_funcs is sorted so the functions are</span></div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span>&#160; <span class="comment">// emitted in the order of priority</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span>&#160; <span class="keywordflow">for</span>(<span class="keyword">auto</span> &amp; ctor: ctor_funcs)</div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span>&#160; {</div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span>&#160; <span class="keyword">auto</span> target = M.getOrInsertFunction(</div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span>&#160; ctor-&gt;getName(),</div><div class="line"><a name="l00427"></a><span class="lineno"> 427</span>&#160; Type::getVoidTy(M.getContext())</div><div class="line"><a name="l00428"></a><span class="lineno"> 428</span>&#160; );</div><div class="line"><a name="l00429"></a><span class="lineno"> 429</span>&#160; Builder.CreateCall(target);</div><div class="line"><a name="l00430"></a><span class="lineno"> 430</span>&#160; }</div><div class="line"><a name="l00431"></a><span class="lineno"> 431</span>&#160; <span class="comment">// main() should be called after all ctor functions and before dtor</span></div><div class="line"><a name="l00432"></a><span class="lineno"> 432</span>&#160; <span class="comment">// functions.</span></div><div class="line"><a name="l00433"></a><span class="lineno"> 433</span>&#160; Function::arg_iterator arg_it = svfmain-&gt;arg_begin();</div><div class="line"><a name="l00434"></a><span class="lineno"> 434</span>&#160; <a class="code" href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">Value</a> * args[] = {arg_it, arg_it + 1, arg_it + 2 };</div><div class="line"><a name="l00435"></a><span class="lineno"> 435</span>&#160; <span class="keywordtype">size_t</span> cnt = orgMain-&gt;arg_size();</div><div class="line"><a name="l00436"></a><span class="lineno"> 436</span>&#160; assert(cnt &lt;= 3 &amp;&amp; <span class="stringliteral">&quot;Too many arguments for main()&quot;</span>);</div><div class="line"><a name="l00437"></a><span class="lineno"> 437</span>&#160; Builder.CreateCall(orgMain, llvm::ArrayRef&lt;Value*&gt;(args,args + cnt));</div><div class="line"><a name="l00438"></a><span class="lineno"> 438</span>&#160; <span class="comment">// emit &quot;call void @dtor()&quot;. dtor_funcs is sorted so the functions are</span></div><div class="line"><a name="l00439"></a><span class="lineno"> 439</span>&#160; <span class="comment">// emitted in the order of priority</span></div><div class="line"><a name="l00440"></a><span class="lineno"> 440</span>&#160; <span class="keywordflow">for</span> (<span class="keyword">auto</span> &amp;dtor : dtor_funcs)</div><div class="line"><a name="l00441"></a><span class="lineno"> 441</span>&#160; {</div><div class="line"><a name="l00442"></a><span class="lineno"> 442</span>&#160; <span class="keyword">auto</span> target = M.getOrInsertFunction(</div><div class="line"><a name="l00443"></a><span class="lineno"> 443</span>&#160; dtor-&gt;getName(),</div><div class="line"><a name="l00444"></a><span class="lineno"> 444</span>&#160; Type::getVoidTy(M.getContext())</div><div class="line"><a name="l00445"></a><span class="lineno"> 445</span>&#160; );</div><div class="line"><a name="l00446"></a><span class="lineno"> 446</span>&#160; Builder.CreateCall(target);</div><div class="line"><a name="l00447"></a><span class="lineno"> 447</span>&#160; }</div><div class="line"><a name="l00448"></a><span class="lineno"> 448</span>&#160; <span class="comment">// return;</span></div><div class="line"><a name="l00449"></a><span class="lineno"> 449</span>&#160; Builder.CreateRetVoid();</div><div class="line"><a name="l00450"></a><span class="lineno"> 450</span>&#160; }</div><div class="line"><a name="l00451"></a><span class="lineno"> 451</span>&#160;}</div><div class="ttc" id="namespaceSVF_html_aa7a770b5dd5cd0e37d06a1088f252906"><div class="ttname"><a href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">SVF::Module</a></div><div class="ttdeci">llvm::Module Module</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00077">BasicTypes.h:77</a></div></div>
325
325
  <div class="ttc" id="namespaceSVF_html_a23bf614858f168b6ad76e0233cec9965"><div class="ttname"><a href="namespaceSVF.html#a23bf614858f168b6ad76e0233cec9965">SVF::BasicBlock</a></div><div class="ttdeci">llvm::BasicBlock BasicBlock</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00071">BasicTypes.h:71</a></div></div>
326
326
  <div class="ttc" id="namespaceSVF_html_a1d008c0666c145622b81d427be64c52d"><div class="ttname"><a href="namespaceSVF.html#a1d008c0666c145622b81d427be64c52d">SVF::Type</a></div><div class="ttdeci">llvm::Type Type</div><div class="ttdoc">LLVM Basic classes. </div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00065">BasicTypes.h:65</a></div></div>
327
327
  <div class="ttc" id="namespaceSVF_html_a09f5fa3bc44bf53612a085e3a611cc4e"><div class="ttname"><a href="namespaceSVF.html#a09f5fa3bc44bf53612a085e3a611cc4e">SVF::GlobalVariable</a></div><div class="ttdeci">llvm::GlobalVariable GlobalVariable</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00076">BasicTypes.h:76</a></div></div>
@@ -334,6 +334,7 @@ Static Private Attributes</h2></td></tr>
334
334
  <div class="ttc" id="LLVMModule_8cpp_html_a10ab7c7da3a458495d8528b9e90d714b"><div class="ttname"><a href="LLVMModule_8cpp.html#a10ab7c7da3a458495d8528b9e90d714b">SVF_MAIN_FUNC_NAME</a></div><div class="ttdeci">#define SVF_MAIN_FUNC_NAME</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8cpp_source.html#l00067">LLVMModule.cpp:67</a></div></div>
335
335
  <div class="ttc" id="classSVF_1_1LLVMModuleSet_html_acde6292e719c80f93d3d1c344ab442cd"><div class="ttname"><a href="classSVF_1_1LLVMModuleSet.html#acde6292e719c80f93d3d1c344ab442cd">SVF::LLVMModuleSet::modules</a></div><div class="ttdeci">std::vector&lt; std::reference_wrapper&lt; Module &gt; &gt; modules</div><div class="ttdef"><b>Definition:</b> <a href="LLVMModule_8h_source.html#l00055">LLVMModule.h:55</a></div></div>
336
336
  <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&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
337
+ <div class="ttc" id="PEGGrammar_8txt_html_abd600039647a1e73c88e7161fa6eb989"><div class="ttname"><a href="PEGGrammar_8txt.html#abd600039647a1e73c88e7161fa6eb989">M</a></div><div class="ttdeci">V M</div><div class="ttdef"><b>Definition:</b> <a href="PEGGrammar_8txt_source.html#l00010">PEGGrammar.txt:10</a></div></div>
337
338
  <div class="ttc" id="namespaceSVF_html_a90b263fd2f541eca78135078114cabda"><div class="ttname"><a href="namespaceSVF.html#a90b263fd2f541eca78135078114cabda">SVF::Value</a></div><div class="ttdeci">llvm::Value Value</div><div class="ttdef"><b>Definition:</b> <a href="Util_2BasicTypes_8h_source.html#l00072">BasicTypes.h:72</a></div></div>
338
339
  </div><!-- fragment -->
339
340
  </div>
@@ -127,7 +127,7 @@ Public Member Functions</h2></td></tr>
127
127
  </table><table class="memberdecls">
128
128
  <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-methods"></a>
129
129
  Static Public Member Functions</h2></td></tr>
130
- <tr class="memitem:a7cb2fd230ed5839b59f650cc87de192e"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="namespaceSVF.html#ad8794eb3c00de3d3b5c5e43dded3fb42">ScalarEvolution</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1MTA.html#a7cb2fd230ed5839b59f650cc87de192e">getSE</a> (const <a class="el" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *<a class="el" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>)</td></tr>
130
+ <tr class="memitem:a7cb2fd230ed5839b59f650cc87de192e"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="namespaceSVF.html#ad8794eb3c00de3d3b5c5e43dded3fb42">ScalarEvolution</a> *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1MTA.html#a7cb2fd230ed5839b59f650cc87de192e">getSE</a> (const <a class="el" href="namespaceSVF.html#a5faee14fa1dd41447bc73ac365fe33c1">Function</a> *<a class="el" href="PEGGrammar_8txt.html#acc7b4cf736579c4d83be2316d5a9e5f2">F</a>)</td></tr>
131
131
  <tr class="separator:a7cb2fd230ed5839b59f650cc87de192e"><td class="memSeparator" colspan="2">&#160;</td></tr>
132
132
  </table><table class="memberdecls">
133
133
  <tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
@@ -411,7 +411,7 @@ Additional Inherited Members</h2></td></tr>
411
411
  <div class="ttc" id="classSVF_1_1MTAAnnotator_html_ad53ac0cec797f84d3bc14bdb6bab1ab3"><div class="ttname"><a href="classSVF_1_1MTAAnnotator.html#ad53ac0cec797f84d3bc14bdb6bab1ab3">SVF::MTAAnnotator::numOfNonLocalLd</a></div><div class="ttdeci">u32_t numOfNonLocalLd</div><div class="ttdef"><b>Definition:</b> <a href="MTAAnnotator_8h_source.html#l00098">MTAAnnotator.h:98</a></div></div>
412
412
  <div class="ttc" id="classSVF_1_1MTAAnnotator_html_a57df091dbdd4fc947cc5e7aaec123700"><div class="ttname"><a href="classSVF_1_1MTAAnnotator.html#a57df091dbdd4fc947cc5e7aaec123700">SVF::MTAAnnotator::numOfAnnotatedLd</a></div><div class="ttdeci">u32_t numOfAnnotatedLd</div><div class="ttdef"><b>Definition:</b> <a href="MTAAnnotator_8h_source.html#l00104">MTAAnnotator.h:104</a></div></div>
413
413
  <div class="ttc" id="classSVF_1_1PTAStat_html_afdb975520329be0c33cc7bdd51ba7031"><div class="ttname"><a href="classSVF_1_1PTAStat.html#afdb975520329be0c33cc7bdd51ba7031">SVF::PTAStat::PTNumStatMap</a></div><div class="ttdeci">NUMStatMap PTNumStatMap</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8h_source.html#l00148">PTAStat.h:148</a></div></div>
414
- <div class="ttc" id="classSVF_1_1PTAStat_html_aa5f455bfa79743b8e263431593d29bbf"><div class="ttname"><a href="classSVF_1_1PTAStat.html#aa5f455bfa79743b8e263431593d29bbf">SVF::PTAStat::printStat</a></div><div class="ttdeci">virtual void printStat(string str=&quot;&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00292">PTAStat.cpp:292</a></div></div>
414
+ <div class="ttc" id="classSVF_1_1PTAStat_html_aa5f455bfa79743b8e263431593d29bbf"><div class="ttname"><a href="classSVF_1_1PTAStat.html#aa5f455bfa79743b8e263431593d29bbf">SVF::PTAStat::printStat</a></div><div class="ttdeci">virtual void printStat(string str=&quot;&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00293">PTAStat.cpp:293</a></div></div>
415
415
  </div><!-- fragment -->
416
416
  </div>
417
417
  </div>
@@ -480,7 +480,7 @@ Additional Inherited Members</h2></td></tr>
480
480
  <div class="ttc" id="classSVF_1_1SVFModule_html_a709371b13dcf500277f8bc275bdb23c7"><div class="ttname"><a href="classSVF_1_1SVFModule.html#a709371b13dcf500277f8bc275bdb23c7">SVF::SVFModule::iterator</a></div><div class="ttdeci">FunctionSetType::iterator iterator</div><div class="ttdoc">Iterators type def. </div><div class="ttdef"><b>Definition:</b> <a href="SVFModule_8h_source.html#l00051">SVFModule.h:51</a></div></div>
481
481
  <div class="ttc" id="classSVF_1_1PTAStat_html_afdb975520329be0c33cc7bdd51ba7031"><div class="ttname"><a href="classSVF_1_1PTAStat.html#afdb975520329be0c33cc7bdd51ba7031">SVF::PTAStat::PTNumStatMap</a></div><div class="ttdeci">NUMStatMap PTNumStatMap</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8h_source.html#l00148">PTAStat.h:148</a></div></div>
482
482
  <div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a22ef185e767ff76c098e75126c885400"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a22ef185e767ff76c098e75126c885400">SVF::SVFUtil::isExtCall</a></div><div class="ttdeci">bool isExtCall(const SVFFunction *fun)</div><div class="ttdef"><b>Definition:</b> <a href="SVFUtil_8h_source.html#l00358">SVFUtil.h:358</a></div></div>
483
- <div class="ttc" id="classSVF_1_1PTAStat_html_aa5f455bfa79743b8e263431593d29bbf"><div class="ttname"><a href="classSVF_1_1PTAStat.html#aa5f455bfa79743b8e263431593d29bbf">SVF::PTAStat::printStat</a></div><div class="ttdeci">virtual void printStat(string str=&quot;&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00292">PTAStat.cpp:292</a></div></div>
483
+ <div class="ttc" id="classSVF_1_1PTAStat_html_aa5f455bfa79743b8e263431593d29bbf"><div class="ttname"><a href="classSVF_1_1PTAStat.html#aa5f455bfa79743b8e263431593d29bbf">SVF::PTAStat::printStat</a></div><div class="ttdeci">virtual void printStat(string str=&quot;&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00293">PTAStat.cpp:293</a></div></div>
484
484
  </div><!-- fragment -->
485
485
  </div>
486
486
  </div>
@@ -512,7 +512,7 @@ Additional Inherited Members</h2></td></tr>
512
512
  <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 &amp; 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>
513
513
  <div class="ttc" id="classSVF_1_1TCT_html_a1602d02773578bca73dcbd29b95c67d0"><div class="ttname"><a href="classSVF_1_1TCT.html#a1602d02773578bca73dcbd29b95c67d0">SVF::TCT::getThreadCallGraph</a></div><div class="ttdeci">ThreadCallGraph * getThreadCallGraph() const</div><div class="ttdoc">Get TCG. </div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00166">TCT.h:166</a></div></div>
514
514
  <div class="ttc" id="classSVF_1_1PTAStat_html_afdb975520329be0c33cc7bdd51ba7031"><div class="ttname"><a href="classSVF_1_1PTAStat.html#afdb975520329be0c33cc7bdd51ba7031">SVF::PTAStat::PTNumStatMap</a></div><div class="ttdeci">NUMStatMap PTNumStatMap</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8h_source.html#l00148">PTAStat.h:148</a></div></div>
515
- <div class="ttc" id="classSVF_1_1PTAStat_html_aa5f455bfa79743b8e263431593d29bbf"><div class="ttname"><a href="classSVF_1_1PTAStat.html#aa5f455bfa79743b8e263431593d29bbf">SVF::PTAStat::printStat</a></div><div class="ttdeci">virtual void printStat(string str=&quot;&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00292">PTAStat.cpp:292</a></div></div>
515
+ <div class="ttc" id="classSVF_1_1PTAStat_html_aa5f455bfa79743b8e263431593d29bbf"><div class="ttname"><a href="classSVF_1_1PTAStat.html#aa5f455bfa79743b8e263431593d29bbf">SVF::PTAStat::printStat</a></div><div class="ttdeci">virtual void printStat(string str=&quot;&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00293">PTAStat.cpp:293</a></div></div>
516
516
  <div class="ttc" id="classSVF_1_1TCT_html_a49f0672760c29b9be7b6f99a4c82ab7e"><div class="ttname"><a href="classSVF_1_1TCT.html#a49f0672760c29b9be7b6f99a4c82ab7e">SVF::TCT::getMaxCxtSize</a></div><div class="ttdeci">u32_t getMaxCxtSize() const</div><div class="ttdef"><b>Definition:</b> <a href="TCT_8h_source.html#l00227">TCT.h:227</a></div></div>
517
517
  </div><!-- fragment -->
518
518
  </div>
@@ -555,7 +555,7 @@ Additional Inherited Members</h2></td></tr>
555
555
  <div class="ttc" id="classSVF_1_1ThreadCallGraph_html_a50502f398e5eac9c6da3e26ea6052057"><div class="ttname"><a href="classSVF_1_1ThreadCallGraph.html#a50502f398e5eac9c6da3e26ea6052057">SVF::ThreadCallGraph::joinsitesEnd</a></div><div class="ttdeci">CallSiteSet::const_iterator joinsitesEnd() const</div><div class="ttdef"><b>Definition:</b> <a href="ThreadCallGraph_8h_source.html#l00289">ThreadCallGraph.h:289</a></div></div>
556
556
  <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&lt;!is_simple_type&lt; Y &gt;::value, typename cast_retty&lt; X, const Y &gt;::ret_type &gt;::type dyn_cast(const Y &amp;Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00343">Casting.h:343</a></div></div>
557
557
  <div class="ttc" id="classSVF_1_1PTAStat_html_afdb975520329be0c33cc7bdd51ba7031"><div class="ttname"><a href="classSVF_1_1PTAStat.html#afdb975520329be0c33cc7bdd51ba7031">SVF::PTAStat::PTNumStatMap</a></div><div class="ttdeci">NUMStatMap PTNumStatMap</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8h_source.html#l00148">PTAStat.h:148</a></div></div>
558
- <div class="ttc" id="classSVF_1_1PTAStat_html_aa5f455bfa79743b8e263431593d29bbf"><div class="ttname"><a href="classSVF_1_1PTAStat.html#aa5f455bfa79743b8e263431593d29bbf">SVF::PTAStat::printStat</a></div><div class="ttdeci">virtual void printStat(string str=&quot;&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00292">PTAStat.cpp:292</a></div></div>
558
+ <div class="ttc" id="classSVF_1_1PTAStat_html_aa5f455bfa79743b8e263431593d29bbf"><div class="ttname"><a href="classSVF_1_1PTAStat.html#aa5f455bfa79743b8e263431593d29bbf">SVF::PTAStat::printStat</a></div><div class="ttdeci">virtual void printStat(string str=&quot;&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00293">PTAStat.cpp:293</a></div></div>
559
559
  </div><!-- fragment -->
560
560
  </div>
561
561
  </div>
@@ -539,7 +539,7 @@ Additional Inherited Members</h2></td></tr>
539
539
 
540
540
  <p class="definition">Definition at line <a class="el" href="SVFGStat_8cpp_source.html#l00127">127</a> of file <a class="el" href="SVFGStat_8cpp_source.html">SVFGStat.cpp</a>.</p>
541
541
  <div class="fragment"><div class="line"><a name="l00128"></a><span class="lineno"> 128</span>&#160;{</div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span>&#160;</div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span>&#160; <a class="code" href="namespaceSVF_1_1SVFUtil.html#aed0b0b9f035057552a6a82154fd88e61">SVFUtil::outs</a>() &lt;&lt; <span class="stringliteral">&quot;\n****Memory SSA Statistics****\n&quot;</span>;</div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span>&#160; <a class="code" href="classSVF_1_1PTAStat.html#aa5f455bfa79743b8e263431593d29bbf">PTAStat::printStat</a>(str);</div><div class="line"><a name="l00132"></a><span class="lineno"> 132</span>&#160;}</div><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 &amp; 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>
542
- <div class="ttc" id="classSVF_1_1PTAStat_html_aa5f455bfa79743b8e263431593d29bbf"><div class="ttname"><a href="classSVF_1_1PTAStat.html#aa5f455bfa79743b8e263431593d29bbf">SVF::PTAStat::printStat</a></div><div class="ttdeci">virtual void printStat(string str=&quot;&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00292">PTAStat.cpp:292</a></div></div>
542
+ <div class="ttc" id="classSVF_1_1PTAStat_html_aa5f455bfa79743b8e263431593d29bbf"><div class="ttname"><a href="classSVF_1_1PTAStat.html#aa5f455bfa79743b8e263431593d29bbf">SVF::PTAStat::printStat</a></div><div class="ttdeci">virtual void printStat(string str=&quot;&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="PTAStat_8cpp_source.html#l00293">PTAStat.cpp:293</a></div></div>
543
543
  </div><!-- fragment -->
544
544
  </div>
545
545
  </div>
@@ -87,7 +87,7 @@ Public Member Functions</h2></td></tr>
87
87
  <tr class="separator:a2b989707893cd81dd275be6a3b8c79fc"><td class="memSeparator" colspan="2">&#160;</td></tr>
88
88
  <tr class="memitem:a436a61f00b607dd0e5728daad9dd2e93"><td class="memItemLeft" align="right" valign="top">llvm::StringRef&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1MergeFunctionRets.html#a436a61f00b607dd0e5728daad9dd2e93">getPassName</a> () const</td></tr>
89
89
  <tr class="separator:a436a61f00b607dd0e5728daad9dd2e93"><td class="memSeparator" colspan="2">&#160;</td></tr>
90
- <tr class="memitem:a8fe74477a43f80104fb3461d006ad392"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1MergeFunctionRets.html#a8fe74477a43f80104fb3461d006ad392">runOnModule</a> (<a class="el" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;M)</td></tr>
90
+ <tr class="memitem:a8fe74477a43f80104fb3461d006ad392"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1MergeFunctionRets.html#a8fe74477a43f80104fb3461d006ad392">runOnModule</a> (<a class="el" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;<a class="el" href="PEGGrammar_8txt.html#abd600039647a1e73c88e7161fa6eb989">M</a>)</td></tr>
91
91
  <tr class="separator:a8fe74477a43f80104fb3461d006ad392"><td class="memSeparator" colspan="2">&#160;</td></tr>
92
92
  <tr class="memitem:a8c04750179ee48d283c5db4d84b3eca1"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classSVF_1_1MergeFunctionRets.html#a8c04750179ee48d283c5db4d84b3eca1">UnifyFunctionExit</a> (<a class="el" href="namespaceSVF.html#aa7a770b5dd5cd0e37d06a1088f252906">Module</a> &amp;module)</td></tr>
93
93
  <tr class="separator:a8c04750179ee48d283c5db4d84b3eca1"><td class="memSeparator" colspan="2">&#160;</td></tr>
@@ -217,7 +217,8 @@ Static Public Attributes</h2></td></tr>
217
217
  </div><div class="memdoc">
218
218
 
219
219
  <p class="definition">Definition at line <a class="el" href="BreakConstantExpr_8h_source.html#l00068">68</a> of file <a class="el" href="BreakConstantExpr_8h_source.html">BreakConstantExpr.h</a>.</p>
220
- <div class="fragment"><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="classSVF_1_1MergeFunctionRets.html#a8c04750179ee48d283c5db4d84b3eca1">UnifyFunctionExit</a>(M);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div><div class="ttc" id="classSVF_1_1MergeFunctionRets_html_a8c04750179ee48d283c5db4d84b3eca1"><div class="ttname"><a href="classSVF_1_1MergeFunctionRets.html#a8c04750179ee48d283c5db4d84b3eca1">SVF::MergeFunctionRets::UnifyFunctionExit</a></div><div class="ttdeci">void UnifyFunctionExit(Module &amp;module)</div><div class="ttdef"><b>Definition:</b> <a href="BreakConstantExpr_8h_source.html#l00073">BreakConstantExpr.h:73</a></div></div>
220
+ <div class="fragment"><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160; {</div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160; <a class="code" href="classSVF_1_1MergeFunctionRets.html#a8c04750179ee48d283c5db4d84b3eca1">UnifyFunctionExit</a>(<a class="code" href="PEGGrammar_8txt.html#abd600039647a1e73c88e7161fa6eb989">M</a>);</div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160; <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160; }</div><div class="ttc" id="PEGGrammar_8txt_html_abd600039647a1e73c88e7161fa6eb989"><div class="ttname"><a href="PEGGrammar_8txt.html#abd600039647a1e73c88e7161fa6eb989">M</a></div><div class="ttdeci">V M</div><div class="ttdef"><b>Definition:</b> <a href="PEGGrammar_8txt_source.html#l00010">PEGGrammar.txt:10</a></div></div>
221
+ <div class="ttc" id="classSVF_1_1MergeFunctionRets_html_a8c04750179ee48d283c5db4d84b3eca1"><div class="ttname"><a href="classSVF_1_1MergeFunctionRets.html#a8c04750179ee48d283c5db4d84b3eca1">SVF::MergeFunctionRets::UnifyFunctionExit</a></div><div class="ttdeci">void UnifyFunctionExit(Module &amp;module)</div><div class="ttdef"><b>Definition:</b> <a href="BreakConstantExpr_8h_source.html#l00073">BreakConstantExpr.h:73</a></div></div>
221
222
  </div><!-- fragment -->
222
223
  </div>
223
224
  </div>
@@ -136,12 +136,14 @@ $(function() {
136
136
  <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1Options.html#a5c051cf6a93a87a07aa1d31e302a2877">ModelConsts</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
137
137
  <tr><td class="entry"><a class="el" href="classSVF_1_1Options.html#a4ac0e6b77fc9ccc18b269268b3cd046d">MSSAFun</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
138
138
  <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1Options.html#a2537be131132830c63d408133619a065">NodeAllocStrat</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
139
- <tr><td class="entry"><a class="el" href="classSVF_1_1Options.html#a2780c16611375631cd48bf9487f9e0bf">OCGDotGraph</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
140
- <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1Options.html#a08c25694f8f9e31eb8b116ad58c1c078">Options</a>(void)=delete</td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"></td></tr>
141
- <tr><td class="entry"><a class="el" href="classSVF_1_1Options.html#a7704ff30e6fc5043313adf5c655bcd4a">OPTSVFG</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
142
- <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1Options.html#a3a20311c732fb391332ae0ee1cb450a0">PAGDotGraph</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
143
- <tr><td class="entry"><a class="el" href="classSVF_1_1Options.html#a98df022c5da54ea30b3f0ce008d3ca80">PAGPrint</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
144
- <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1Options.html#a1211da4c36f1fcc65235891f31d87038">PASelected</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
139
+ <tr><td class="entry"><a class="el" href="classSVF_1_1Options.html#a59afe4356aae2133beb4819c013d3fbf">NullDummyNode</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
140
+ <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1Options.html#a2780c16611375631cd48bf9487f9e0bf">OCGDotGraph</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
141
+ <tr><td class="entry"><a class="el" href="classSVF_1_1Options.html#a08c25694f8f9e31eb8b116ad58c1c078">Options</a>(void)=delete</td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"></td></tr>
142
+ <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1Options.html#a7704ff30e6fc5043313adf5c655bcd4a">OPTSVFG</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
143
+ <tr><td class="entry"><a class="el" href="classSVF_1_1Options.html#a3a20311c732fb391332ae0ee1cb450a0">PAGDotGraph</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
144
+ <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1Options.html#a98df022c5da54ea30b3f0ce008d3ca80">PAGPrint</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
145
+ <tr><td class="entry"><a class="el" href="classSVF_1_1Options.html#a1211da4c36f1fcc65235891f31d87038">PASelected</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
146
+ <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1Options.html#a7d566af0280a0c2457947fd426c81c81">PEGTransfer</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
145
147
  <tr><td class="entry"><a class="el" href="classSVF_1_1Options.html#a75a38fff97f7f18f3945c953cabc168b">PlainMappingFs</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
146
148
  <tr class="even"><td class="entry"><a class="el" href="classSVF_1_1Options.html#af34d8a738db4f40addc1de930e79654f">PredictPtOcc</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>
147
149
  <tr><td class="entry"><a class="el" href="classSVF_1_1Options.html#a1b1d1ad6b3a6c48a9fa07161b582c7fe">PrintAliases</a></td><td class="entry"><a class="el" href="classSVF_1_1Options.html">SVF::Options</a></td><td class="entry"><span class="mlabel">static</span></td></tr>