svf-tools 1.0.561 → 1.0.562

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.
@@ -66,12 +66,12 @@ $(function() {
66
66
  <div class="title">ExtAPI.h</div> </div>
67
67
  </div><!--header-->
68
68
  <div class="contents">
69
- <a href="ExtAPI_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- ExtAPI.h -- External functions -----------------------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * ExtAPI.h</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: July 1, 2022</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Shuangxiang Kan</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#ifndef __ExtAPI_H</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define __ExtAPI_H</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Util_2BasicTypes_8h.html">Util/BasicTypes.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="cJSON_8h.html">Util/cJSON.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="config_8h.html">Util/config.h</a>&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="ExtAPI_8h.html#ad9bef4304f41728bb3edf259c6b67668"> 39</a></span>&#160;<span class="preprocessor">#define EXTAPI_JSON_PATH &quot;/include/Util/ExtAPI.json&quot;</span></div><div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="ExtAPI_8h.html#a6dec9d5ce6e777757e97065129d96874"> 40</a></span>&#160;<span class="preprocessor">#define JSON_OPT_OVERWRITE &quot;overwrite_app_function&quot;</span></div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="ExtAPI_8h.html#a8af07ec3fec2ac9636dfb81bb7a8961e"> 41</a></span>&#160;<span class="preprocessor">#define JSON_OPT_FUNCTIONTYPE &quot;type&quot;</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">** Specifications in ExtAPI.json</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment">*** [1] Overview of the Specification Language</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">The specification language of external functions is based on the JSON format. And every function defined by the Specification Language is an object that represents the specification rules. These Specification Language objects for functions contain four parts:</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">1. the name of the function,</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">2. the switch that controls whether the specification rules defined in the ExtAPI.json overwrite the functions defined in the user code,</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment">3. the type of the function,</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment">4. the operations conducted by the function.</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment">*** [2] Overwriting the user-defined functions</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment">The switch *overwrite_app_function* controls whether the specification rules defined in the ExtAPI.json overwrite the functions defined in the user code (e.g., CPP files). When the switch *overwrite_app_function* is set to a value of 1, SVF will use the specification rules in ExtAPI.json to conduct the analysis and ignore the user-defined functions in the input CPP/bc files.</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment">overwrite_app_function = 0: Analyze the user-defined functions.</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment">overwrite_app_function = 1: Use specifications in ExtAPI.json to overwrite the user-defined functions.</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">*** [3] Function types</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">Function type represents the properties of the function.</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment">For example,</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment">&quot;EFT_ALLOC&quot; represents if this external function allocates a new object and assigns it to one of its arguments,</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment">For the selection of function type and a more detailed explanation, please refer to the definition of enum *extType* in ExtAPI.h.</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment">*** [4] Function operations</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment">Function operations indicate the relationships between input and output,</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment">mainly between function parameters or between parameters and return values after the execution.</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">For example,</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">&quot;copy&quot;: [&quot;A2&quot;, &quot;L&quot;] indicates that after this external function is executed, the value of the 2nd parameter is copied into the return value.</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment">For the selection of function type and a more detailed explanation, please refer to the definition of enum *extf_t* in ExtAPI.h.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment">For operands of function operation, e.g., &quot;A2&quot;, &quot;L&quot;, there are the following options:</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">&quot;A&quot;: represents a parameter;</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment">&quot;N&quot;: represents a number;</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">&quot;R&quot;: represents a reference;</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment">&quot;L&quot;: represents a return value;</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment">&quot;V&quot;: represents a dummy node;</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">Among them, a parameter may have multiple forms because there may be various parameters, and the parameter may be a reference or complex structure,</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment">Here we use regular expressions &quot;(AN)(R|RN)^*&quot; to represent parameters, for example,</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment">&quot;A0&quot;: represents the 1st parameter;</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment">&quot;A2R&quot;: represents that the 3rd parameter is a reference;</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment">&quot;A1R2&quot;: represents the 3rd substructure of the 2nd parameter &quot;A1R&quot;, where &quot;A1R&quot; is a complex structure;</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment">&quot;A2R3R&quot;: represents the 4th substructure of the 3rd parameter &quot;A2R&quot; is a reference, where &quot;A2R&quot; is a complex structure;</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment">** Specification format:</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment">&quot;functionName&quot;: {</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment">&quot;type&quot;: &quot;functional type&quot;,</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment">&quot;overwrite_app_function:&quot; 0/1,</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment">&quot;function operation_1&quot;: [ operand_1, operand_2, ... , operand_n],</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment">&quot;function operation_2&quot;: [ operand_1, operand_2, ... , operand_n],</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment">...</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment">&quot;function operation_n&quot;: [ operand_1, operand_2, ... , operand_n]</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment">}</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html"> 102</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1ExtAPI.html">ExtAPI</a></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;{</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">// External Function types</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="comment">// Assume a call in the form LHS= F(arg0, arg1, arg2, arg3).</span></div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199ca"> 108</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199ca">extType</a></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa87c4ba17ac3567a0673d6516995e06ef"> 110</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa87c4ba17ac3567a0673d6516995e06ef">EFT_NOOP</a> = 0, <span class="comment">// no effect on pointers</span></div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac57ade96d1d18b9f2d4d36bc6928c5c4"> 111</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac57ade96d1d18b9f2d4d36bc6928c5c4">EFT_ALLOC</a>, <span class="comment">// returns a ptr to a newly allocated object</span></div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1f23e7b8cdd103943f515e807bf36b1c"> 112</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1f23e7b8cdd103943f515e807bf36b1c">EFT_REALLOC</a>, <span class="comment">// like L_A0 if arg0 is a non-null ptr, else ALLOC</span></div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa9b98279d1926e4ebfb237a43536c7b73"> 113</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa9b98279d1926e4ebfb237a43536c7b73">EFT_FREE</a>, <span class="comment">// free memory arg0 and all pointers passing into free function</span></div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa66bcd64afcfaf09c49d2f445cd112f1d"> 114</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa66bcd64afcfaf09c49d2f445cd112f1d">EFT_FREE_MULTILEVEL</a>, <span class="comment">// any argument with 2-level pointer passing too a free wrapper function e.g., XFree(void**) which frees memory for void* and void**</span></div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8782293305260b1500a09b473439d3b0"> 115</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8782293305260b1500a09b473439d3b0">EFT_NOSTRUCT_ALLOC</a>, <span class="comment">// like ALLOC but only allocates non-struct data</span></div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa94f514e925fdb422632840ca44343af0"> 116</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa94f514e925fdb422632840ca44343af0">EFT_STAT</a>, <span class="comment">// retval points to an unknown static var X</span></div><div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa515c2184a7461fc1788a514432a7ec22"> 117</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa515c2184a7461fc1788a514432a7ec22">EFT_STAT2</a>, <span class="comment">// ret -&gt; X -&gt; Y (X, Y - external static vars)</span></div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6363df51947cab85ec4ae04b4e056f96"> 118</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6363df51947cab85ec4ae04b4e056f96">EFT_L_A0</a>, <span class="comment">// copies arg0, arg1, or arg2 into LHS</span></div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaec63c85b24133af679d60dda42ab44ab"> 119</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaec63c85b24133af679d60dda42ab44ab">EFT_L_A1</a>,</div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac078d0307bec384b6df3da561045ff7d"> 120</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac078d0307bec384b6df3da561045ff7d">EFT_L_A2</a>,</div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1e119ad93f66dbbf8014917febad843c"> 121</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1e119ad93f66dbbf8014917febad843c">EFT_L_A8</a>,</div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaa0cecd43037de38c00ec6017b03bbb3f"> 122</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaa0cecd43037de38c00ec6017b03bbb3f">EFT_L_A0__A0R_A1</a>, <span class="comment">// stores arg1 into *arg0 and returns arg0 (currently only for memset)</span></div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa54aa3d7051aab7d65ee1154538bfbb48"> 123</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa54aa3d7051aab7d65ee1154538bfbb48">EFT_L_A0__A0R_A1R</a>, <span class="comment">// copies the data that arg1 points to into the location</span></div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa80ea82d0181911894919c181eb1f4e35"> 124</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa80ea82d0181911894919c181eb1f4e35">EFT_L_A1__FunPtr</a>, <span class="comment">// obtain the address of a symbol based on the arg1 (char*) and parse a function to LHS (e.g., void *dlsym(void *handle, char *funname);)</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">// arg0 points to; note that several fields may be</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">// copied at once if both point to structs.</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="comment">// Returns arg0.</span></div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae7e7e0702f480304f4afefa96f6c5002"> 128</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae7e7e0702f480304f4afefa96f6c5002">EFT_A1R_A0R</a>, <span class="comment">// copies *arg0 into *arg1, with non-ptr return</span></div><div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4ba81144ee1a70785fbf83ca5f0d4573"> 129</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4ba81144ee1a70785fbf83ca5f0d4573">EFT_A3R_A1R_NS</a>, <span class="comment">// copies *arg1 into *arg3 (non-struct copy only)</span></div><div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4c1361546aa103c26b11b0b89dc8d482"> 130</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4c1361546aa103c26b11b0b89dc8d482">EFT_A1R_A0</a>, <span class="comment">// stores arg0 into *arg1</span></div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caab8814290c2362cd812a7783802eb209a"> 131</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caab8814290c2362cd812a7783802eb209a">EFT_A2R_A1</a>, <span class="comment">// stores arg1 into *arg2</span></div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac631e9cc3bb430a9c12d0c004d2ca97d"> 132</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac631e9cc3bb430a9c12d0c004d2ca97d">EFT_A4R_A1</a>, <span class="comment">// stores arg1 into *arg4</span></div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae8423cc29f4de0225e30de6982e6a3a4"> 133</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae8423cc29f4de0225e30de6982e6a3a4">EFT_L_A0__A2R_A0</a>, <span class="comment">// stores arg0 into *arg2 and returns it</span></div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaac3eaaf0865895ce144c035e429166be"> 134</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaac3eaaf0865895ce144c035e429166be">EFT_L_A0__A1_A0</a>, <span class="comment">// store arg1 into arg0&#39;s base and returns arg0</span></div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa035cf8a39c192608ec0e91d48e479899"> 135</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa035cf8a39c192608ec0e91d48e479899">EFT_A0R_NEW</a>, <span class="comment">// stores a pointer to an allocated object in *arg0</span></div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4353ad2b443e7f7ce2151869eed9c097"> 136</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4353ad2b443e7f7ce2151869eed9c097">EFT_A1R_NEW</a>, <span class="comment">// as above, into *arg1, etc.</span></div><div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa27b8dfa0742daa17c3e1a520d03dbd14"> 137</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa27b8dfa0742daa17c3e1a520d03dbd14">EFT_A2R_NEW</a>,</div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafe69efc20e29f95e0e333d1a462576a2"> 138</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafe69efc20e29f95e0e333d1a462576a2">EFT_A4R_NEW</a>,</div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8b59b6966952577361826d09b95b76be"> 139</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8b59b6966952577361826d09b95b76be">EFT_A11R_NEW</a>,</div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafedd2f66497ed9404b8b3cb1d16a3f0b"> 140</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafedd2f66497ed9404b8b3cb1d16a3f0b">EFT_STD_RB_TREE_INSERT_AND_REBALANCE</a>, <span class="comment">// Some complex effects</span></div><div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa31d0b620d3344c68ecfd71c9faf1d598"> 141</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa31d0b620d3344c68ecfd71c9faf1d598">EFT_STD_RB_TREE_INCREMENT</a>, <span class="comment">// Some complex effects</span></div><div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaed5f4c75cc5016c61f441abf06a2bf21"> 142</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaed5f4c75cc5016c61f441abf06a2bf21">EFT_STD_LIST_HOOK</a>, <span class="comment">// Some complex effects</span></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"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae3e90095a170aa15d9b6c305469e32af"> 144</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae3e90095a170aa15d9b6c305469e32af">CPP_EFT_A0R_A1</a>, <span class="comment">// stores arg1 into *arg0</span></div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa7f75d2265448acf50cd59151a1241054"> 145</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa7f75d2265448acf50cd59151a1241054">CPP_EFT_A0R_A1R</a>, <span class="comment">// copies *arg1 into *arg0</span></div><div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa3eb7d75552ce138f55c840b6635d32ed"> 146</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa3eb7d75552ce138f55c840b6635d32ed">CPP_EFT_A1R</a>, <span class="comment">// load arg1</span></div><div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa9d9ec33eb5ecf285ccf2aa575bcba31a"> 147</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa9d9ec33eb5ecf285ccf2aa575bcba31a">EFT_CXA_BEGIN_CATCH</a>, <span class="comment">//__cxa_begin_catch</span></div><div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6c9b3a6987d311c61156dab96e5ad3b9"> 148</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6c9b3a6987d311c61156dab96e5ad3b9">CPP_EFT_DYNAMIC_CAST</a>, <span class="comment">// dynamic_cast</span></div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa7ad779bd3527f7cd220ca74c736fd2df"> 149</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa7ad779bd3527f7cd220ca74c736fd2df">EFT_NULL</a> <span class="comment">// not found in the list</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; };</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a95ac45d2367b3d3124d5d98958e74cc5"> 154</a></span>&#160; std::map&lt;std::string, extType&gt; <a class="code" href="classSVF_1_1ExtAPI.html#a95ac45d2367b3d3124d5d98958e74cc5">type_pair</a> =</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {<span class="stringliteral">&quot;EFT_NOOP&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa87c4ba17ac3567a0673d6516995e06ef">EFT_NOOP</a>},</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; {<span class="stringliteral">&quot;EFT_ALLOC&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac57ade96d1d18b9f2d4d36bc6928c5c4">EFT_ALLOC</a>},</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {<span class="stringliteral">&quot;EFT_REALLOC&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1f23e7b8cdd103943f515e807bf36b1c">EFT_REALLOC</a>},</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {<span class="stringliteral">&quot;EFT_FREE&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa9b98279d1926e4ebfb237a43536c7b73">EFT_FREE</a>},</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; {<span class="stringliteral">&quot;EFT_FREE_MULTILEVEL&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa66bcd64afcfaf09c49d2f445cd112f1d">EFT_FREE_MULTILEVEL</a>},</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {<span class="stringliteral">&quot;EFT_NOSTRUCT_ALLOC&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8782293305260b1500a09b473439d3b0">EFT_NOSTRUCT_ALLOC</a>},</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; {<span class="stringliteral">&quot;EFT_STAT&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa94f514e925fdb422632840ca44343af0">EFT_STAT</a>},</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; {<span class="stringliteral">&quot;EFT_STAT2&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa515c2184a7461fc1788a514432a7ec22">EFT_STAT2</a>},</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; {<span class="stringliteral">&quot;EFT_L_A0&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6363df51947cab85ec4ae04b4e056f96">EFT_L_A0</a>},</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {<span class="stringliteral">&quot;EFT_L_A1&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaec63c85b24133af679d60dda42ab44ab">EFT_L_A1</a>},</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; {<span class="stringliteral">&quot;EFT_L_A2&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac078d0307bec384b6df3da561045ff7d">EFT_L_A2</a>},</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {<span class="stringliteral">&quot;EFT_L_A8&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1e119ad93f66dbbf8014917febad843c">EFT_L_A8</a>},</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; {<span class="stringliteral">&quot;EFT_L_A0__A0R_A1&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaa0cecd43037de38c00ec6017b03bbb3f">EFT_L_A0__A0R_A1</a>},</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {<span class="stringliteral">&quot;EFT_L_A0__A0R_A1R&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa54aa3d7051aab7d65ee1154538bfbb48">EFT_L_A0__A0R_A1R</a>},</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; {<span class="stringliteral">&quot;EFT_L_A1__FunPtr&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa80ea82d0181911894919c181eb1f4e35">EFT_L_A1__FunPtr</a>},</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {<span class="stringliteral">&quot;EFT_A1R_A0R&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae7e7e0702f480304f4afefa96f6c5002">EFT_A1R_A0R</a>},</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; {<span class="stringliteral">&quot;EFT_A3R_A1R_NS&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4ba81144ee1a70785fbf83ca5f0d4573">EFT_A3R_A1R_NS</a>},</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; {<span class="stringliteral">&quot;EFT_A1R_A0&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4c1361546aa103c26b11b0b89dc8d482">EFT_A1R_A0</a>},</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {<span class="stringliteral">&quot;EFT_A2R_A1&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caab8814290c2362cd812a7783802eb209a">EFT_A2R_A1</a>},</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {<span class="stringliteral">&quot;EFT_A4R_A1&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac631e9cc3bb430a9c12d0c004d2ca97d">EFT_A4R_A1</a>},</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; {<span class="stringliteral">&quot;EFT_L_A0__A2R_A0&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae8423cc29f4de0225e30de6982e6a3a4">EFT_L_A0__A2R_A0</a>},</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; {<span class="stringliteral">&quot;EFT_L_A0__A1_A0&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaac3eaaf0865895ce144c035e429166be">EFT_L_A0__A1_A0</a>},</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {<span class="stringliteral">&quot;EFT_A0R_NEW&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa035cf8a39c192608ec0e91d48e479899">EFT_A0R_NEW</a>},</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {<span class="stringliteral">&quot;EFT_A1R_NEW&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4353ad2b443e7f7ce2151869eed9c097">EFT_A1R_NEW</a>},</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; {<span class="stringliteral">&quot;EFT_A2R_NEW&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa27b8dfa0742daa17c3e1a520d03dbd14">EFT_A2R_NEW</a>},</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {<span class="stringliteral">&quot;EFT_A4R_NEW&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafe69efc20e29f95e0e333d1a462576a2">EFT_A4R_NEW</a>},</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {<span class="stringliteral">&quot;EFT_A11R_NEW&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8b59b6966952577361826d09b95b76be">EFT_A11R_NEW</a>},</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {<span class="stringliteral">&quot;EFT_STD_RB_TREE_INSERT_AND_REBALANCE&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafedd2f66497ed9404b8b3cb1d16a3f0b">EFT_STD_RB_TREE_INSERT_AND_REBALANCE</a>},</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {<span class="stringliteral">&quot;EFT_STD_RB_TREE_INCREMENT&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa31d0b620d3344c68ecfd71c9faf1d598">EFT_STD_RB_TREE_INCREMENT</a>},</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {<span class="stringliteral">&quot;EFT_STD_LIST_HOOK&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaed5f4c75cc5016c61f441abf06a2bf21">EFT_STD_LIST_HOOK</a>},</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {<span class="stringliteral">&quot;CPP_EFT_A0R_A1R&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa7f75d2265448acf50cd59151a1241054">CPP_EFT_A0R_A1R</a>},</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {<span class="stringliteral">&quot;CPP_EFT_A1R&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa3eb7d75552ce138f55c840b6635d32ed">CPP_EFT_A1R</a>},</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {<span class="stringliteral">&quot;EFT_CXA_BEGIN_CATCH&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa9d9ec33eb5ecf285ccf2aa575bcba31a">EFT_CXA_BEGIN_CATCH</a>},</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {<span class="stringliteral">&quot;CPP_EFT_DYNAMIC_CAST&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6c9b3a6987d311c61156dab96e5ad3b9">CPP_EFT_DYNAMIC_CAST</a>},</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; {<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa7ad779bd3527f7cd220ca74c736fd2df">EFT_NULL</a>}</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; };</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a552feab663622681db231d5b48f00d75"> 193</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1ExtAPI.html">ExtAPI</a> *<a class="code" href="classSVF_1_1ExtAPI.html#a552feab663622681db231d5b48f00d75">extOp</a>;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">// Store specifications of external functions in ExtAPI.json file</span></div><div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a835fda8fb934d1cd040d1b3fb2dd0270"> 196</a></span>&#160; <span class="keyword">static</span> <a class="code" href="structcJSON.html">cJSON</a> *<a class="code" href="classSVF_1_1ExtAPI.html#a835fda8fb934d1cd040d1b3fb2dd0270">root</a>;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#ab793be4b6f8f0a025599e76f5df2a4eb">ExtAPI</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html"> 202</a></span>&#160; <span class="keyword">class </span><a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html">Operation</a></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; {</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#a453f37464f5c6261e22e845948f36c94"> 205</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a453f37464f5c6261e22e845948f36c94">Operation</a>() {};</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#a6fe4cc69b9181548940cbc67f7b6b315"> 207</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a6fe4cc69b9181548940cbc67f7b6b315">Operation</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> opn, std::vector&lt;std::string&gt; varstr) : <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9">op</a>(opn), <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce">operandStr</a>(varstr) {};</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#a2344036fc095c47072ee4c1fb4955745"> 209</a></span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a2344036fc095c47072ee4c1fb4955745">getOperator</a>()</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9">op</a>;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#ae2b5f412aae6d3aa1c769579b377636a"> 214</a></span>&#160; std::vector&lt;std::string&gt; <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#ae2b5f412aae6d3aa1c769579b377636a">getOperandStr</a>()</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; {</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce">operandStr</a>;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#ad3deaa2aafb248b575738b5e1dbbe7ce"> 219</a></span>&#160; std::vector&lt;NodeID&gt; &amp;<a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#ad3deaa2aafb248b575738b5e1dbbe7ce">getOperands</a>()</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#ae3539c507b6284b849c136418507e72b">operands</a>;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#a901c5524219bee81a00414d7c92c26f8"> 224</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a901c5524219bee81a00414d7c92c26f8">setOperands</a>(std::vector&lt;NodeID&gt; vars)</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#ae3539c507b6284b849c136418507e72b">operands</a> = vars;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00230"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9"> 230</a></span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9">op</a>;</div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce"> 231</a></span>&#160; std::vector&lt;std::string&gt; <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce">operandStr</a>;</div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#ae3539c507b6284b849c136418507e72b"> 232</a></span>&#160; std::vector&lt;NodeID&gt; <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#ae3539c507b6284b849c136418507e72b">operands</a>;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; };</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1ExtAPI.html">ExtAPI</a> *<a class="code" href="classSVF_1_1ExtAPI.html#a02380d22fd6021ebce1e54723d695c99">getExtAPI</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &amp; = <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ExtAPI.html#abe3e0e2500532acfc01cee7e2ce1cd90">destory</a>();</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="comment">// Add an entry with the specified fields to the ExtAPI, which will be reflected immediately by further ExtAPI queries</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ExtAPI.html#a945fb815af09e4f7b22c637effd64d8b">add_entry</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* funName, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199ca">extType</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, <span class="keywordtype">bool</span> overwrite_app_function);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// Get numeric index of the argument in external function</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1ExtAPI.html#a848ec5976f48f84274bb6a295160fb04">getArgPos</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="comment">// return value &gt;= 0 is an argument node</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// return value = -1 is an inst node</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="comment">// return value = -2 is a Dummy node</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// return value = -3 is an object node</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// return value = -4 is an offset</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// return value = -5 is an illegal operand format</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> <a class="code" href="classSVF_1_1ExtAPI.html#a6fdedabaf1adb051a562a261b86c9cf6">getNodeIDType</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="comment">// Get the corresponding name in ext_t, e.g. &quot;EXT_ADDR&quot; in {&quot;addr&quot;, EXT_ADDR},</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1ExtAPI.html#a1930d622cd47f7fd875e1964b65ec506">get_opName</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; s);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="comment">// opposite for extType</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; <a class="code" href="classSVF_1_1ExtAPI.html#aa98b80dc86d0549183ec69b44b391bd7">extType_toString</a>(<a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199ca">extType</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// Get external function name, e.g &quot;memcpy&quot;</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1ExtAPI.html#ac3e34227968d6a2835d63b1052da3c1a">get_name</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="comment">// Get arguments of the operation, e.g. [&quot;A1R&quot;, &quot;A0&quot;, &quot;A2&quot;]</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; std::vector&lt;std::string&gt; <a class="code" href="classSVF_1_1ExtAPI.html#a906a3728bbcfb7a43ac0938ffcb3df23">get_opArgs</a>(<span class="keyword">const</span> <a class="code" href="structcJSON.html">cJSON</a> *value);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// Get specifications of external functions in ExtAPI.json file</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="structcJSON.html">cJSON</a> *<a class="code" href="classSVF_1_1ExtAPI.html#ab61fbc80acc89e26df2b451cbab81246">get_FunJson</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &amp;funName);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="comment">// Get all operations of an extern function</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; std::vector&lt;Operation&gt; <a class="code" href="classSVF_1_1ExtAPI.html#a9b15082f3c118da731705bba3924507d">getAllOperations</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funName);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="comment">// Get property of the operation, e.g. &quot;EFT_A1R_A0R&quot;</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199ca">extType</a> <a class="code" href="classSVF_1_1ExtAPI.html#a411a034f872afcf62ce5456e408ccf41">get_type</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a> *callee);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199ca">extType</a> <a class="code" href="classSVF_1_1ExtAPI.html#a411a034f872afcf62ce5456e408ccf41">get_type</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; funName);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="comment">// Get priority of he function, return value</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// 0: Apply user-defined functions</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="comment">// 1: Apply function specification in ExtAPI.json</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1ExtAPI.html#a5ef7edb1664ab87f00418e7808d00258">isOverwrittenAppFunction</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a> *callee);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="comment">// Does (F) have a static var X (unavailable to us) that its return points to?</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#ae20ea24cce02de87d89a2d0b773a2357">has_static</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="comment">// Assuming hasStatic(F), does (F) have a second static Y where X -&gt; Y?</span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#ad3eefa086aa514e4d245a975ea3d45b5">has_static2</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="comment">// Does (F) allocate a new object and return it?</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a0d865c55681a3b4a9bb965fd0200029d">is_alloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="comment">// Does (F) allocate a new object and assign it to one of its arguments?</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a158e7da51d45b746e067dc40e912c477">is_arg_alloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="comment">// Get the position of argument which holds the new object</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> <a class="code" href="classSVF_1_1ExtAPI.html#a68939c789d0530151a4e79e79317531a">get_alloc_arg_pos</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="comment">// Does (F) allocate only non-struct objects?</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a934e293bd4050cb1ab5c19e8ad391ebe">no_struct_alloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// Does (F) not free/release any memory?</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#aeef27a358ba1815760c893bd2d2335b1">is_dealloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="comment">// Does (F) not do anything with the known pointers?</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a82ebf71c5214f891f17e842e0b133b4f">is_noop</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="comment">// Does (F) reallocate a new object?</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#ac6d6bdc51a6b75d6d5741cb751559fe4">is_realloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">// Does (F) have the same return type(pointer or nonpointer) and same number of arguments</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a5e8b816a3eb894f6b09403852df0d01b">is_sameSignature</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="comment">// Should (F) be considered &quot;external&quot; (either not defined in the program</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="comment">// or a user-defined version of a known alloc or no-op)?</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a21f45c806672255c044d39490990eae2">is_ext</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;};</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="classSVF_1_1ExtAPI_html_a82ebf71c5214f891f17e842e0b133b4f"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a82ebf71c5214f891f17e842e0b133b4f">SVF::ExtAPI::is_noop</a></div><div class="ttdeci">bool is_noop(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00463">ExtAPI.cpp:463</a></div></div>
69
+ <a href="ExtAPI_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span>&#160;<span class="comment">//===- ExtAPI.h -- External functions -----------------------------------------//</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment">// SVF: Static Value-Flow Analysis</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment">// Copyright (C) &lt;2013-2017&gt; &lt;Yulei Sui&gt;</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span>&#160;</div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment">// This program is free software: you can redistribute it and/or modify</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment">// it under the terms of the GNU General Public License as published by</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment">// the Free Software Foundation, either version 3 of the License, or</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment">// (at your option) any later version.</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment">// This program is distributed in the hope that it will be useful,</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment">// but WITHOUT ANY WARRANTY; without even the implied warranty of</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment">// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment">// GNU General Public License for more details.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;</div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment">// You should have received a copy of the GNU General Public License</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment">// along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;.</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * ExtAPI.h</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> * Created on: July 1, 2022</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> * Author: Shuangxiang Kan</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="preprocessor">#ifndef __ExtAPI_H</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="preprocessor">#define __ExtAPI_H</span></div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span>&#160;</div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="Util_2BasicTypes_8h.html">Util/BasicTypes.h</a>&quot;</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="cJSON_8h.html">Util/cJSON.h</a>&quot;</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="config_8h.html">Util/config.h</a>&quot;</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div><div class="line"><a name="l00038"></a><span class="lineno"> 38</span>&#160;</div><div class="line"><a name="l00039"></a><span class="lineno"><a class="line" href="ExtAPI_8h.html#ad9bef4304f41728bb3edf259c6b67668"> 39</a></span>&#160;<span class="preprocessor">#define EXTAPI_JSON_PATH &quot;/include/Util/ExtAPI.json&quot;</span></div><div class="line"><a name="l00040"></a><span class="lineno"><a class="line" href="ExtAPI_8h.html#a6dec9d5ce6e777757e97065129d96874"> 40</a></span>&#160;<span class="preprocessor">#define JSON_OPT_OVERWRITE &quot;overwrite_app_function&quot;</span></div><div class="line"><a name="l00041"></a><span class="lineno"><a class="line" href="ExtAPI_8h.html#a8af07ec3fec2ac9636dfb81bb7a8961e"> 41</a></span>&#160;<span class="preprocessor">#define JSON_OPT_FUNCTIONTYPE &quot;type&quot;</span></div><div class="line"><a name="l00042"></a><span class="lineno"> 42</span>&#160;</div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span>&#160;{</div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span>&#160;</div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;<span class="comment">** Specifications in ExtAPI.json</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment">*** [1] Overview of the Specification Language</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">The specification language of external functions is based on the JSON format. And every function defined by the Specification Language is an object that represents the specification rules. These Specification Language objects for functions contain four parts:</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment">1. the name of the function,</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">2. the switch that controls whether the specification rules defined in the ExtAPI.json overwrite the functions defined in the user code,</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span>&#160;<span class="comment">3. the type of the function,</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment">4. the operations conducted by the function.</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment">*** [2] Overwriting the user-defined functions</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment">The switch *overwrite_app_function* controls whether the specification rules defined in the ExtAPI.json overwrite the functions defined in the user code (e.g., CPP files). When the switch *overwrite_app_function* is set to a value of 1, SVF will use the specification rules in ExtAPI.json to conduct the analysis and ignore the user-defined functions in the input CPP/bc files.</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment">overwrite_app_function = 0: Analyze the user-defined functions.</span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment">overwrite_app_function = 1: Use specifications in ExtAPI.json to overwrite the user-defined functions.</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">*** [3] Function types</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span>&#160;<span class="comment">Function type represents the properties of the function.</span></div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment">For example,</span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment">&quot;EFT_ALLOC&quot; represents if this external function allocates a new object and assigns it to one of its arguments,</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment">For the selection of function type and a more detailed explanation, please refer to the definition of enum *extType* in ExtAPI.h.</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</span>&#160;<span class="comment">*** [4] Function operations</span></div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span>&#160;<span class="comment">Function operations indicate the relationships between input and output,</span></div><div class="line"><a name="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment">mainly between function parameters or between parameters and return values after the execution.</span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">For example,</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">&quot;copy&quot;: [&quot;A2&quot;, &quot;L&quot;] indicates that after this external function is executed, the value of the 2nd parameter is copied into the return value.</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span>&#160;<span class="comment">For the selection of function type and a more detailed explanation, please refer to the definition of enum *extf_t* in ExtAPI.h.</span></div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span>&#160;<span class="comment">For operands of function operation, e.g., &quot;A2&quot;, &quot;L&quot;, there are the following options:</span></div><div class="line"><a name="l00076"></a><span class="lineno"> 76</span>&#160;<span class="comment">&quot;A&quot;: represents a parameter;</span></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment">&quot;N&quot;: represents a number;</span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</span>&#160;<span class="comment">&quot;R&quot;: represents a reference;</span></div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment">&quot;L&quot;: represents a return value;</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment">&quot;V&quot;: represents a dummy node;</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">Among them, a parameter may have multiple forms because there may be various parameters, and the parameter may be a reference or complex structure,</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment">Here we use regular expressions &quot;(AN)(R|RN)^*&quot; to represent parameters, for example,</span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</span>&#160;<span class="comment">&quot;A0&quot;: represents the 1st parameter;</span></div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment">&quot;A2R&quot;: represents that the 3rd parameter is a reference;</span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span>&#160;<span class="comment">&quot;A1R2&quot;: represents the 3rd substructure of the 2nd parameter &quot;A1R&quot;, where &quot;A1R&quot; is a complex structure;</span></div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment">&quot;A2R3R&quot;: represents the 4th substructure of the 3rd parameter &quot;A2R&quot; is a reference, where &quot;A2R&quot; is a complex structure;</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span>&#160;<span class="comment">** Specification format:</span></div><div class="line"><a name="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment">&quot;functionName&quot;: {</span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment">&quot;type&quot;: &quot;functional type&quot;,</span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment">&quot;overwrite_app_function:&quot; 0/1,</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment">&quot;function operation_1&quot;: [ operand_1, operand_2, ... , operand_n],</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment">&quot;function operation_2&quot;: [ operand_1, operand_2, ... , operand_n],</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment">...</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment">&quot;function operation_n&quot;: [ operand_1, operand_2, ... , operand_n]</span></div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span>&#160;<span class="comment">}</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span>&#160;</div><div class="line"><a name="l00102"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html"> 102</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1ExtAPI.html">ExtAPI</a></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;{</div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00105"></a><span class="lineno"> 105</span>&#160;</div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span>&#160; <span class="comment">// External Function types</span></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160; <span class="comment">// Assume a call in the form LHS= F(arg0, arg1, arg2, arg3).</span></div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199ca"> 108</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199ca">extType</a></div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>&#160; {</div><div class="line"><a name="l00110"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa87c4ba17ac3567a0673d6516995e06ef"> 110</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa87c4ba17ac3567a0673d6516995e06ef">EFT_NOOP</a> = 0, <span class="comment">// no effect on pointers</span></div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac57ade96d1d18b9f2d4d36bc6928c5c4"> 111</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac57ade96d1d18b9f2d4d36bc6928c5c4">EFT_ALLOC</a>, <span class="comment">// returns a ptr to a newly allocated object</span></div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1f23e7b8cdd103943f515e807bf36b1c"> 112</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1f23e7b8cdd103943f515e807bf36b1c">EFT_REALLOC</a>, <span class="comment">// like L_A0 if arg0 is a non-null ptr, else ALLOC</span></div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa9b98279d1926e4ebfb237a43536c7b73"> 113</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa9b98279d1926e4ebfb237a43536c7b73">EFT_FREE</a>, <span class="comment">// free memory arg0 and all pointers passing into free function</span></div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa66bcd64afcfaf09c49d2f445cd112f1d"> 114</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa66bcd64afcfaf09c49d2f445cd112f1d">EFT_FREE_MULTILEVEL</a>, <span class="comment">// any argument with 2-level pointer passing too a free wrapper function e.g., XFree(void**) which frees memory for void* and void**</span></div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8782293305260b1500a09b473439d3b0"> 115</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8782293305260b1500a09b473439d3b0">EFT_NOSTRUCT_ALLOC</a>, <span class="comment">// like ALLOC but only allocates non-struct data</span></div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa94f514e925fdb422632840ca44343af0"> 116</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa94f514e925fdb422632840ca44343af0">EFT_STAT</a>, <span class="comment">// retval points to an unknown static var X</span></div><div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa515c2184a7461fc1788a514432a7ec22"> 117</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa515c2184a7461fc1788a514432a7ec22">EFT_STAT2</a>, <span class="comment">// ret -&gt; X -&gt; Y (X, Y - external static vars)</span></div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6363df51947cab85ec4ae04b4e056f96"> 118</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6363df51947cab85ec4ae04b4e056f96">EFT_L_A0</a>, <span class="comment">// copies arg0, arg1, or arg2 into LHS</span></div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaec63c85b24133af679d60dda42ab44ab"> 119</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaec63c85b24133af679d60dda42ab44ab">EFT_L_A1</a>,</div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac078d0307bec384b6df3da561045ff7d"> 120</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac078d0307bec384b6df3da561045ff7d">EFT_L_A2</a>,</div><div class="line"><a name="l00121"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1e119ad93f66dbbf8014917febad843c"> 121</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1e119ad93f66dbbf8014917febad843c">EFT_L_A8</a>,</div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaa0cecd43037de38c00ec6017b03bbb3f"> 122</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaa0cecd43037de38c00ec6017b03bbb3f">EFT_L_A0__A0R_A1</a>, <span class="comment">// stores arg1 into *arg0 and returns arg0 (currently only for memset)</span></div><div class="line"><a name="l00123"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa54aa3d7051aab7d65ee1154538bfbb48"> 123</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa54aa3d7051aab7d65ee1154538bfbb48">EFT_L_A0__A0R_A1R</a>, <span class="comment">// copies the data that arg1 points to into the location</span></div><div class="line"><a name="l00124"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa80ea82d0181911894919c181eb1f4e35"> 124</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa80ea82d0181911894919c181eb1f4e35">EFT_L_A1__FunPtr</a>, <span class="comment">// obtain the address of a symbol based on the arg1 (char*) and parse a function to LHS (e.g., void *dlsym(void *handle, char *funname);)</span></div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>&#160; <span class="comment">// arg0 points to; note that several fields may be</span></div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span>&#160; <span class="comment">// copied at once if both point to structs.</span></div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span>&#160; <span class="comment">// Returns arg0.</span></div><div class="line"><a name="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae7e7e0702f480304f4afefa96f6c5002"> 128</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae7e7e0702f480304f4afefa96f6c5002">EFT_A1R_A0R</a>, <span class="comment">// copies *arg0 into *arg1, with non-ptr return</span></div><div class="line"><a name="l00129"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4ba81144ee1a70785fbf83ca5f0d4573"> 129</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4ba81144ee1a70785fbf83ca5f0d4573">EFT_A3R_A1R_NS</a>, <span class="comment">// copies *arg1 into *arg3 (non-struct copy only)</span></div><div class="line"><a name="l00130"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4c1361546aa103c26b11b0b89dc8d482"> 130</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4c1361546aa103c26b11b0b89dc8d482">EFT_A1R_A0</a>, <span class="comment">// stores arg0 into *arg1</span></div><div class="line"><a name="l00131"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caab8814290c2362cd812a7783802eb209a"> 131</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caab8814290c2362cd812a7783802eb209a">EFT_A2R_A1</a>, <span class="comment">// stores arg1 into *arg2</span></div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac631e9cc3bb430a9c12d0c004d2ca97d"> 132</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac631e9cc3bb430a9c12d0c004d2ca97d">EFT_A4R_A1</a>, <span class="comment">// stores arg1 into *arg4</span></div><div class="line"><a name="l00133"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae8423cc29f4de0225e30de6982e6a3a4"> 133</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae8423cc29f4de0225e30de6982e6a3a4">EFT_L_A0__A2R_A0</a>, <span class="comment">// stores arg0 into *arg2 and returns it</span></div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaac3eaaf0865895ce144c035e429166be"> 134</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaac3eaaf0865895ce144c035e429166be">EFT_L_A0__A1_A0</a>, <span class="comment">// store arg1 into arg0&#39;s base and returns arg0</span></div><div class="line"><a name="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa035cf8a39c192608ec0e91d48e479899"> 135</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa035cf8a39c192608ec0e91d48e479899">EFT_A0R_NEW</a>, <span class="comment">// stores a pointer to an allocated object in *arg0</span></div><div class="line"><a name="l00136"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4353ad2b443e7f7ce2151869eed9c097"> 136</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4353ad2b443e7f7ce2151869eed9c097">EFT_A1R_NEW</a>, <span class="comment">// as above, into *arg1, etc.</span></div><div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa27b8dfa0742daa17c3e1a520d03dbd14"> 137</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa27b8dfa0742daa17c3e1a520d03dbd14">EFT_A2R_NEW</a>,</div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafe69efc20e29f95e0e333d1a462576a2"> 138</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafe69efc20e29f95e0e333d1a462576a2">EFT_A4R_NEW</a>,</div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8b59b6966952577361826d09b95b76be"> 139</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8b59b6966952577361826d09b95b76be">EFT_A11R_NEW</a>,</div><div class="line"><a name="l00140"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafedd2f66497ed9404b8b3cb1d16a3f0b"> 140</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafedd2f66497ed9404b8b3cb1d16a3f0b">EFT_STD_RB_TREE_INSERT_AND_REBALANCE</a>, <span class="comment">// Some complex effects</span></div><div class="line"><a name="l00141"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa31d0b620d3344c68ecfd71c9faf1d598"> 141</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa31d0b620d3344c68ecfd71c9faf1d598">EFT_STD_RB_TREE_INCREMENT</a>, <span class="comment">// Some complex effects</span></div><div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaed5f4c75cc5016c61f441abf06a2bf21"> 142</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaed5f4c75cc5016c61f441abf06a2bf21">EFT_STD_LIST_HOOK</a>, <span class="comment">// Some complex effects</span></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"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae3e90095a170aa15d9b6c305469e32af"> 144</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae3e90095a170aa15d9b6c305469e32af">CPP_EFT_A0R_A1</a>, <span class="comment">// stores arg1 into *arg0</span></div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa7f75d2265448acf50cd59151a1241054"> 145</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa7f75d2265448acf50cd59151a1241054">CPP_EFT_A0R_A1R</a>, <span class="comment">// copies *arg1 into *arg0</span></div><div class="line"><a name="l00146"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa3eb7d75552ce138f55c840b6635d32ed"> 146</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa3eb7d75552ce138f55c840b6635d32ed">CPP_EFT_A1R</a>, <span class="comment">// load arg1</span></div><div class="line"><a name="l00147"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa9d9ec33eb5ecf285ccf2aa575bcba31a"> 147</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa9d9ec33eb5ecf285ccf2aa575bcba31a">EFT_CXA_BEGIN_CATCH</a>, <span class="comment">//__cxa_begin_catch</span></div><div class="line"><a name="l00148"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6c9b3a6987d311c61156dab96e5ad3b9"> 148</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6c9b3a6987d311c61156dab96e5ad3b9">CPP_EFT_DYNAMIC_CAST</a>, <span class="comment">// dynamic_cast</span></div><div class="line"><a name="l00149"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa7ad779bd3527f7cd220ca74c736fd2df"> 149</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa7ad779bd3527f7cd220ca74c736fd2df">EFT_NULL</a> <span class="comment">// not found in the list</span></div><div class="line"><a name="l00150"></a><span class="lineno"> 150</span>&#160; };</div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span>&#160;</div><div class="line"><a name="l00152"></a><span class="lineno"> 152</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>&#160;</div><div class="line"><a name="l00154"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a95ac45d2367b3d3124d5d98958e74cc5"> 154</a></span>&#160; std::map&lt;std::string, extType&gt; <a class="code" href="classSVF_1_1ExtAPI.html#a95ac45d2367b3d3124d5d98958e74cc5">type_pair</a> =</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>&#160; {</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span>&#160; {<span class="stringliteral">&quot;EFT_NOOP&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa87c4ba17ac3567a0673d6516995e06ef">EFT_NOOP</a>},</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span>&#160; {<span class="stringliteral">&quot;EFT_ALLOC&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac57ade96d1d18b9f2d4d36bc6928c5c4">EFT_ALLOC</a>},</div><div class="line"><a name="l00158"></a><span class="lineno"> 158</span>&#160; {<span class="stringliteral">&quot;EFT_REALLOC&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1f23e7b8cdd103943f515e807bf36b1c">EFT_REALLOC</a>},</div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span>&#160; {<span class="stringliteral">&quot;EFT_FREE&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa9b98279d1926e4ebfb237a43536c7b73">EFT_FREE</a>},</div><div class="line"><a name="l00160"></a><span class="lineno"> 160</span>&#160; {<span class="stringliteral">&quot;EFT_FREE_MULTILEVEL&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa66bcd64afcfaf09c49d2f445cd112f1d">EFT_FREE_MULTILEVEL</a>},</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>&#160; {<span class="stringliteral">&quot;EFT_NOSTRUCT_ALLOC&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8782293305260b1500a09b473439d3b0">EFT_NOSTRUCT_ALLOC</a>},</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>&#160; {<span class="stringliteral">&quot;EFT_STAT&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa94f514e925fdb422632840ca44343af0">EFT_STAT</a>},</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>&#160; {<span class="stringliteral">&quot;EFT_STAT2&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa515c2184a7461fc1788a514432a7ec22">EFT_STAT2</a>},</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span>&#160; {<span class="stringliteral">&quot;EFT_L_A0&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6363df51947cab85ec4ae04b4e056f96">EFT_L_A0</a>},</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span>&#160; {<span class="stringliteral">&quot;EFT_L_A1&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaec63c85b24133af679d60dda42ab44ab">EFT_L_A1</a>},</div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span>&#160; {<span class="stringliteral">&quot;EFT_L_A2&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac078d0307bec384b6df3da561045ff7d">EFT_L_A2</a>},</div><div class="line"><a name="l00167"></a><span class="lineno"> 167</span>&#160; {<span class="stringliteral">&quot;EFT_L_A8&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1e119ad93f66dbbf8014917febad843c">EFT_L_A8</a>},</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160; {<span class="stringliteral">&quot;EFT_L_A0__A0R_A1&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaa0cecd43037de38c00ec6017b03bbb3f">EFT_L_A0__A0R_A1</a>},</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160; {<span class="stringliteral">&quot;EFT_L_A0__A0R_A1R&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa54aa3d7051aab7d65ee1154538bfbb48">EFT_L_A0__A0R_A1R</a>},</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>&#160; {<span class="stringliteral">&quot;EFT_L_A1__FunPtr&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa80ea82d0181911894919c181eb1f4e35">EFT_L_A1__FunPtr</a>},</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {<span class="stringliteral">&quot;EFT_A1R_A0R&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae7e7e0702f480304f4afefa96f6c5002">EFT_A1R_A0R</a>},</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; {<span class="stringliteral">&quot;EFT_A3R_A1R_NS&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4ba81144ee1a70785fbf83ca5f0d4573">EFT_A3R_A1R_NS</a>},</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; {<span class="stringliteral">&quot;EFT_A1R_A0&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4c1361546aa103c26b11b0b89dc8d482">EFT_A1R_A0</a>},</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {<span class="stringliteral">&quot;EFT_A2R_A1&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caab8814290c2362cd812a7783802eb209a">EFT_A2R_A1</a>},</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {<span class="stringliteral">&quot;EFT_A4R_A1&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac631e9cc3bb430a9c12d0c004d2ca97d">EFT_A4R_A1</a>},</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; {<span class="stringliteral">&quot;EFT_L_A0__A2R_A0&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae8423cc29f4de0225e30de6982e6a3a4">EFT_L_A0__A2R_A0</a>},</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; {<span class="stringliteral">&quot;EFT_L_A0__A1_A0&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaac3eaaf0865895ce144c035e429166be">EFT_L_A0__A1_A0</a>},</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {<span class="stringliteral">&quot;EFT_A0R_NEW&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa035cf8a39c192608ec0e91d48e479899">EFT_A0R_NEW</a>},</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {<span class="stringliteral">&quot;EFT_A1R_NEW&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4353ad2b443e7f7ce2151869eed9c097">EFT_A1R_NEW</a>},</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; {<span class="stringliteral">&quot;EFT_A2R_NEW&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa27b8dfa0742daa17c3e1a520d03dbd14">EFT_A2R_NEW</a>},</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; {<span class="stringliteral">&quot;EFT_A4R_NEW&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafe69efc20e29f95e0e333d1a462576a2">EFT_A4R_NEW</a>},</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160; {<span class="stringliteral">&quot;EFT_A11R_NEW&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8b59b6966952577361826d09b95b76be">EFT_A11R_NEW</a>},</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span>&#160; {<span class="stringliteral">&quot;EFT_STD_RB_TREE_INSERT_AND_REBALANCE&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafedd2f66497ed9404b8b3cb1d16a3f0b">EFT_STD_RB_TREE_INSERT_AND_REBALANCE</a>},</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span>&#160; {<span class="stringliteral">&quot;EFT_STD_RB_TREE_INCREMENT&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa31d0b620d3344c68ecfd71c9faf1d598">EFT_STD_RB_TREE_INCREMENT</a>},</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</span>&#160; {<span class="stringliteral">&quot;EFT_STD_LIST_HOOK&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaed5f4c75cc5016c61f441abf06a2bf21">EFT_STD_LIST_HOOK</a>},</div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span>&#160; {<span class="stringliteral">&quot;CPP_EFT_A0R_A1R&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa7f75d2265448acf50cd59151a1241054">CPP_EFT_A0R_A1R</a>},</div><div class="line"><a name="l00187"></a><span class="lineno"> 187</span>&#160; {<span class="stringliteral">&quot;CPP_EFT_A1R&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa3eb7d75552ce138f55c840b6635d32ed">CPP_EFT_A1R</a>},</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>&#160; {<span class="stringliteral">&quot;EFT_CXA_BEGIN_CATCH&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa9d9ec33eb5ecf285ccf2aa575bcba31a">EFT_CXA_BEGIN_CATCH</a>},</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>&#160; {<span class="stringliteral">&quot;CPP_EFT_DYNAMIC_CAST&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6c9b3a6987d311c61156dab96e5ad3b9">CPP_EFT_DYNAMIC_CAST</a>},</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>&#160; {<span class="stringliteral">&quot;&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa7ad779bd3527f7cd220ca74c736fd2df">EFT_NULL</a>}</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>&#160; };</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span>&#160;</div><div class="line"><a name="l00193"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a552feab663622681db231d5b48f00d75"> 193</a></span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1ExtAPI.html">ExtAPI</a> *<a class="code" href="classSVF_1_1ExtAPI.html#a552feab663622681db231d5b48f00d75">extOp</a>;</div><div class="line"><a name="l00194"></a><span class="lineno"> 194</span>&#160;</div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span>&#160; <span class="comment">// Store specifications of external functions in ExtAPI.json file</span></div><div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a835fda8fb934d1cd040d1b3fb2dd0270"> 196</a></span>&#160; <span class="keyword">static</span> <a class="code" href="structcJSON.html">cJSON</a> *<a class="code" href="classSVF_1_1ExtAPI.html#a835fda8fb934d1cd040d1b3fb2dd0270">root</a>;</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>&#160;</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#ab793be4b6f8f0a025599e76f5df2a4eb">ExtAPI</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>&#160;</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html"> 202</a></span>&#160; <span class="keyword">class </span><a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html">Operation</a></div><div class="line"><a name="l00203"></a><span class="lineno"> 203</span>&#160; {</div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span>&#160; <span class="keyword">public</span>:</div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#a453f37464f5c6261e22e845948f36c94"> 205</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a453f37464f5c6261e22e845948f36c94">Operation</a>() {};</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>&#160;</div><div class="line"><a name="l00207"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#a6fe4cc69b9181548940cbc67f7b6b315"> 207</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a6fe4cc69b9181548940cbc67f7b6b315">Operation</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> opn, std::vector&lt;std::string&gt; varstr) : <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9">op</a>(opn), <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce">operandStr</a>(varstr) {};</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>&#160;</div><div class="line"><a name="l00209"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#a2344036fc095c47072ee4c1fb4955745"> 209</a></span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a2344036fc095c47072ee4c1fb4955745">getOperator</a>()</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span>&#160; {</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9">op</a>;</div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span>&#160; }</div><div class="line"><a name="l00213"></a><span class="lineno"> 213</span>&#160;</div><div class="line"><a name="l00214"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#ae2b5f412aae6d3aa1c769579b377636a"> 214</a></span>&#160; std::vector&lt;std::string&gt; <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#ae2b5f412aae6d3aa1c769579b377636a">getOperandStr</a>()</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>&#160; {</div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce">operandStr</a>;</div><div class="line"><a name="l00217"></a><span class="lineno"> 217</span>&#160; }</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#ad3deaa2aafb248b575738b5e1dbbe7ce"> 219</a></span>&#160; std::vector&lt;NodeID&gt; &amp;<a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#ad3deaa2aafb248b575738b5e1dbbe7ce">getOperands</a>()</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>&#160; {</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160; <span class="keywordflow">return</span> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#ae3539c507b6284b849c136418507e72b">operands</a>;</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>&#160; }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#a901c5524219bee81a00414d7c92c26f8"> 224</a></span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a901c5524219bee81a00414d7c92c26f8">setOperands</a>(std::vector&lt;NodeID&gt; vars)</div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span>&#160; {</div><div class="line"><a name="l00226"></a><span class="lineno"> 226</span>&#160; <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#ae3539c507b6284b849c136418507e72b">operands</a> = vars;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160; }</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>&#160;</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160; <span class="keyword">private</span>:</div><div class="line"><a name="l00230"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9"> 230</a></span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9">op</a>;</div><div class="line"><a name="l00231"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce"> 231</a></span>&#160; std::vector&lt;std::string&gt; <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce">operandStr</a>;</div><div class="line"><a name="l00232"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI_1_1Operation.html#ae3539c507b6284b849c136418507e72b"> 232</a></span>&#160; std::vector&lt;NodeID&gt; <a class="code" href="classSVF_1_1ExtAPI_1_1Operation.html#ae3539c507b6284b849c136418507e72b">operands</a>;</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span>&#160; };</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160; <span class="keyword">static</span> <a class="code" href="classSVF_1_1ExtAPI.html">ExtAPI</a> *<a class="code" href="classSVF_1_1ExtAPI.html#a02380d22fd6021ebce1e54723d695c99">getExtAPI</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &amp; = <span class="stringliteral">&quot;&quot;</span>);</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160;</div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="keyword">static</span> <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ExtAPI.html#abe3e0e2500532acfc01cee7e2ce1cd90">destory</a>();</div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span>&#160; <span class="comment">// Add an entry with the specified fields to the ExtAPI, which will be reflected immediately by further ExtAPI queries</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span>&#160; <span class="keywordtype">void</span> <a class="code" href="classSVF_1_1ExtAPI.html#a945fb815af09e4f7b22c637effd64d8b">add_entry</a>(<span class="keyword">const</span> <span class="keywordtype">char</span>* funName, <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199ca">extType</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>, <span class="keywordtype">bool</span> overwrite_app_function);</div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span>&#160;</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span>&#160; <span class="comment">// Get numeric index of the argument in external function</span></div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1ExtAPI.html#a848ec5976f48f84274bb6a295160fb04">getArgPos</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s);</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160;</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160; <span class="comment">// return value &gt;= 0 is an argument node</span></div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// return value = -1 is an inst node</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span>&#160; <span class="comment">// return value = -2 is a Dummy node</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span>&#160; <span class="comment">// return value = -3 is an object node</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// return value = -4 is an offset</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// return value = -5 is an illegal operand format</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> <a class="code" href="classSVF_1_1ExtAPI.html#a6fdedabaf1adb051a562a261b86c9cf6">getNodeIDType</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span>&#160;</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span>&#160; <span class="comment">// Get the corresponding name in ext_t, e.g. &quot;EXT_ADDR&quot; in {&quot;addr&quot;, EXT_ADDR},</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1ExtAPI.html#a1930d622cd47f7fd875e1964b65ec506">get_opName</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; s);</div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span>&#160; <span class="comment">// opposite for extType</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span>&#160; <span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; <a class="code" href="classSVF_1_1ExtAPI.html#aa98b80dc86d0549183ec69b44b391bd7">extType_toString</a>(<a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199ca">extType</a> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a>);</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span>&#160;</div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span>&#160; <span class="comment">// Get external function name, e.g &quot;memcpy&quot;</span></div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span>&#160; <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> <a class="code" href="classSVF_1_1ExtAPI.html#ac3e34227968d6a2835d63b1052da3c1a">get_name</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160;</div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span>&#160; <span class="comment">// Get arguments of the operation, e.g. [&quot;A1R&quot;, &quot;A0&quot;, &quot;A2&quot;]</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span>&#160; std::vector&lt;std::string&gt; <a class="code" href="classSVF_1_1ExtAPI.html#a906a3728bbcfb7a43ac0938ffcb3df23">get_opArgs</a>(<span class="keyword">const</span> <a class="code" href="structcJSON.html">cJSON</a> *value);</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span>&#160;</div><div class="line"><a name="l00263"></a><span class="lineno"> 263</span>&#160; <span class="comment">// Get specifications of external functions in ExtAPI.json file</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span>&#160; <a class="code" href="structcJSON.html">cJSON</a> *<a class="code" href="classSVF_1_1ExtAPI.html#ab61fbc80acc89e26df2b451cbab81246">get_FunJson</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> &amp;funName);</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160;</div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span>&#160; <span class="comment">// Get all operations of an extern function</span></div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span>&#160; std::vector&lt;Operation&gt; <a class="code" href="classSVF_1_1ExtAPI.html#a9b15082f3c118da731705bba3924507d">getAllOperations</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funName);</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160;</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span>&#160; <span class="comment">// Get property of the operation, e.g. &quot;EFT_A1R_A0R&quot;</span></div><div class="line"><a name="l00270"></a><span class="lineno"> 270</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199ca">extType</a> <a class="code" href="classSVF_1_1ExtAPI.html#a411a034f872afcf62ce5456e408ccf41">get_type</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a> *callee);</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199ca">extType</a> <a class="code" href="classSVF_1_1ExtAPI.html#a411a034f872afcf62ce5456e408ccf41">get_type</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a>&amp; funName);</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span>&#160;</div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span>&#160; <span class="comment">// Get priority of he function, return value</span></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// 0: Apply user-defined functions</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</span>&#160; <span class="comment">// 1: Apply function specification in ExtAPI.json</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span>&#160; <a class="code" href="namespaceSVF.html#ad42bff8d0a7d60a085aa32d10f4955af">u32_t</a> <a class="code" href="classSVF_1_1ExtAPI.html#a5ef7edb1664ab87f00418e7808d00258">isOverwrittenAppFunction</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVF::SVFFunction</a> *callee);</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160;</div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span>&#160; <span class="comment">// Does (F) have a static var X (unavailable to us) that its return points to?</span></div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#ae20ea24cce02de87d89a2d0b773a2357">has_static</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span>&#160;</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span>&#160; <span class="comment">// Assuming hasStatic(F), does (F) have a second static Y where X -&gt; Y?</span></div><div class="line"><a name="l00282"></a><span class="lineno"> 282</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#ad3eefa086aa514e4d245a975ea3d45b5">has_static2</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span>&#160;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span>&#160; <span class="comment">// Does (F) allocate a new object and return it?</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a0d865c55681a3b4a9bb965fd0200029d">is_alloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</span>&#160;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span>&#160; <span class="comment">// Does (F) allocate a new object and assign it to one of its arguments?</span></div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a158e7da51d45b746e067dc40e912c477">is_arg_alloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span>&#160;</div><div class="line"><a name="l00290"></a><span class="lineno"> 290</span>&#160; <span class="comment">// Get the position of argument which holds the new object</span></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span>&#160; <a class="code" href="namespaceSVF.html#a9b707002523ece2ac54ca893ee9a2d4e">s32_t</a> <a class="code" href="classSVF_1_1ExtAPI.html#a68939c789d0530151a4e79e79317531a">get_alloc_arg_pos</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>&#160;</div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>&#160; <span class="comment">// Does (F) allocate only non-struct objects?</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a934e293bd4050cb1ab5c19e8ad391ebe">no_struct_alloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span>&#160;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span>&#160; <span class="comment">// Does (F) not free/release any memory?</span></div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#aeef27a358ba1815760c893bd2d2335b1">is_dealloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span>&#160;</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>&#160; <span class="comment">// Does (F) not do anything with the known pointers?</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a82ebf71c5214f891f17e842e0b133b4f">is_noop</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>&#160;</div><div class="line"><a name="l00302"></a><span class="lineno"> 302</span>&#160; <span class="comment">// Does (F) reallocate a new object?</span></div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#ac6d6bdc51a6b75d6d5741cb751559fe4">is_realloc</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span>&#160;</div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span>&#160; <span class="comment">// Does (F) have the same return type(pointer or nonpointer) and same number of arguments</span></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a5e8b816a3eb894f6b09403852df0d01b">is_sameSignature</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span>&#160;</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>&#160; <span class="comment">// Should (F) be considered &quot;external&quot; (either not defined in the program</span></div><div class="line"><a name="l00309"></a><span class="lineno"> 309</span>&#160; <span class="comment">// or a user-defined version of a known alloc or no-op)?</span></div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span>&#160; <span class="keywordtype">bool</span> <a class="code" href="classSVF_1_1ExtAPI.html#a21f45c806672255c044d39490990eae2">is_ext</a>(<span class="keyword">const</span> <a class="code" href="classSVF_1_1SVFFunction.html">SVFFunction</a> *<a class="code" href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a>);</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span>&#160;};</div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span>&#160;} <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span>&#160;</div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span>&#160;<span class="preprocessor">#endif</span></div><div class="ttc" id="classSVF_1_1ExtAPI_html_a82ebf71c5214f891f17e842e0b133b4f"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a82ebf71c5214f891f17e842e0b133b4f">SVF::ExtAPI::is_noop</a></div><div class="ttdeci">bool is_noop(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00505">ExtAPI.cpp:505</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caa94f514e925fdb422632840ca44343af0"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa94f514e925fdb422632840ca44343af0">SVF::ExtAPI::EFT_STAT</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00116">ExtAPI.h:116</a></div></div>
71
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a5e8b816a3eb894f6b09403852df0d01b"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5e8b816a3eb894f6b09403852df0d01b">SVF::ExtAPI::is_sameSignature</a></div><div class="ttdeci">bool is_sameSignature(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00477">ExtAPI.cpp:477</a></div></div>
72
- <div class="ttc" id="classSVF_1_1ExtAPI_html_ab61fbc80acc89e26df2b451cbab81246"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ab61fbc80acc89e26df2b451cbab81246">SVF::ExtAPI::get_FunJson</a></div><div class="ttdeci">cJSON * get_FunJson(const std::string &amp;funName)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00295">ExtAPI.cpp:295</a></div></div>
71
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a5e8b816a3eb894f6b09403852df0d01b"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5e8b816a3eb894f6b09403852df0d01b">SVF::ExtAPI::is_sameSignature</a></div><div class="ttdeci">bool is_sameSignature(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00519">ExtAPI.cpp:519</a></div></div>
72
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_ab61fbc80acc89e26df2b451cbab81246"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ab61fbc80acc89e26df2b451cbab81246">SVF::ExtAPI::get_FunJson</a></div><div class="ttdeci">cJSON * get_FunJson(const std::string &amp;funName)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00337">ExtAPI.cpp:337</a></div></div>
73
73
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a95ac45d2367b3d3124d5d98958e74cc5"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a95ac45d2367b3d3124d5d98958e74cc5">SVF::ExtAPI::type_pair</a></div><div class="ttdeci">std::map&lt; std::string, extType &gt; type_pair</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00154">ExtAPI.h:154</a></div></div>
74
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a9b15082f3c118da731705bba3924507d"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a9b15082f3c118da731705bba3924507d">SVF::ExtAPI::getAllOperations</a></div><div class="ttdeci">std::vector&lt; Operation &gt; getAllOperations(std::string funName)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00302">ExtAPI.cpp:302</a></div></div>
74
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a9b15082f3c118da731705bba3924507d"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a9b15082f3c118da731705bba3924507d">SVF::ExtAPI::getAllOperations</a></div><div class="ttdeci">std::vector&lt; Operation &gt; getAllOperations(std::string funName)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00344">ExtAPI.cpp:344</a></div></div>
75
75
  <div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html">SVF::ExtAPI::Operation</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00202">ExtAPI.h:202</a></div></div>
76
76
  <div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html_a56d03123021f1f628361a4080fa573ce"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html#a56d03123021f1f628361a4080fa573ce">SVF::ExtAPI::Operation::operandStr</a></div><div class="ttdeci">std::vector&lt; std::string &gt; operandStr</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00231">ExtAPI.h:231</a></div></div>
77
77
  <div class="ttc" id="Util_2BasicTypes_8h_html"><div class="ttname"><a href="Util_2BasicTypes_8h.html">BasicTypes.h</a></div></div>
@@ -90,15 +90,15 @@ $(function() {
90
90
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caa6c9b3a6987d311c61156dab96e5ad3b9"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6c9b3a6987d311c61156dab96e5ad3b9">SVF::ExtAPI::CPP_EFT_DYNAMIC_CAST</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00148">ExtAPI.h:148</a></div></div>
91
91
  <div class="ttc" id="cJSON_8h_html"><div class="ttname"><a href="cJSON_8h.html">cJSON.h</a></div></div>
92
92
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caae8423cc29f4de0225e30de6982e6a3a4"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae8423cc29f4de0225e30de6982e6a3a4">SVF::ExtAPI::EFT_L_A0__A2R_A0</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00133">ExtAPI.h:133</a></div></div>
93
- <div class="ttc" id="classSVF_1_1ExtAPI_html_aeef27a358ba1815760c893bd2d2335b1"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aeef27a358ba1815760c893bd2d2335b1">SVF::ExtAPI::is_dealloc</a></div><div class="ttdeci">bool is_dealloc(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00456">ExtAPI.cpp:456</a></div></div>
93
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_aeef27a358ba1815760c893bd2d2335b1"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aeef27a358ba1815760c893bd2d2335b1">SVF::ExtAPI::is_dealloc</a></div><div class="ttdeci">bool is_dealloc(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00498">ExtAPI.cpp:498</a></div></div>
94
94
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caa035cf8a39c192608ec0e91d48e479899"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa035cf8a39c192608ec0e91d48e479899">SVF::ExtAPI::EFT_A0R_NEW</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00135">ExtAPI.h:135</a></div></div>
95
95
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a02380d22fd6021ebce1e54723d695c99"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a02380d22fd6021ebce1e54723d695c99">SVF::ExtAPI::getExtAPI</a></div><div class="ttdeci">static ExtAPI * getExtAPI(const std::string &amp;=&quot;&quot;)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00122">ExtAPI.cpp:122</a></div></div>
96
96
  <div class="ttc" id="classSVF_1_1ExtAPI_html_abe3e0e2500532acfc01cee7e2ce1cd90"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#abe3e0e2500532acfc01cee7e2ce1cd90">SVF::ExtAPI::destory</a></div><div class="ttdeci">static void destory()</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00171">ExtAPI.cpp:171</a></div></div>
97
97
  <div class="ttc" id="structcJSON_html"><div class="ttname"><a href="structcJSON.html">cJSON</a></div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8h_source.html#l00103">cJSON.h:103</a></div></div>
98
98
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caa4ba81144ee1a70785fbf83ca5f0d4573"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4ba81144ee1a70785fbf83ca5f0d4573">SVF::ExtAPI::EFT_A3R_A1R_NS</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00129">ExtAPI.h:129</a></div></div>
99
99
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caa87c4ba17ac3567a0673d6516995e06ef"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa87c4ba17ac3567a0673d6516995e06ef">SVF::ExtAPI::EFT_NOOP</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00110">ExtAPI.h:110</a></div></div>
100
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a158e7da51d45b746e067dc40e912c477"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a158e7da51d45b746e067dc40e912c477">SVF::ExtAPI::is_arg_alloc</a></div><div class="ttdeci">bool is_arg_alloc(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00420">ExtAPI.cpp:420</a></div></div>
101
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a411a034f872afcf62ce5456e408ccf41"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a411a034f872afcf62ce5456e408ccf41">SVF::ExtAPI::get_type</a></div><div class="ttdeci">extType get_type(const SVF::SVFFunction *callee)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00375">ExtAPI.cpp:375</a></div></div>
100
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a158e7da51d45b746e067dc40e912c477"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a158e7da51d45b746e067dc40e912c477">SVF::ExtAPI::is_arg_alloc</a></div><div class="ttdeci">bool is_arg_alloc(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00462">ExtAPI.cpp:462</a></div></div>
101
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a411a034f872afcf62ce5456e408ccf41"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a411a034f872afcf62ce5456e408ccf41">SVF::ExtAPI::get_type</a></div><div class="ttdeci">extType get_type(const SVF::SVFFunction *callee)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00417">ExtAPI.cpp:417</a></div></div>
102
102
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199ca"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199ca">SVF::ExtAPI::extType</a></div><div class="ttdeci">extType</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00108">ExtAPI.h:108</a></div></div>
103
103
  <div class="ttc" id="cJSON_8cpp_html_a3f9a0d3265a6254722587175dac3e4dc"><div class="ttname"><a href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a></div><div class="ttdeci">newitem type</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02739">cJSON.cpp:2739</a></div></div>
104
104
  <div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html_a6fe4cc69b9181548940cbc67f7b6b315"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html#a6fe4cc69b9181548940cbc67f7b6b315">SVF::ExtAPI::Operation::Operation</a></div><div class="ttdeci">Operation(std::string opn, std::vector&lt; std::string &gt; varstr)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00207">ExtAPI.h:207</a></div></div>
@@ -109,7 +109,7 @@ $(function() {
109
109
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a552feab663622681db231d5b48f00d75"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a552feab663622681db231d5b48f00d75">SVF::ExtAPI::extOp</a></div><div class="ttdeci">static ExtAPI * extOp</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00193">ExtAPI.h:193</a></div></div>
110
110
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caaac3eaaf0865895ce144c035e429166be"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaac3eaaf0865895ce144c035e429166be">SVF::ExtAPI::EFT_L_A0__A1_A0</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00134">ExtAPI.h:134</a></div></div>
111
111
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caa4c1361546aa103c26b11b0b89dc8d482"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4c1361546aa103c26b11b0b89dc8d482">SVF::ExtAPI::EFT_A1R_A0</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00130">ExtAPI.h:130</a></div></div>
112
- <div class="ttc" id="classSVF_1_1ExtAPI_html_ac6d6bdc51a6b75d6d5741cb751559fe4"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ac6d6bdc51a6b75d6d5741cb751559fe4">SVF::ExtAPI::is_realloc</a></div><div class="ttdeci">bool is_realloc(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00470">ExtAPI.cpp:470</a></div></div>
112
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_ac6d6bdc51a6b75d6d5741cb751559fe4"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ac6d6bdc51a6b75d6d5741cb751559fe4">SVF::ExtAPI::is_realloc</a></div><div class="ttdeci">bool is_realloc(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00512">ExtAPI.cpp:512</a></div></div>
113
113
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caac078d0307bec384b6df3da561045ff7d"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac078d0307bec384b6df3da561045ff7d">SVF::ExtAPI::EFT_L_A2</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00120">ExtAPI.h:120</a></div></div>
114
114
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a835fda8fb934d1cd040d1b3fb2dd0270"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a835fda8fb934d1cd040d1b3fb2dd0270">SVF::ExtAPI::root</a></div><div class="ttdeci">static cJSON * root</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00196">ExtAPI.h:196</a></div></div>
115
115
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caac57ade96d1d18b9f2d4d36bc6928c5c4"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac57ade96d1d18b9f2d4d36bc6928c5c4">SVF::ExtAPI::EFT_ALLOC</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00111">ExtAPI.h:111</a></div></div>
@@ -121,29 +121,29 @@ $(function() {
121
121
  <div class="ttc" id="classSVF_1_1ExtAPI_html"><div class="ttname"><a href="classSVF_1_1ExtAPI.html">SVF::ExtAPI</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00102">ExtAPI.h:102</a></div></div>
122
122
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caafedd2f66497ed9404b8b3cb1d16a3f0b"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafedd2f66497ed9404b8b3cb1d16a3f0b">SVF::ExtAPI::EFT_STD_RB_TREE_INSERT_AND_REBALANCE</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00140">ExtAPI.h:140</a></div></div>
123
123
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caa1f23e7b8cdd103943f515e807bf36b1c"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1f23e7b8cdd103943f515e807bf36b1c">SVF::ExtAPI::EFT_REALLOC</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00112">ExtAPI.h:112</a></div></div>
124
- <div class="ttc" id="classSVF_1_1ExtAPI_html_ad3eefa086aa514e4d245a975ea3d45b5"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ad3eefa086aa514e4d245a975ea3d45b5">SVF::ExtAPI::has_static2</a></div><div class="ttdeci">bool has_static2(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00407">ExtAPI.cpp:407</a></div></div>
124
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_ad3eefa086aa514e4d245a975ea3d45b5"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ad3eefa086aa514e4d245a975ea3d45b5">SVF::ExtAPI::has_static2</a></div><div class="ttdeci">bool has_static2(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00449">ExtAPI.cpp:449</a></div></div>
125
125
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caaa0cecd43037de38c00ec6017b03bbb3f"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaa0cecd43037de38c00ec6017b03bbb3f">SVF::ExtAPI::EFT_L_A0__A0R_A1</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00122">ExtAPI.h:122</a></div></div>
126
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a68939c789d0530151a4e79e79317531a"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a68939c789d0530151a4e79e79317531a">SVF::ExtAPI::get_alloc_arg_pos</a></div><div class="ttdeci">s32_t get_alloc_arg_pos(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00427">ExtAPI.cpp:427</a></div></div>
126
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a68939c789d0530151a4e79e79317531a"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a68939c789d0530151a4e79e79317531a">SVF::ExtAPI::get_alloc_arg_pos</a></div><div class="ttdeci">s32_t get_alloc_arg_pos(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00469">ExtAPI.cpp:469</a></div></div>
127
127
  <div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html_a1e8979a53cf1edb5df00a5f28b6c19e9"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html#a1e8979a53cf1edb5df00a5f28b6c19e9">SVF::ExtAPI::Operation::op</a></div><div class="ttdeci">std::string op</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00230">ExtAPI.h:230</a></div></div>
128
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a0d865c55681a3b4a9bb965fd0200029d"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a0d865c55681a3b4a9bb965fd0200029d">SVF::ExtAPI::is_alloc</a></div><div class="ttdeci">bool is_alloc(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00413">ExtAPI.cpp:413</a></div></div>
128
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a0d865c55681a3b4a9bb965fd0200029d"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a0d865c55681a3b4a9bb965fd0200029d">SVF::ExtAPI::is_alloc</a></div><div class="ttdeci">bool is_alloc(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00455">ExtAPI.cpp:455</a></div></div>
129
129
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caa27b8dfa0742daa17c3e1a520d03dbd14"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa27b8dfa0742daa17c3e1a520d03dbd14">SVF::ExtAPI::EFT_A2R_NEW</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00137">ExtAPI.h:137</a></div></div>
130
130
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a1930d622cd47f7fd875e1964b65ec506"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a1930d622cd47f7fd875e1964b65ec506">SVF::ExtAPI::get_opName</a></div><div class="ttdeci">std::string get_opName(const std::string &amp;s)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00204">ExtAPI.cpp:204</a></div></div>
131
- <div class="ttc" id="classSVF_1_1ExtAPI_html_ac3e34227968d6a2835d63b1052da3c1a"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ac3e34227968d6a2835d63b1052da3c1a">SVF::ExtAPI::get_name</a></div><div class="ttdeci">std::string get_name(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00281">ExtAPI.cpp:281</a></div></div>
131
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_ac3e34227968d6a2835d63b1052da3c1a"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ac3e34227968d6a2835d63b1052da3c1a">SVF::ExtAPI::get_name</a></div><div class="ttdeci">std::string get_name(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00323">ExtAPI.cpp:323</a></div></div>
132
132
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caa66bcd64afcfaf09c49d2f445cd112f1d"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa66bcd64afcfaf09c49d2f445cd112f1d">SVF::ExtAPI::EFT_FREE_MULTILEVEL</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00114">ExtAPI.h:114</a></div></div>
133
133
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caa54aa3d7051aab7d65ee1154538bfbb48"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa54aa3d7051aab7d65ee1154538bfbb48">SVF::ExtAPI::EFT_L_A0__A0R_A1R</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00123">ExtAPI.h:123</a></div></div>
134
134
  <div class="ttc" id="classSVF_1_1ExtAPI_1_1Operation_html_a453f37464f5c6261e22e845948f36c94"><div class="ttname"><a href="classSVF_1_1ExtAPI_1_1Operation.html#a453f37464f5c6261e22e845948f36c94">SVF::ExtAPI::Operation::Operation</a></div><div class="ttdeci">Operation()</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00205">ExtAPI.h:205</a></div></div>
135
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a5ef7edb1664ab87f00418e7808d00258"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5ef7edb1664ab87f00418e7808d00258">SVF::ExtAPI::isOverwrittenAppFunction</a></div><div class="ttdeci">u32_t isOverwrittenAppFunction(const SVF::SVFFunction *callee)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00383">ExtAPI.cpp:383</a></div></div>
135
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a5ef7edb1664ab87f00418e7808d00258"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5ef7edb1664ab87f00418e7808d00258">SVF::ExtAPI::isOverwrittenAppFunction</a></div><div class="ttdeci">u32_t isOverwrittenAppFunction(const SVF::SVFFunction *callee)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00425">ExtAPI.cpp:425</a></div></div>
136
136
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aa98b80dc86d0549183ec69b44b391bd7"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aa98b80dc86d0549183ec69b44b391bd7">SVF::ExtAPI::extType_toString</a></div><div class="ttdeci">const std::string &amp; extType_toString(extType type)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00212">ExtAPI.cpp:212</a></div></div>
137
137
  <div class="ttc" id="namespaceSVF_html"><div class="ttname"><a href="namespaceSVF.html">SVF</a></div><div class="ttdoc">for isBitcode </div><div class="ttdef"><b>Definition:</b> <a href="CFGNormalizer_8h_source.html#l00035">CFGNormalizer.h:35</a></div></div>
138
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a21f45c806672255c044d39490990eae2"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a21f45c806672255c044d39490990eae2">SVF::ExtAPI::is_ext</a></div><div class="ttdeci">bool is_ext(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00514">ExtAPI.cpp:514</a></div></div>
138
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a21f45c806672255c044d39490990eae2"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a21f45c806672255c044d39490990eae2">SVF::ExtAPI::is_ext</a></div><div class="ttdeci">bool is_ext(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00556">ExtAPI.cpp:556</a></div></div>
139
139
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caae3e90095a170aa15d9b6c305469e32af"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae3e90095a170aa15d9b6c305469e32af">SVF::ExtAPI::CPP_EFT_A0R_A1</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00144">ExtAPI.h:144</a></div></div>
140
140
  <div class="ttc" id="CFLGrammar_8txt_html_a00967427d1c110ffcc82ea2a966f4564"><div class="ttname"><a href="CFLGrammar_8txt.html#a00967427d1c110ffcc82ea2a966f4564">F</a></div><div class="ttdeci">V Fbar V F</div><div class="ttdef"><b>Definition:</b> <a href="CFLGrammar_8txt_source.html#l00016">CFLGrammar.txt:16</a></div></div>
141
141
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caa80ea82d0181911894919c181eb1f4e35"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa80ea82d0181911894919c181eb1f4e35">SVF::ExtAPI::EFT_L_A1__FunPtr</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00124">ExtAPI.h:124</a></div></div>
142
142
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caafe69efc20e29f95e0e333d1a462576a2"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafe69efc20e29f95e0e333d1a462576a2">SVF::ExtAPI::EFT_A4R_NEW</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00138">ExtAPI.h:138</a></div></div>
143
143
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caa1e119ad93f66dbbf8014917febad843c"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1e119ad93f66dbbf8014917febad843c">SVF::ExtAPI::EFT_L_A8</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00121">ExtAPI.h:121</a></div></div>
144
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a934e293bd4050cb1ab5c19e8ad391ebe"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a934e293bd4050cb1ab5c19e8ad391ebe">SVF::ExtAPI::no_struct_alloc</a></div><div class="ttdeci">bool no_struct_alloc(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00449">ExtAPI.cpp:449</a></div></div>
145
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a906a3728bbcfb7a43ac0938ffcb3df23"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a906a3728bbcfb7a43ac0938ffcb3df23">SVF::ExtAPI::get_opArgs</a></div><div class="ttdeci">std::vector&lt; std::string &gt; get_opArgs(const cJSON *value)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00342">ExtAPI.cpp:342</a></div></div>
146
- <div class="ttc" id="classSVF_1_1ExtAPI_html_ae20ea24cce02de87d89a2d0b773a2357"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ae20ea24cce02de87d89a2d0b773a2357">SVF::ExtAPI::has_static</a></div><div class="ttdeci">bool has_static(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00400">ExtAPI.cpp:400</a></div></div>
144
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a934e293bd4050cb1ab5c19e8ad391ebe"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a934e293bd4050cb1ab5c19e8ad391ebe">SVF::ExtAPI::no_struct_alloc</a></div><div class="ttdeci">bool no_struct_alloc(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00491">ExtAPI.cpp:491</a></div></div>
145
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a906a3728bbcfb7a43ac0938ffcb3df23"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a906a3728bbcfb7a43ac0938ffcb3df23">SVF::ExtAPI::get_opArgs</a></div><div class="ttdeci">std::vector&lt; std::string &gt; get_opArgs(const cJSON *value)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00384">ExtAPI.cpp:384</a></div></div>
146
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_ae20ea24cce02de87d89a2d0b773a2357"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#ae20ea24cce02de87d89a2d0b773a2357">SVF::ExtAPI::has_static</a></div><div class="ttdeci">bool has_static(const SVFFunction *F)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00442">ExtAPI.cpp:442</a></div></div>
147
147
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caaec63c85b24133af679d60dda42ab44ab"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaec63c85b24133af679d60dda42ab44ab">SVF::ExtAPI::EFT_L_A1</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00119">ExtAPI.h:119</a></div></div>
148
148
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a848ec5976f48f84274bb6a295160fb04"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a848ec5976f48f84274bb6a295160fb04">SVF::ExtAPI::getArgPos</a></div><div class="ttdeci">u32_t getArgPos(std::string s)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00223">ExtAPI.cpp:223</a></div></div>
149
149
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caa515c2184a7461fc1788a514432a7ec22"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa515c2184a7461fc1788a514432a7ec22">SVF::ExtAPI::EFT_STAT2</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00117">ExtAPI.h:117</a></div></div>