svf-tools 1.0.484 → 1.0.487

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,7 +66,7 @@ $(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] Info about external llvm::Functions</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * v. 005, 2008-08-15</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *------------------------------------------------------------------------------</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright 2008 Andrey Petrov</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * - apetrov87@gmail.com, apetrov@cs.utexas.edu</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;<span class="comment"> * Permission is hereby granted, free of charge, to any person</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * obtaining a copy of this software and associated documentation</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * files (the &quot;Software&quot;), to deal in the Software without</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * restriction, including without limitation the rights to use, copy,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * modify, merge, publish, distribute, sublicense, and/or sell copies</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * of the Software, and to permit persons to whom the Software is</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * furnished to do so, subject to the following conditions:</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * included in all copies or substantial portions of the Software.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"> * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> *------------------------------------------------------------------------------</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"> * Modified by Yulei Sui 2013</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"> */</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">#ifndef __ExtAPI_H</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#define __ExtAPI_H</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</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="l00037"></a><span class="lineno"> 37</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="l00038"></a><span class="lineno"> 38</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="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="ExtAPI_8h.html#ad9bef4304f41728bb3edf259c6b67668"> 42</a></span>&#160;<span class="preprocessor">#define EXTAPI_JSON_PATH &quot;/lib/Util/ExtAPI.json&quot;</span></div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="ExtAPI_8h.html#a6dec9d5ce6e777757e97065129d96874"> 43</a></span>&#160;<span class="preprocessor">#define JSON_OPT_OVERWRITE &quot;overwrite_app_function&quot;</span></div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="ExtAPI_8h.html#a8af07ec3fec2ac9636dfb81bb7a8961e"> 44</a></span>&#160;<span class="preprocessor">#define JSON_OPT_FUNCTIONTYPE &quot;type&quot;</span></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="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;{</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">** Specifications in ExtAPI.json</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">*** [1] Overview of the Specification Language</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</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="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment">1. the name of the function,</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</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="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment">3. the type of the function,</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment">4. the operations conducted by the function.</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment">*** [2] Overwriting the user-defined functions</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</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="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">overwrite_app_function = 0: Analyze the user-defined functions.</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</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="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment">*** [3] Function types</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment">Function type represents the properties of the function.</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment">For example,</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</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="l00069"></a><span class="lineno"> 69</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="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">*** [4] Function operations</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">Function operations indicate the relationships between input and output,</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</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="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">For example,</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</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="l00076"></a><span class="lineno"> 76</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="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</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="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment">&quot;A&quot;: represents a parameter;</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment">&quot;N&quot;: represents a number;</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment">&quot;R&quot;: represents a reference;</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">&quot;L&quot;: represents a return value;</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment">&quot;V&quot;: represents a dummy node;</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</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="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</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="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment">&quot;A0&quot;: represents the 1st parameter;</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment">&quot;A2R&quot;: represents that the 3rd parameter is a reference;</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</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="l00091"></a><span class="lineno"> 91</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="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment">** Specification format:</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment">&quot;functionName&quot;: {</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment">&quot;type&quot;: &quot;functional type&quot;,</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment">&quot;overwrite_app_function:&quot; 0/1,</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment">&quot;function operation_1&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">&quot;function operation_2&quot;: [ operand_1, operand_2, ... , operand_n],</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;<span class="comment">&quot;function operation_n&quot;: [ operand_1, operand_2, ... , operand_n]</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment">}</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</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"><a class="line" href="classSVF_1_1ExtAPI.html"> 106</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1ExtAPI.html">ExtAPI</a></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;{</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094"> 109</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aedaa8f975941f17692f993d8a8b6dd30"> 111</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aedaa8f975941f17692f993d8a8b6dd30">EXT_ADDR</a> = 0, <span class="comment">// Handle addr edge</span></div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aaaaeb3443da98c5132ebcf33617962de"> 112</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aaaaeb3443da98c5132ebcf33617962de">EXT_COPY</a>, <span class="comment">// Handle copy edge</span></div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab21117e18dd413220f4a331629d32bd8"> 113</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab21117e18dd413220f4a331629d32bd8">EXT_LOAD</a>, <span class="comment">// Handle load edge</span></div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a501a7dadb95aa1a97b8fe111c7838900"> 114</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a501a7dadb95aa1a97b8fe111c7838900">EXT_STORE</a>, <span class="comment">// Handle store edge</span></div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b961a2cf28f4ae48e8a120a65721669"> 115</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b961a2cf28f4ae48e8a120a65721669">EXT_LOADSTORE</a>, <span class="comment">// Handle load and store edges, and add a dummy node</span></div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a16fe812578afb8f018b6dd503c7bad49"> 116</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a16fe812578afb8f018b6dd503c7bad49">EXT_COPY_N</a>, <span class="comment">// Copy the character c (an unsigned char) to the first n characters of the string pointed to, by the argument str</span></div><div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094acfb80bb18d5cc826c04a57517b9d723a"> 117</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094acfb80bb18d5cc826c04a57517b9d723a">EXT_COPY_MN</a>, <span class="comment">// Copies n characters from memory area src to memory area dest.</span></div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab6db72191d9b7d667fb6f7bd5b200d24"> 118</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab6db72191d9b7d667fb6f7bd5b200d24">EXT_FUNPTR</a>, <span class="comment">// Handle function void *dlsym(void *handle, const char *symbol)</span></div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aa9e95e42adbdc4db3dd5e76785916154"> 119</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aa9e95e42adbdc4db3dd5e76785916154">EXT_COMPLEX</a>, <span class="comment">// Handle function _ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_</span></div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a894fdba1a423fe49fa357f87ea69cf69"> 120</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a894fdba1a423fe49fa357f87ea69cf69">EXT_OTHER</a></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; };</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">// External Function types</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="comment">// Assume a call in the form LHS= F(arg0, arg1, arg2, arg3).</span></div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199ca"> 125</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="l00126"></a><span class="lineno"> 126</span>&#160; {</div><div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa87c4ba17ac3567a0673d6516995e06ef"> 127</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="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac57ade96d1d18b9f2d4d36bc6928c5c4"> 128</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="l00129"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1f23e7b8cdd103943f515e807bf36b1c"> 129</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="l00130"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa9b98279d1926e4ebfb237a43536c7b73"> 130</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="l00131"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa66bcd64afcfaf09c49d2f445cd112f1d"> 131</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="l00132"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8782293305260b1500a09b473439d3b0"> 132</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="l00133"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa94f514e925fdb422632840ca44343af0"> 133</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="l00134"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa515c2184a7461fc1788a514432a7ec22"> 134</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="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6363df51947cab85ec4ae04b4e056f96"> 135</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="l00136"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaec63c85b24133af679d60dda42ab44ab"> 136</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaec63c85b24133af679d60dda42ab44ab">EFT_L_A1</a>,</div><div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac078d0307bec384b6df3da561045ff7d"> 137</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac078d0307bec384b6df3da561045ff7d">EFT_L_A2</a>,</div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1e119ad93f66dbbf8014917febad843c"> 138</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1e119ad93f66dbbf8014917febad843c">EFT_L_A8</a>,</div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaa0cecd43037de38c00ec6017b03bbb3f"> 139</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="l00140"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa54aa3d7051aab7d65ee1154538bfbb48"> 140</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="l00141"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa80ea82d0181911894919c181eb1f4e35"> 141</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="l00142"></a><span class="lineno"> 142</span>&#160; <span class="comment">// arg0 points to; note that several fields may be</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">// copied at once if both point to structs.</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="comment">// Returns arg0.</span></div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae7e7e0702f480304f4afefa96f6c5002"> 145</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="l00146"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4ba81144ee1a70785fbf83ca5f0d4573"> 146</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="l00147"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4c1361546aa103c26b11b0b89dc8d482"> 147</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="l00148"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caab8814290c2362cd812a7783802eb209a"> 148</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="l00149"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac631e9cc3bb430a9c12d0c004d2ca97d"> 149</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="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae8423cc29f4de0225e30de6982e6a3a4"> 150</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="l00151"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaac3eaaf0865895ce144c035e429166be"> 151</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="l00152"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa035cf8a39c192608ec0e91d48e479899"> 152</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="l00153"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4353ad2b443e7f7ce2151869eed9c097"> 153</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="l00154"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa27b8dfa0742daa17c3e1a520d03dbd14"> 154</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa27b8dfa0742daa17c3e1a520d03dbd14">EFT_A2R_NEW</a>,</div><div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafe69efc20e29f95e0e333d1a462576a2"> 155</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafe69efc20e29f95e0e333d1a462576a2">EFT_A4R_NEW</a>,</div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8b59b6966952577361826d09b95b76be"> 156</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8b59b6966952577361826d09b95b76be">EFT_A11R_NEW</a>,</div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafedd2f66497ed9404b8b3cb1d16a3f0b"> 157</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="l00158"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa31d0b620d3344c68ecfd71c9faf1d598"> 158</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="l00159"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaed5f4c75cc5016c61f441abf06a2bf21"> 159</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="l00160"></a><span class="lineno"> 160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae3e90095a170aa15d9b6c305469e32af"> 161</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="l00162"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa7f75d2265448acf50cd59151a1241054"> 162</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="l00163"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa3eb7d75552ce138f55c840b6635d32ed"> 163</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="l00164"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa9d9ec33eb5ecf285ccf2aa575bcba31a"> 164</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="l00165"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6c9b3a6987d311c61156dab96e5ad3b9"> 165</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="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa7ad779bd3527f7cd220ca74c736fd2df"> 166</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="l00167"></a><span class="lineno"> 167</span>&#160; };</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a495b6db60a6266b83cf511965a57f6a3"> 170</a></span>&#160; std::map&lt;std::string, extf_t&gt; <a class="code" href="classSVF_1_1ExtAPI.html#a495b6db60a6266b83cf511965a57f6a3">op_pair</a> =</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; {<span class="stringliteral">&quot;addr&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aedaa8f975941f17692f993d8a8b6dd30">EXT_ADDR</a>},</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; {<span class="stringliteral">&quot;copy&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aaaaeb3443da98c5132ebcf33617962de">EXT_COPY</a>},</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {<span class="stringliteral">&quot;load&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab21117e18dd413220f4a331629d32bd8">EXT_LOAD</a>},</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {<span class="stringliteral">&quot;store&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a501a7dadb95aa1a97b8fe111c7838900">EXT_STORE</a>},</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; {<span class="stringliteral">&quot;load_store&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b961a2cf28f4ae48e8a120a65721669">EXT_LOADSTORE</a>},</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; {<span class="stringliteral">&quot;copy_n&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a16fe812578afb8f018b6dd503c7bad49">EXT_COPY_N</a>},</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {<span class="stringliteral">&quot;copy_mn&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094acfb80bb18d5cc826c04a57517b9d723a">EXT_COPY_MN</a>},</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {<span class="stringliteral">&quot;complex&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aa9e95e42adbdc4db3dd5e76785916154">EXT_COMPLEX</a>},</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; {<span class="stringliteral">&quot;funptr&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab6db72191d9b7d667fb6f7bd5b200d24">EXT_FUNPTR</a>}</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; };</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a95ac45d2367b3d3124d5d98958e74cc5"> 183</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="l00184"></a><span class="lineno"> 184</span>&#160; {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</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="l00186"></a><span class="lineno"> 186</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="l00187"></a><span class="lineno"> 187</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="l00188"></a><span class="lineno"> 188</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="l00189"></a><span class="lineno"> 189</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="l00190"></a><span class="lineno"> 190</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="l00191"></a><span class="lineno"> 191</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="l00192"></a><span class="lineno"> 192</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="l00193"></a><span class="lineno"> 193</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="l00194"></a><span class="lineno"> 194</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="l00195"></a><span class="lineno"> 195</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="l00196"></a><span class="lineno"> 196</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="l00197"></a><span class="lineno"> 197</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="l00198"></a><span class="lineno"> 198</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="l00199"></a><span class="lineno"> 199</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="l00200"></a><span class="lineno"> 200</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="l00201"></a><span class="lineno"> 201</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="l00202"></a><span class="lineno"> 202</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="l00203"></a><span class="lineno"> 203</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="l00204"></a><span class="lineno"> 204</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="l00205"></a><span class="lineno"> 205</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="l00206"></a><span class="lineno"> 206</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="l00207"></a><span class="lineno"> 207</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="l00208"></a><span class="lineno"> 208</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="l00209"></a><span class="lineno"> 209</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="l00210"></a><span class="lineno"> 210</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="l00211"></a><span class="lineno"> 211</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="l00212"></a><span class="lineno"> 212</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="l00213"></a><span class="lineno"> 213</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="l00214"></a><span class="lineno"> 214</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="l00215"></a><span class="lineno"> 215</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="l00216"></a><span class="lineno"> 216</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="l00217"></a><span class="lineno"> 217</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="l00218"></a><span class="lineno"> 218</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="l00219"></a><span class="lineno"> 219</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="l00220"></a><span class="lineno"> 220</span>&#160; };</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a552feab663622681db231d5b48f00d75"> 222</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="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// Store specifications of external functions in ExtAPI.json file</span></div><div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a835fda8fb934d1cd040d1b3fb2dd0270"> 225</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="l00226"></a><span class="lineno"> 226</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</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#a58a764c27354d5f9b70995d30de65f1d">getExtAPI</a>();</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</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="l00231"></a><span class="lineno"> 231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</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="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> <a class="code" href="classSVF_1_1ExtAPI.html#a6298f765cd73e9d71fc6b3b55fb7e56f">get_opName</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// Return the extf_t of (F).</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// Get external function name, e.g &quot;memcpy&quot;</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</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="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</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="l00240"></a><span class="lineno"> 240</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="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="comment">// Get specifications of external functions in ExtAPI.json file</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="structcJSON.html">cJSON</a> *<a class="code" href="classSVF_1_1ExtAPI.html#a1c95cd414e34e2b8b23c3b11c26e2a04">get_FunJson</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funName);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// Get property of the operation, e.g. &quot;EFT_A1R_A0R&quot;</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</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="l00247"></a><span class="lineno"> 247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// Get priority of he function, return value</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// 0: Apply user-defined functions</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">// 1: Apply function specification in ExtAPI.json</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</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="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</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="l00254"></a><span class="lineno"> 254</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="l00255"></a><span class="lineno"> 255</span>&#160;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</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="l00257"></a><span class="lineno"> 257</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="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="comment">// Does (F) allocate a new object and return it?</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</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="l00261"></a><span class="lineno"> 261</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</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="l00263"></a><span class="lineno"> 263</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="l00264"></a><span class="lineno"> 264</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// Get the position of argument which holds the new object</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</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="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="comment">// Does (F) allocate only non-struct objects?</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</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="l00270"></a><span class="lineno"> 270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="comment">// Does (F) not free/release any memory?</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</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="l00273"></a><span class="lineno"> 273</span>&#160;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// Does (F) not do anything with the known pointers?</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</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="l00276"></a><span class="lineno"> 276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="comment">// Does (F) reallocate a new object?</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</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="l00279"></a><span class="lineno"> 279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</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="l00281"></a><span class="lineno"> 281</span>&#160; <span class="comment">// or a user-defined version of a known alloc or no-op)?</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#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="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">// End namespace SVF</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</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#l00236">ExtAPI.cpp:236</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] Info about external llvm::Functions</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span>&#160;<span class="comment"> * v. 005, 2008-08-15</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span>&#160;<span class="comment"> *------------------------------------------------------------------------------</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span>&#160;<span class="comment"> * Copyright 2008 Andrey Petrov</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span>&#160;<span class="comment"> * - apetrov87@gmail.com, apetrov@cs.utexas.edu</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;<span class="comment"> * Permission is hereby granted, free of charge, to any person</span></div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span>&#160;<span class="comment"> * obtaining a copy of this software and associated documentation</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span>&#160;<span class="comment"> * files (the &quot;Software&quot;), to deal in the Software without</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span>&#160;<span class="comment"> * restriction, including without limitation the rights to use, copy,</span></div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span>&#160;<span class="comment"> * modify, merge, publish, distribute, sublicense, and/or sell copies</span></div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span>&#160;<span class="comment"> * of the Software, and to permit persons to whom the Software is</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span>&#160;<span class="comment"> * furnished to do so, subject to the following conditions:</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span>&#160;<span class="comment"> * The above copyright notice and this permission notice shall be</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span>&#160;<span class="comment"> * included in all copies or substantial portions of the Software.</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span>&#160;<span class="comment"> *</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span>&#160;<span class="comment"> * THE SOFTWARE IS PROVIDED &quot;AS IS&quot;, WITHOUT WARRANTY OF ANY KIND,</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span>&#160;<span class="comment"> * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span>&#160;<span class="comment"> * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span>&#160;<span class="comment"> * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span>&#160;<span class="comment"> * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span>&#160;<span class="comment"> * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span>&#160;<span class="comment"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span>&#160;<span class="comment"> * DEALINGS IN THE SOFTWARE.</span></div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span>&#160;<span class="comment"> *------------------------------------------------------------------------------</span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span>&#160;<span class="comment"> */</span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span>&#160;</div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span>&#160;<span class="comment"> * Modified by Yulei Sui 2013</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span>&#160;<span class="comment"> */</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">#ifndef __ExtAPI_H</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span>&#160;<span class="preprocessor">#define __ExtAPI_H</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span>&#160;</div><div class="line"><a name="l00036"></a><span class="lineno"> 36</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="l00037"></a><span class="lineno"> 37</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="l00038"></a><span class="lineno"> 38</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="l00039"></a><span class="lineno"> 39</span>&#160;<span class="preprocessor">#include &lt;string&gt;</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span>&#160;<span class="preprocessor">#include &lt;map&gt;</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span>&#160;</div><div class="line"><a name="l00042"></a><span class="lineno"><a class="line" href="ExtAPI_8h.html#ad9bef4304f41728bb3edf259c6b67668"> 42</a></span>&#160;<span class="preprocessor">#define EXTAPI_JSON_PATH &quot;/include/Util/ExtAPI.json&quot;</span></div><div class="line"><a name="l00043"></a><span class="lineno"><a class="line" href="ExtAPI_8h.html#a6dec9d5ce6e777757e97065129d96874"> 43</a></span>&#160;<span class="preprocessor">#define JSON_OPT_OVERWRITE &quot;overwrite_app_function&quot;</span></div><div class="line"><a name="l00044"></a><span class="lineno"><a class="line" href="ExtAPI_8h.html#a8af07ec3fec2ac9636dfb81bb7a8961e"> 44</a></span>&#160;<span class="preprocessor">#define JSON_OPT_FUNCTIONTYPE &quot;type&quot;</span></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="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span>&#160;{</div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span>&#160;<span class="comment">/*</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span>&#160;<span class="comment">** Specifications in ExtAPI.json</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span>&#160;<span class="comment">*** [1] Overview of the Specification Language</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</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="l00055"></a><span class="lineno"> 55</span>&#160;<span class="comment">1. the name of the function,</span></div><div class="line"><a name="l00056"></a><span class="lineno"> 56</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="l00057"></a><span class="lineno"> 57</span>&#160;<span class="comment">3. the type of the function,</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span>&#160;<span class="comment">4. the operations conducted by the function.</span></div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span>&#160;<span class="comment">*** [2] Overwriting the user-defined functions</span></div><div class="line"><a name="l00061"></a><span class="lineno"> 61</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="l00062"></a><span class="lineno"> 62</span>&#160;<span class="comment">overwrite_app_function = 0: Analyze the user-defined functions.</span></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</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="l00064"></a><span class="lineno"> 64</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span>&#160;<span class="comment">*** [3] Function types</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span>&#160;<span class="comment">Function type represents the properties of the function.</span></div><div class="line"><a name="l00067"></a><span class="lineno"> 67</span>&#160;<span class="comment">For example,</span></div><div class="line"><a name="l00068"></a><span class="lineno"> 68</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="l00069"></a><span class="lineno"> 69</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="l00070"></a><span class="lineno"> 70</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span>&#160;<span class="comment">*** [4] Function operations</span></div><div class="line"><a name="l00072"></a><span class="lineno"> 72</span>&#160;<span class="comment">Function operations indicate the relationships between input and output,</span></div><div class="line"><a name="l00073"></a><span class="lineno"> 73</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="l00074"></a><span class="lineno"> 74</span>&#160;<span class="comment">For example,</span></div><div class="line"><a name="l00075"></a><span class="lineno"> 75</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="l00076"></a><span class="lineno"> 76</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="l00077"></a><span class="lineno"> 77</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00078"></a><span class="lineno"> 78</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="l00079"></a><span class="lineno"> 79</span>&#160;<span class="comment">&quot;A&quot;: represents a parameter;</span></div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span>&#160;<span class="comment">&quot;N&quot;: represents a number;</span></div><div class="line"><a name="l00081"></a><span class="lineno"> 81</span>&#160;<span class="comment">&quot;R&quot;: represents a reference;</span></div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span>&#160;<span class="comment">&quot;L&quot;: represents a return value;</span></div><div class="line"><a name="l00083"></a><span class="lineno"> 83</span>&#160;<span class="comment">&quot;V&quot;: represents a dummy node;</span></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00085"></a><span class="lineno"> 85</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="l00086"></a><span class="lineno"> 86</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00087"></a><span class="lineno"> 87</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="l00088"></a><span class="lineno"> 88</span>&#160;<span class="comment">&quot;A0&quot;: represents the 1st parameter;</span></div><div class="line"><a name="l00089"></a><span class="lineno"> 89</span>&#160;<span class="comment">&quot;A2R&quot;: represents that the 3rd parameter is a reference;</span></div><div class="line"><a name="l00090"></a><span class="lineno"> 90</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="l00091"></a><span class="lineno"> 91</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="l00092"></a><span class="lineno"> 92</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span>&#160;<span class="comment">** Specification format:</span></div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span>&#160;<span class="comment">&quot;functionName&quot;: {</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span>&#160;<span class="comment">&quot;type&quot;: &quot;functional type&quot;,</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span>&#160;<span class="comment">&quot;overwrite_app_function:&quot; 0/1,</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span>&#160;<span class="comment">&quot;function operation_1&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">&quot;function operation_2&quot;: [ operand_1, operand_2, ... , operand_n],</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;<span class="comment">&quot;function operation_n&quot;: [ operand_1, operand_2, ... , operand_n]</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span>&#160;<span class="comment">}</span></div><div class="line"><a name="l00103"></a><span class="lineno"> 103</span>&#160;<span class="comment">*/</span></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span>&#160;</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"><a class="line" href="classSVF_1_1ExtAPI.html"> 106</a></span>&#160;<span class="keyword">class </span><a class="code" href="classSVF_1_1ExtAPI.html">ExtAPI</a></div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>&#160;{</div><div class="line"><a name="l00108"></a><span class="lineno"> 108</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00109"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094"> 109</a></span>&#160; <span class="keyword">enum</span> <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a></div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>&#160; {</div><div class="line"><a name="l00111"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aedaa8f975941f17692f993d8a8b6dd30"> 111</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aedaa8f975941f17692f993d8a8b6dd30">EXT_ADDR</a> = 0, <span class="comment">// Handle addr edge</span></div><div class="line"><a name="l00112"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aaaaeb3443da98c5132ebcf33617962de"> 112</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aaaaeb3443da98c5132ebcf33617962de">EXT_COPY</a>, <span class="comment">// Handle copy edge</span></div><div class="line"><a name="l00113"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab21117e18dd413220f4a331629d32bd8"> 113</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab21117e18dd413220f4a331629d32bd8">EXT_LOAD</a>, <span class="comment">// Handle load edge</span></div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a501a7dadb95aa1a97b8fe111c7838900"> 114</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a501a7dadb95aa1a97b8fe111c7838900">EXT_STORE</a>, <span class="comment">// Handle store edge</span></div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b961a2cf28f4ae48e8a120a65721669"> 115</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b961a2cf28f4ae48e8a120a65721669">EXT_LOADSTORE</a>, <span class="comment">// Handle load and store edges, and add a dummy node</span></div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a16fe812578afb8f018b6dd503c7bad49"> 116</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a16fe812578afb8f018b6dd503c7bad49">EXT_COPY_N</a>, <span class="comment">// Copy the character c (an unsigned char) to the first n characters of the string pointed to, by the argument str</span></div><div class="line"><a name="l00117"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094acfb80bb18d5cc826c04a57517b9d723a"> 117</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094acfb80bb18d5cc826c04a57517b9d723a">EXT_COPY_MN</a>, <span class="comment">// Copies n characters from memory area src to memory area dest.</span></div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab6db72191d9b7d667fb6f7bd5b200d24"> 118</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab6db72191d9b7d667fb6f7bd5b200d24">EXT_FUNPTR</a>, <span class="comment">// Handle function void *dlsym(void *handle, const char *symbol)</span></div><div class="line"><a name="l00119"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aa9e95e42adbdc4db3dd5e76785916154"> 119</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aa9e95e42adbdc4db3dd5e76785916154">EXT_COMPLEX</a>, <span class="comment">// Handle function _ZSt29_Rb_tree_insert_and_rebalancebPSt18_Rb_tree_node_baseS0_RS_</span></div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a894fdba1a423fe49fa357f87ea69cf69"> 120</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a894fdba1a423fe49fa357f87ea69cf69">EXT_OTHER</a></div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span>&#160; };</div><div class="line"><a name="l00122"></a><span class="lineno"> 122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>&#160; <span class="comment">// External Function types</span></div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>&#160; <span class="comment">// Assume a call in the form LHS= F(arg0, arg1, arg2, arg3).</span></div><div class="line"><a name="l00125"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199ca"> 125</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="l00126"></a><span class="lineno"> 126</span>&#160; {</div><div class="line"><a name="l00127"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa87c4ba17ac3567a0673d6516995e06ef"> 127</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="l00128"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac57ade96d1d18b9f2d4d36bc6928c5c4"> 128</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="l00129"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1f23e7b8cdd103943f515e807bf36b1c"> 129</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="l00130"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa9b98279d1926e4ebfb237a43536c7b73"> 130</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="l00131"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa66bcd64afcfaf09c49d2f445cd112f1d"> 131</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="l00132"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8782293305260b1500a09b473439d3b0"> 132</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="l00133"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa94f514e925fdb422632840ca44343af0"> 133</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="l00134"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa515c2184a7461fc1788a514432a7ec22"> 134</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="l00135"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6363df51947cab85ec4ae04b4e056f96"> 135</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="l00136"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaec63c85b24133af679d60dda42ab44ab"> 136</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaec63c85b24133af679d60dda42ab44ab">EFT_L_A1</a>,</div><div class="line"><a name="l00137"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac078d0307bec384b6df3da561045ff7d"> 137</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac078d0307bec384b6df3da561045ff7d">EFT_L_A2</a>,</div><div class="line"><a name="l00138"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1e119ad93f66dbbf8014917febad843c"> 138</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa1e119ad93f66dbbf8014917febad843c">EFT_L_A8</a>,</div><div class="line"><a name="l00139"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaa0cecd43037de38c00ec6017b03bbb3f"> 139</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="l00140"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa54aa3d7051aab7d65ee1154538bfbb48"> 140</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="l00141"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa80ea82d0181911894919c181eb1f4e35"> 141</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="l00142"></a><span class="lineno"> 142</span>&#160; <span class="comment">// arg0 points to; note that several fields may be</span></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span>&#160; <span class="comment">// copied at once if both point to structs.</span></div><div class="line"><a name="l00144"></a><span class="lineno"> 144</span>&#160; <span class="comment">// Returns arg0.</span></div><div class="line"><a name="l00145"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae7e7e0702f480304f4afefa96f6c5002"> 145</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="l00146"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4ba81144ee1a70785fbf83ca5f0d4573"> 146</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="l00147"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4c1361546aa103c26b11b0b89dc8d482"> 147</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="l00148"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caab8814290c2362cd812a7783802eb209a"> 148</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="l00149"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caac631e9cc3bb430a9c12d0c004d2ca97d"> 149</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="l00150"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae8423cc29f4de0225e30de6982e6a3a4"> 150</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="l00151"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaac3eaaf0865895ce144c035e429166be"> 151</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="l00152"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa035cf8a39c192608ec0e91d48e479899"> 152</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="l00153"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa4353ad2b443e7f7ce2151869eed9c097"> 153</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="l00154"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa27b8dfa0742daa17c3e1a520d03dbd14"> 154</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa27b8dfa0742daa17c3e1a520d03dbd14">EFT_A2R_NEW</a>,</div><div class="line"><a name="l00155"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafe69efc20e29f95e0e333d1a462576a2"> 155</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafe69efc20e29f95e0e333d1a462576a2">EFT_A4R_NEW</a>,</div><div class="line"><a name="l00156"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8b59b6966952577361826d09b95b76be"> 156</a></span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8b59b6966952577361826d09b95b76be">EFT_A11R_NEW</a>,</div><div class="line"><a name="l00157"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caafedd2f66497ed9404b8b3cb1d16a3f0b"> 157</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="l00158"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa31d0b620d3344c68ecfd71c9faf1d598"> 158</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="l00159"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaed5f4c75cc5016c61f441abf06a2bf21"> 159</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="l00160"></a><span class="lineno"> 160</span>&#160;</div><div class="line"><a name="l00161"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae3e90095a170aa15d9b6c305469e32af"> 161</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="l00162"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa7f75d2265448acf50cd59151a1241054"> 162</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="l00163"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa3eb7d75552ce138f55c840b6635d32ed"> 163</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="l00164"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa9d9ec33eb5ecf285ccf2aa575bcba31a"> 164</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="l00165"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa6c9b3a6987d311c61156dab96e5ad3b9"> 165</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="l00166"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa7ad779bd3527f7cd220ca74c736fd2df"> 166</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="l00167"></a><span class="lineno"> 167</span>&#160; };</div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span>&#160;</div><div class="line"><a name="l00169"></a><span class="lineno"> 169</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00170"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a495b6db60a6266b83cf511965a57f6a3"> 170</a></span>&#160; std::map&lt;std::string, extf_t&gt; <a class="code" href="classSVF_1_1ExtAPI.html#a495b6db60a6266b83cf511965a57f6a3">op_pair</a> =</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>&#160; {</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>&#160; {<span class="stringliteral">&quot;addr&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aedaa8f975941f17692f993d8a8b6dd30">EXT_ADDR</a>},</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>&#160; {<span class="stringliteral">&quot;copy&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aaaaeb3443da98c5132ebcf33617962de">EXT_COPY</a>},</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span>&#160; {<span class="stringliteral">&quot;load&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab21117e18dd413220f4a331629d32bd8">EXT_LOAD</a>},</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span>&#160; {<span class="stringliteral">&quot;store&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a501a7dadb95aa1a97b8fe111c7838900">EXT_STORE</a>},</div><div class="line"><a name="l00176"></a><span class="lineno"> 176</span>&#160; {<span class="stringliteral">&quot;load_store&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b961a2cf28f4ae48e8a120a65721669">EXT_LOADSTORE</a>},</div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span>&#160; {<span class="stringliteral">&quot;copy_n&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a16fe812578afb8f018b6dd503c7bad49">EXT_COPY_N</a>},</div><div class="line"><a name="l00178"></a><span class="lineno"> 178</span>&#160; {<span class="stringliteral">&quot;copy_mn&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094acfb80bb18d5cc826c04a57517b9d723a">EXT_COPY_MN</a>},</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>&#160; {<span class="stringliteral">&quot;complex&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aa9e95e42adbdc4db3dd5e76785916154">EXT_COMPLEX</a>},</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>&#160; {<span class="stringliteral">&quot;funptr&quot;</span>, <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab6db72191d9b7d667fb6f7bd5b200d24">EXT_FUNPTR</a>}</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>&#160; };</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a95ac45d2367b3d3124d5d98958e74cc5"> 183</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="l00184"></a><span class="lineno"> 184</span>&#160; {</div><div class="line"><a name="l00185"></a><span class="lineno"> 185</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="l00186"></a><span class="lineno"> 186</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="l00187"></a><span class="lineno"> 187</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="l00188"></a><span class="lineno"> 188</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="l00189"></a><span class="lineno"> 189</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="l00190"></a><span class="lineno"> 190</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="l00191"></a><span class="lineno"> 191</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="l00192"></a><span class="lineno"> 192</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="l00193"></a><span class="lineno"> 193</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="l00194"></a><span class="lineno"> 194</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="l00195"></a><span class="lineno"> 195</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="l00196"></a><span class="lineno"> 196</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="l00197"></a><span class="lineno"> 197</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="l00198"></a><span class="lineno"> 198</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="l00199"></a><span class="lineno"> 199</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="l00200"></a><span class="lineno"> 200</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="l00201"></a><span class="lineno"> 201</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="l00202"></a><span class="lineno"> 202</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="l00203"></a><span class="lineno"> 203</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="l00204"></a><span class="lineno"> 204</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="l00205"></a><span class="lineno"> 205</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="l00206"></a><span class="lineno"> 206</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="l00207"></a><span class="lineno"> 207</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="l00208"></a><span class="lineno"> 208</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="l00209"></a><span class="lineno"> 209</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="l00210"></a><span class="lineno"> 210</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="l00211"></a><span class="lineno"> 211</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="l00212"></a><span class="lineno"> 212</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="l00213"></a><span class="lineno"> 213</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="l00214"></a><span class="lineno"> 214</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="l00215"></a><span class="lineno"> 215</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="l00216"></a><span class="lineno"> 216</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="l00217"></a><span class="lineno"> 217</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="l00218"></a><span class="lineno"> 218</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="l00219"></a><span class="lineno"> 219</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="l00220"></a><span class="lineno"> 220</span>&#160; };</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>&#160;</div><div class="line"><a name="l00222"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a552feab663622681db231d5b48f00d75"> 222</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="l00223"></a><span class="lineno"> 223</span>&#160;</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span>&#160; <span class="comment">// Store specifications of external functions in ExtAPI.json file</span></div><div class="line"><a name="l00225"></a><span class="lineno"><a class="line" href="classSVF_1_1ExtAPI.html#a835fda8fb934d1cd040d1b3fb2dd0270"> 225</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="l00226"></a><span class="lineno"> 226</span>&#160;</div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</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#a58a764c27354d5f9b70995d30de65f1d">getExtAPI</a>();</div><div class="line"><a name="l00229"></a><span class="lineno"> 229</span>&#160;</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</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="l00231"></a><span class="lineno"> 231</span>&#160;</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</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="l00233"></a><span class="lineno"> 233</span>&#160; <a class="code" href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094">extf_t</a> <a class="code" href="classSVF_1_1ExtAPI.html#a6298f765cd73e9d71fc6b3b55fb7e56f">get_opName</a>(<a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> s);</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span>&#160;</div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span>&#160; <span class="comment">// Return the extf_t of (F).</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span>&#160; <span class="comment">// Get external function name, e.g &quot;memcpy&quot;</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</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="l00238"></a><span class="lineno"> 238</span>&#160;</div><div class="line"><a name="l00239"></a><span class="lineno"> 239</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="l00240"></a><span class="lineno"> 240</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="l00241"></a><span class="lineno"> 241</span>&#160;</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>&#160; <span class="comment">// Get specifications of external functions in ExtAPI.json file</span></div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>&#160; <a class="code" href="structcJSON.html">cJSON</a> *<a class="code" href="classSVF_1_1ExtAPI.html#a1c95cd414e34e2b8b23c3b11c26e2a04">get_FunJson</a>(<span class="keyword">const</span> <a class="code" href="cJSON_8h.html#ad4c68ea99a26b0a98ad9a79982960458">std::string</a> funName);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>&#160;</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span>&#160; <span class="comment">// Get property of the operation, e.g. &quot;EFT_A1R_A0R&quot;</span></div><div class="line"><a name="l00246"></a><span class="lineno"> 246</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="l00247"></a><span class="lineno"> 247</span>&#160;</div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span>&#160; <span class="comment">// Get priority of he function, return value</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span>&#160; <span class="comment">// 0: Apply user-defined functions</span></div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>&#160; <span class="comment">// 1: Apply function specification in ExtAPI.json</span></div><div class="line"><a name="l00251"></a><span class="lineno"> 251</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="l00252"></a><span class="lineno"> 252</span>&#160;</div><div class="line"><a name="l00253"></a><span class="lineno"> 253</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="l00254"></a><span class="lineno"> 254</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="l00255"></a><span class="lineno"> 255</span>&#160;</div><div class="line"><a name="l00256"></a><span class="lineno"> 256</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="l00257"></a><span class="lineno"> 257</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="l00258"></a><span class="lineno"> 258</span>&#160;</div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span>&#160; <span class="comment">// Does (F) allocate a new object and return it?</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</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="l00261"></a><span class="lineno"> 261</span>&#160;</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</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="l00263"></a><span class="lineno"> 263</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="l00264"></a><span class="lineno"> 264</span>&#160;</div><div class="line"><a name="l00265"></a><span class="lineno"> 265</span>&#160; <span class="comment">// Get the position of argument which holds the new object</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</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="l00267"></a><span class="lineno"> 267</span>&#160;</div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span>&#160; <span class="comment">// Does (F) allocate only non-struct objects?</span></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</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="l00270"></a><span class="lineno"> 270</span>&#160;</div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span>&#160; <span class="comment">// Does (F) not free/release any memory?</span></div><div class="line"><a name="l00272"></a><span class="lineno"> 272</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="l00273"></a><span class="lineno"> 273</span>&#160;</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span>&#160; <span class="comment">// Does (F) not do anything with the known pointers?</span></div><div class="line"><a name="l00275"></a><span class="lineno"> 275</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="l00276"></a><span class="lineno"> 276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span>&#160; <span class="comment">// Does (F) reallocate a new object?</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</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="l00279"></a><span class="lineno"> 279</span>&#160;</div><div class="line"><a name="l00280"></a><span class="lineno"> 280</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="l00281"></a><span class="lineno"> 281</span>&#160; <span class="comment">// or a user-defined version of a known alloc or no-op)?</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#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="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">// End namespace SVF</span></div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span>&#160;</div><div class="line"><a name="l00286"></a><span class="lineno"> 286</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#l00302">ExtAPI.cpp:302</a></div></div>
70
70
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094acfb80bb18d5cc826c04a57517b9d723a"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094acfb80bb18d5cc826c04a57517b9d723a">SVF::ExtAPI::EXT_COPY_MN</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00117">ExtAPI.h:117</a></div></div>
71
71
  <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#l00133">ExtAPI.h:133</a></div></div>
72
72
  <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#l00183">ExtAPI.h:183</a></div></div>
@@ -82,14 +82,14 @@ $(function() {
82
82
  <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#l00165">ExtAPI.h:165</a></div></div>
83
83
  <div class="ttc" id="cJSON_8h_html"><div class="ttname"><a href="cJSON_8h.html">cJSON.h</a></div></div>
84
84
  <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#l00150">ExtAPI.h:150</a></div></div>
85
- <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#l00229">ExtAPI.cpp:229</a></div></div>
85
+ <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#l00295">ExtAPI.cpp:295</a></div></div>
86
86
  <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#l00152">ExtAPI.h:152</a></div></div>
87
87
  <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#l00030">ExtAPI.cpp:30</a></div></div>
88
88
  <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>
89
89
  <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#l00146">ExtAPI.h:146</a></div></div>
90
90
  <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#l00127">ExtAPI.h:127</a></div></div>
91
- <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#l00193">ExtAPI.cpp:193</a></div></div>
92
- <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#l00132">ExtAPI.cpp:132</a></div></div>
91
+ <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#l00259">ExtAPI.cpp:259</a></div></div>
92
+ <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#l00198">ExtAPI.cpp:198</a></div></div>
93
93
  <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#l00125">ExtAPI.h:125</a></div></div>
94
94
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094aa9e95e42adbdc4db3dd5e76785916154"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aa9e95e42adbdc4db3dd5e76785916154">SVF::ExtAPI::EXT_COMPLEX</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00119">ExtAPI.h:119</a></div></div>
95
95
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caab8814290c2362cd812a7783802eb209a"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caab8814290c2362cd812a7783802eb209a">SVF::ExtAPI::EFT_A2R_A1</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00148">ExtAPI.h:148</a></div></div>
@@ -101,14 +101,14 @@ $(function() {
101
101
  <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#l00151">ExtAPI.h:151</a></div></div>
102
102
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a58a764c27354d5f9b70995d30de65f1d"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a58a764c27354d5f9b70995d30de65f1d">SVF::ExtAPI::getExtAPI</a></div><div class="ttdeci">static ExtAPI * getExtAPI()</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00021">ExtAPI.cpp:21</a></div></div>
103
103
  <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#l00147">ExtAPI.h:147</a></div></div>
104
- <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#l00243">ExtAPI.cpp:243</a></div></div>
104
+ <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#l00309">ExtAPI.cpp:309</a></div></div>
105
105
  <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#l00137">ExtAPI.h:137</a></div></div>
106
106
  <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#l00225">ExtAPI.h:225</a></div></div>
107
107
  <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#l00128">ExtAPI.h:128</a></div></div>
108
108
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caae7e7e0702f480304f4afefa96f6c5002"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caae7e7e0702f480304f4afefa96f6c5002">SVF::ExtAPI::EFT_A1R_A0R</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00145">ExtAPI.h:145</a></div></div>
109
109
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caa8782293305260b1500a09b473439d3b0"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa8782293305260b1500a09b473439d3b0">SVF::ExtAPI::EFT_NOSTRUCT_ALLOC</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00132">ExtAPI.h:132</a></div></div>
110
110
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caa31d0b620d3344c68ecfd71c9faf1d598"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caa31d0b620d3344c68ecfd71c9faf1d598">SVF::ExtAPI::EFT_STD_RB_TREE_INCREMENT</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00158">ExtAPI.h:158</a></div></div>
111
- <div class="ttc" id="classSVF_1_1ExtAPI_html_a1c95cd414e34e2b8b23c3b11c26e2a04"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a1c95cd414e34e2b8b23c3b11c26e2a04">SVF::ExtAPI::get_FunJson</a></div><div class="ttdeci">cJSON * get_FunJson(const std::string funName)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00073">ExtAPI.cpp:73</a></div></div>
111
+ <div class="ttc" id="classSVF_1_1ExtAPI_html_a1c95cd414e34e2b8b23c3b11c26e2a04"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a1c95cd414e34e2b8b23c3b11c26e2a04">SVF::ExtAPI::get_FunJson</a></div><div class="ttdeci">cJSON * get_FunJson(const std::string funName)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00131">ExtAPI.cpp:131</a></div></div>
112
112
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094aedaa8f975941f17692f993d8a8b6dd30"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094aedaa8f975941f17692f993d8a8b6dd30">SVF::ExtAPI::EXT_ADDR</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00111">ExtAPI.h:111</a></div></div>
113
113
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a6298f765cd73e9d71fc6b3b55fb7e56f"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a6298f765cd73e9d71fc6b3b55fb7e56f">SVF::ExtAPI::get_opName</a></div><div class="ttdeci">extf_t get_opName(std::string s)</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8cpp_source.html#l00045">ExtAPI.cpp:45</a></div></div>
114
114
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094ab6db72191d9b7d667fb6f7bd5b200d24"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094ab6db72191d9b7d667fb6f7bd5b200d24">SVF::ExtAPI::EXT_FUNPTR</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00118">ExtAPI.h:118</a></div></div>
@@ -116,26 +116,26 @@ $(function() {
116
116
  <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#l00157">ExtAPI.h:157</a></div></div>
117
117
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a495b6db60a6266b83cf511965a57f6a3"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a495b6db60a6266b83cf511965a57f6a3">SVF::ExtAPI::op_pair</a></div><div class="ttdeci">std::map&lt; std::string, extf_t &gt; op_pair</div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00170">ExtAPI.h:170</a></div></div>
118
118
  <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#l00129">ExtAPI.h:129</a></div></div>
119
- <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#l00180">ExtAPI.cpp:180</a></div></div>
119
+ <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#l00246">ExtAPI.cpp:246</a></div></div>
120
120
  <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#l00139">ExtAPI.h:139</a></div></div>
121
- <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#l00200">ExtAPI.cpp:200</a></div></div>
122
- <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#l00186">ExtAPI.cpp:186</a></div></div>
121
+ <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#l00266">ExtAPI.cpp:266</a></div></div>
122
+ <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#l00252">ExtAPI.cpp:252</a></div></div>
123
123
  <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#l00154">ExtAPI.h:154</a></div></div>
124
124
  <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#l00059">ExtAPI.cpp:59</a></div></div>
125
125
  <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#l00131">ExtAPI.h:131</a></div></div>
126
126
  <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#l00140">ExtAPI.h:140</a></div></div>
127
- <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#l00156">ExtAPI.cpp:156</a></div></div>
127
+ <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#l00222">ExtAPI.cpp:222</a></div></div>
128
128
  <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>
129
- <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#l00251">ExtAPI.cpp:251</a></div></div>
129
+ <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#l00317">ExtAPI.cpp:317</a></div></div>
130
130
  <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#l00161">ExtAPI.h:161</a></div></div>
131
131
  <div class="ttc" id="classSVF_1_1ExtAPI_html_aaf94c82d98f8ed1514ee49c9881a4094a9b961a2cf28f4ae48e8a120a65721669"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#aaf94c82d98f8ed1514ee49c9881a4094a9b961a2cf28f4ae48e8a120a65721669">SVF::ExtAPI::EXT_LOADSTORE</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00115">ExtAPI.h:115</a></div></div>
132
132
  <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>
133
133
  <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#l00141">ExtAPI.h:141</a></div></div>
134
134
  <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#l00155">ExtAPI.h:155</a></div></div>
135
135
  <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#l00138">ExtAPI.h:138</a></div></div>
136
- <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#l00222">ExtAPI.cpp:222</a></div></div>
137
- <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#l00119">ExtAPI.cpp:119</a></div></div>
138
- <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#l00173">ExtAPI.cpp:173</a></div></div>
136
+ <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#l00288">ExtAPI.cpp:288</a></div></div>
137
+ <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#l00185">ExtAPI.cpp:185</a></div></div>
138
+ <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#l00239">ExtAPI.cpp:239</a></div></div>
139
139
  <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#l00136">ExtAPI.h:136</a></div></div>
140
140
  <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#l00134">ExtAPI.h:134</a></div></div>
141
141
  <div class="ttc" id="classSVF_1_1ExtAPI_html_a5df65081e82a05223ce781660ee199caaed5f4c75cc5016c61f441abf06a2bf21"><div class="ttname"><a href="classSVF_1_1ExtAPI.html#a5df65081e82a05223ce781660ee199caaed5f4c75cc5016c61f441abf06a2bf21">SVF::ExtAPI::EFT_STD_LIST_HOOK</a></div><div class="ttdef"><b>Definition:</b> <a href="ExtAPI_8h_source.html#l00159">ExtAPI.h:159</a></div></div>