svf-tools 1.0.604 → 1.0.606
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/SVF-doxygen/html/html/AndersenSFR_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/Andersen_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CFLGraphBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CFLStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CHGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CPPUtil_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CSC_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/CallGraphBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/Casting_8h.html +3 -0
- package/SVF-doxygen/html/html/Casting_8h_source.html +22 -22
- package/SVF-doxygen/html/html/ConsG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ContextDDA_8cpp_source.html +15 -15
- package/SVF-doxygen/html/html/ContextDDA_8h_source.html +3 -3
- package/SVF-doxygen/html/html/DCHG_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DCHG_8h_source.html +1 -1
- package/SVF-doxygen/html/html/DDAStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/DDAVFSolver_8h_source.html +82 -74
- package/SVF-doxygen/html/html/FSMPTA_8cpp_source.html +14 -14
- package/SVF-doxygen/html/html/FlowDDA_8h_source.html +9 -9
- package/SVF-doxygen/html/html/FlowSensitiveStat_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/FlowSensitive_8cpp_source.html +27 -21
- package/SVF-doxygen/html/html/FlowSensitive_8h_source.html +18 -18
- package/SVF-doxygen/html/html/IRAnnotator_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LLVMModule_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMUtil_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LLVMUtil_8h_source.html +1 -1
- package/SVF-doxygen/html/html/LocationSet_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/LockAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/LockResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MHP_8cpp_source.html +33 -38
- package/SVF-doxygen/html/html/MHP_8h_source.html +22 -22
- package/SVF-doxygen/html/html/MTAResultValidator_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/MTAStat_8cpp_source.html +3 -3
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysisImpl_8h_source.html +1 -1
- package/SVF-doxygen/html/html/PointerAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SVFGOPT_8cpp_source.html +12 -11
- package/SVF-doxygen/html/html/SVFGOPT_8h_source.html +11 -11
- package/SVF-doxygen/html/html/SVFIRBuilder_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/SVFValue_8h_source.html +1 -1
- package/SVF-doxygen/html/html/SaberSVFGBuilder_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/SrcSnkDDA_8cpp_source.html +8 -1
- package/SVF-doxygen/html/html/SymbolTableBuilder_8cpp_source.html +11 -11
- package/SVF-doxygen/html/html/SymbolTableBuilder_8h_source.html +8 -8
- package/SVF-doxygen/html/html/SymbolTableInfo_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/ThreadCallGraph_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/TypeAnalysis_8cpp_source.html +1 -1
- package/SVF-doxygen/html/html/VersionedFlowSensitive_8cpp_source.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AliasCFLGraphBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1AndersenBase.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1AndersenSFR.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1BVDataPTAImpl.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1CFLStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CHGBuilder.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1CSC.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1CondPTAImpl.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ConstraintGraph.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1ContextDDA.html +19 -19
- package/SVF-doxygen/html/html/classSVF_1_1DCHGraph.html +11 -11
- package/SVF-doxygen/html/html/classSVF_1_1DDAStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1DDAVFSolver.html +228 -220
- package/SVF-doxygen/html/html/classSVF_1_1FSMPTA.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1FlowDDA.html +17 -17
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitive.html +64 -58
- package/SVF-doxygen/html/html/classSVF_1_1FlowSensitiveStat.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1ForkJoinAnalysis.html +30 -38
- package/SVF-doxygen/html/html/classSVF_1_1IRAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LLVMModuleSet.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1LocationSet.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1LockAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1LockResultValidator.html +2 -2
- package/SVF-doxygen/html/html/classSVF_1_1MHP.html +67 -83
- package/SVF-doxygen/html/html/classSVF_1_1MHPValidator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAAnnotator.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1MTAResultValidator.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1MTASVFGBuilder.html +53 -53
- package/SVF-doxygen/html/html/classSVF_1_1MTAStat.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ObjTypeInfo.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1PointerAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1RaceResultValidator.html +5 -5
- package/SVF-doxygen/html/html/classSVF_1_1SVFCallInst.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SVFGOPT.html +46 -33
- package/SVF-doxygen/html/html/classSVF_1_1SVFIRBuilder.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1SaberSVFGBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1SrcSnkDDA.html +8 -1
- package/SVF-doxygen/html/html/classSVF_1_1SymbolTableBuilder.html +32 -32
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraph.html +3 -3
- package/SVF-doxygen/html/html/classSVF_1_1ThreadCallGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1TypeAnalysis.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VFCFLGraphBuilder.html +1 -1
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive.html +4 -4
- package/SVF-doxygen/html/html/classSVF_1_1VersionedFlowSensitive_1_1SCC.html +1 -1
- package/SVF-doxygen/html/html/include_2MTA_2MTAResultValidator_8h_source.html +2 -2
- package/SVF-doxygen/html/html/namespaceSVF_1_1LLVMUtil.html +7 -7
- package/SVF-doxygen/html/html/namespaceSVF_1_1SVFUtil.html +50 -17
- package/SVF-doxygen/html/html/namespaceSVF_1_1cppUtil.html +2 -2
- package/SVF-doxygen/html/html/namespacemembers_func_i.html +7 -7
- package/SVF-doxygen/html/html/namespacemembers_i.html +8 -8
- package/SVF-doxygen/html/html/search/all_9.js +1 -1
- package/SVF-doxygen/html/html/search/functions_8.js +1 -1
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__convert__val.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__convert__val_3_01To_00_01FromTy_00_01FromTy_01_4.html +3 -3
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01From_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5const_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html +4 -4
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__wrap.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1cast__retty__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html +2 -2
- package/SVF-doxygen/html/html/structSVF_1_1SVFUtil_1_1is__simple__type.html +2 -2
- package/SVF-doxygen/html/html/tools_2MTA_2MTAResultValidator_8h_source.html +1 -1
- package/include/DDA/DDAVFSolver.h +4 -8
- package/include/Graphs/SVFGOPT.h +2 -2
- package/include/MTA/MTAResultValidator.h +1 -1
- package/include/Util/Casting.h +7 -0
- package/lib/CFL/CFLStat.cpp +1 -1
- package/lib/DDA/ContextDDA.cpp +1 -1
- package/lib/Graphs/ConsG.cpp +2 -2
- package/lib/Graphs/SVFGOPT.cpp +15 -17
- package/lib/MTA/FSMPTA.cpp +7 -6
- package/lib/MTA/LockAnalysis.cpp +1 -1
- package/lib/MTA/MHP.cpp +216 -229
- package/lib/MemoryModel/LocationSet.cpp +1 -1
- package/lib/MemoryModel/PointerAnalysis.cpp +1 -1
- package/lib/SABER/SaberSVFGBuilder.cpp +1 -1
- package/lib/SABER/SrcSnkDDA.cpp +3 -3
- package/lib/SVF-LLVM/LLVMModule.cpp +1 -1
- package/lib/SVF-LLVM/LLVMUtil.cpp +1 -1
- package/lib/SVF-LLVM/SVFIRBuilder.cpp +4 -4
- package/lib/SVF-LLVM/SymbolTableBuilder.cpp +3 -2
- package/lib/SVFIR/SymbolTableInfo.cpp +1 -1
- package/lib/WPA/AndersenSFR.cpp +1 -1
- package/lib/WPA/FlowSensitive.cpp +23 -22
- package/package.json +1 -1
|
@@ -66,57 +66,57 @@ $(function() {
|
|
|
66
66
|
<div class="title">Casting.h</div> </div>
|
|
67
67
|
</div><!--header-->
|
|
68
68
|
<div class="contents">
|
|
69
|
-
<a href="Casting_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> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Casting.h</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Created on: 19Sep.,2018</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Author: yulei</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> */</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#ifndef INCLUDE_UTIL_CASTING_H_</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#define INCLUDE_UTIL_CASTING_H_</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">//===- llvm/Support/Casting.h - Allow flexible, checked, casts --*- C++ -*-===//</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">//</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// The LLVM Compiler Infrastructure</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">//</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// This file is distributed under the University of Illinois Open Source</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">// License. See LICENSE.TXT for details.</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">//</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">// This file defines the SVFUtil::isa<X>(), cast<X>(), dyn_cast<X>(), cast_or_null<X>(),</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">// and dyn_cast_or_null<X>() templates.</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">//</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <cassert></span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <memory></span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <type_traits></span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">//===-- Part of llvm/Support/Compiler.h - Compiler abstraction support --*- C++ -*-===//</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// Only use __has_cpp_attribute in C++ mode. GCC defines __has_cpp_attribute in</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">// C mode, but the :: in __has_cpp_attribute(scoped::attribute) is invalid.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#ifndef LLVM_HAS_CPP_ATTRIBUTE</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#if defined(__cplusplus) && defined(__has_cpp_attribute)</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"># define LLVM_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="Casting_8h.html#ac655bc80da3bd4c0e27a9ac4ac8163f9"> 38</a></span> <span class="preprocessor"># define LLVM_HAS_CPP_ATTRIBUTE(x) 0</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment">// Use the 'nodiscard' attribute in C++17 or newer mode.</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#if defined(__cplusplus) && __cplusplus > 201402L && LLVM_HAS_CPP_ATTRIBUTE(nodiscard)</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#define LLVM_NODISCARD [[nodiscard]]</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#elif LLVM_HAS_CPP_ATTRIBUTE(clang::warn_unused_result)</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#define LLVM_NODISCARD [[clang::warn_unused_result]]</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment">// Clang in C++14 mode claims that it has the 'nodiscard' attribute, but also</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">// warns in the pedantic mode that 'nodiscard' is a C++17 extension (PR33518).</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment">// Use the 'nodiscard' attribute in C++14 mode only with GCC.</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment">// TODO: remove this workaround when PR33518 is resolved.</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#elif defined(__GNUC__) && LLVM_HAS_CPP_ATTRIBUTE(nodiscard)</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">#define LLVM_NODISCARD [[nodiscard]]</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="Casting_8h.html#a8ce3b3743bf423cf00a9eb18a3f0f139"> 56</a></span> <span class="preprocessor">#define LLVM_NODISCARD</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html"> 62</a></span> <span class="keyword">namespace </span><a class="code" href="namespaceSVFUtil.html">SVFUtil</a></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">//===- Part of llvm/Support/type_traits.h - Simplfied type traits -------*- C++ -*-===//</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Enable = <span class="keywordtype">void</span>></div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer.html"> 70</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer.html">add_const_past_pointer</a></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> {</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer.html#a52fe829ad016bca3285dfba2b5b68d35"> 72</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer.html#a52fe829ad016bca3285dfba2b5b68d35">type</a> = <span class="keyword">const</span> T;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> };</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is_7fffc8df953a67082a10c9027356ecdf.html"> 76</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer.html">add_const_past_pointer</a><T, <a class="code" href="namespacestd.html">std</a>::enable_if_t<std::is_pointer<T>::value>></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> {</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is_7fffc8df953a67082a10c9027356ecdf.html#a6c70a94bde914aa0ca86e4fd9f6c1179"> 78</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is_7fffc8df953a67082a10c9027356ecdf.html#a6c70a94bde914aa0ca86e4fd9f6c1179">type</a> = <span class="keyword">const</span> std::remove_pointer_t<T> *;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> };</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Enable = <span class="keywordtype">void</span>></div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer.html"> 83</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer.html">add_lvalue_reference_if_not_pointer</a></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> {</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer.html#a871b0a9d4f1c68caca4d8e8b9ce29079"> 85</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer.html#a871b0a9d4f1c68caca4d8e8b9ce29079">type</a> = T &;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> };</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer_3_01T_00_01std_1_1enable__if__t915410d772a4855ec3d21a633a25ee09.html"> 89</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer.html">add_lvalue_reference_if_not_pointer</a><</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  T, <a class="code" href="namespacestd.html">std</a>::enable_if_t<std::is_pointer<T>::value>></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> {</div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer_3_01T_00_01std_1_1enable__if__t915410d772a4855ec3d21a633a25ee09.html#a7930ae77015a1bef7da45e112a92cbce"> 92</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer_3_01T_00_01std_1_1enable__if__t915410d772a4855ec3d21a633a25ee09.html#a7930ae77015a1bef7da45e112a92cbce">type</a> = T;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> };</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="comment">// SVFUtil::isa<x> Support Templates</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment">// Define a template that can be specialized by smart pointers to reflect the</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment">// fact that they are automatically dereferenced, and are not involved with the</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment">// template selection process... the default implementation is a noop.</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment">//</span></div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1simplify__type.html"> 103</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html">simplify_type</a></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> {</div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4"> 105</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">SimpleType</a> = From; <span class="comment">// The real type this represents...</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="comment">// An accessor to get the real value...</span></div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a8046f044d895a5c9aee85de9705161f9"> 108</a></span>  <span class="keyword">static</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">SimpleType</a> &<a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a8046f044d895a5c9aee85de9705161f9">getSimplifiedValue</a>(From &Val)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">return</span> Val;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> };</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html"> 114</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html">simplify_type</a><const From></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> {</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#aadddb18b44c9744dcc639a3de603151d"> 116</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#aadddb18b44c9744dcc639a3de603151d">NonConstSimpleType</a> = <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<From>::SimpleType</a>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#a8de25e1bb07ca0f995e5760065259531">SimpleType</a> =</div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#a8de25e1bb07ca0f995e5760065259531"> 118</a></span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer.html#a52fe829ad016bca3285dfba2b5b68d35">SVFUtil::add_const_past_pointer<NonConstSimpleType>::type</a>;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#abd3fdf0fdc5e4622a879b7890ad43789">RetType</a> =</div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#abd3fdf0fdc5e4622a879b7890ad43789"> 120</a></span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer.html#a871b0a9d4f1c68caca4d8e8b9ce29079">SVFUtil::add_lvalue_reference_if_not_pointer<SimpleType>::type</a>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#ac64f5d9a2ec97aebd7b377319d7f043b"> 122</a></span>  <span class="keyword">static</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#abd3fdf0fdc5e4622a879b7890ad43789">RetType</a> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#ac64f5d9a2ec97aebd7b377319d7f043b">getSimplifiedValue</a>(<span class="keyword">const</span> From& Val)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a8046f044d895a5c9aee85de9705161f9">simplify_type<From>::getSimplifiedValue</a>(const_cast<From&>(Val));</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> };</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment">// The core of the implementation of SVFUtil::isa<X> is here; To and From should be</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment">// the names of classes. This template can be specialized to customize the</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">// implementation of SVFUtil::isa<> without rewriting it from scratch.</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From, <span class="keyword">typename</span> Enabler = <span class="keywordtype">void</span>></div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl.html"> 132</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html">isa_impl</a></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> {</div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee"> 134</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee">doit</a>(<span class="keyword">const</span> From &Val)</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">return</span> To::classof(&Val);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> };</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From></div><div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl_3_01To_00_01From_00_01std_1_1enable__if__t_3_01std_1_1is__baseacbe8554d65d479d86c5b7d994311309.html"> 142</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html">isa_impl</a><To, From, <a class="code" href="namespacestd.html">std</a>::enable_if_t<std::is_base_of<To, From>::value>></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> {</div><div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl_3_01To_00_01From_00_01std_1_1enable__if__t_3_01std_1_1is__baseacbe8554d65d479d86c5b7d994311309.html#a1d03ef26d605e8f9cb9ecf68e69447dc"> 144</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl_3_01To_00_01From_00_01std_1_1enable__if__t_3_01std_1_1is__baseacbe8554d65d479d86c5b7d994311309.html#a1d03ef26d605e8f9cb9ecf68e69447dc">doit</a>(<span class="keyword">const</span> From &)</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> };</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html"> 150</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html">isa_impl_cl</a></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> {</div><div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html#afbe68352d888c0b15e9f46d4e378bacb"> 152</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html#afbe68352d888c0b15e9f46d4e378bacb">doit</a>(<span class="keyword">const</span> From &Val)</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee">isa_impl<To, From>::doit</a>(Val);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> };</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_4.html"> 158</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html">isa_impl_cl</a><To, const From></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> {</div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_4.html#af9a6a9c7660d5daedf8cd907788ac78d"> 160</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_4.html#af9a6a9c7660d5daedf8cd907788ac78d">doit</a>(<span class="keyword">const</span> From &Val)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee">isa_impl<To, From>::doit</a>(Val);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> };</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From></div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01std_1_1unique__ptr_3_01From_01_4_01_4.html"> 167</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html">isa_impl_cl</a><To, const <a class="code" href="namespacestd.html">std</a>::unique_ptr<From>></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> {</div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01std_1_1unique__ptr_3_01From_01_4_01_4.html#aff368847551a69d07b06237908594852"> 169</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01std_1_1unique__ptr_3_01From_01_4_01_4.html#aff368847551a69d07b06237908594852">doit</a>(<span class="keyword">const</span> std::unique_ptr<From> &Val)</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  {</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  assert(Val && <span class="stringliteral">"SVFUtil::isa<> used on a null pointer"</span>);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html#afbe68352d888c0b15e9f46d4e378bacb">isa_impl_cl<To, From>::doit</a>(*Val);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> };</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5_01_4.html"> 176</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html">isa_impl_cl</a><To, From*></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> {</div><div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5_01_4.html#a8add67bd107583b7c34fce53a748bcb0"> 178</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5_01_4.html#a8add67bd107583b7c34fce53a748bcb0">doit</a>(<span class="keyword">const</span> From *Val)</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  assert(Val && <span class="stringliteral">"SVFUtil::isa<> used on a null pointer"</span>);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee">isa_impl<To, From>::doit</a>(*Val);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> };</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div><div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5const_01_4.html"> 185</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html">isa_impl_cl</a><To, From*<span class="keyword">const</span>></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> {</div><div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5const_01_4.html#ac95b00b5d96e6b8457ecade4dbda3de3"> 187</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5const_01_4.html#ac95b00b5d96e6b8457ecade4dbda3de3">doit</a>(<span class="keyword">const</span> From *Val)</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  assert(Val && <span class="stringliteral">"SVFUtil::isa<> used on a null pointer"</span>);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee">isa_impl<To, From>::doit</a>(*Val);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> };</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5_01_4.html"> 194</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html">isa_impl_cl</a><To, const From*></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> {</div><div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5_01_4.html#a761b612c6ee476a28aabfbbc6b2da7ab"> 196</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5_01_4.html#a761b612c6ee476a28aabfbbc6b2da7ab">doit</a>(<span class="keyword">const</span> From *Val)</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  assert(Val && <span class="stringliteral">"SVFUtil::isa<> used on a null pointer"</span>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee">isa_impl<To, From>::doit</a>(*Val);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> };</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5const_01_4.html"> 203</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html">isa_impl_cl</a><To, const From*<span class="keyword">const</span>></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> {</div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5const_01_4.html#af73d1d0d7eb6f51090b4df47b497483a"> 205</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5const_01_4.html#af73d1d0d7eb6f51090b4df47b497483a">doit</a>(<span class="keyword">const</span> From *Val)</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  assert(Val && <span class="stringliteral">"SVFUtil::isa<> used on a null pointer"</span>);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee">isa_impl<To, From>::doit</a>(*Val);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  }</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> };</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keyword">template</span><<span class="keyword">typename</span> To, <span class="keyword">typename</span> From, <span class="keyword">typename</span> SimpleFrom></div><div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap.html"> 213</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap.html">isa_impl_wrap</a></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="comment">// When From != SimplifiedType, we can simplify the type some more by using</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="comment">// the simplify_type template.</span></div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap.html#aa0f166d8bdcd1e7b954cc29c19a40b04"> 217</a></span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap.html#aa0f166d8bdcd1e7b954cc29c19a40b04">doit</a>(<span class="keyword">const</span> From &Val)</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap.html">isa_impl_wrap</a><To, SimpleFrom,</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<SimpleFrom>::SimpleType</a>>::doit(</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html">simplify_type<const From>::getSimplifiedValue</a>(Val));</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> };</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keyword">template</span><<span class="keyword">typename</span> To, <span class="keyword">typename</span> FromTy></div><div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html"> 226</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap.html">isa_impl_wrap</a><To, FromTy, FromTy></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> {</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="comment">// When From == SimpleType, we are as simple as we are going to get.</span></div><div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html#a414dc089b04305b8580dede7a6337404"> 229</a></span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html#a414dc089b04305b8580dede7a6337404">doit</a>(<span class="keyword">const</span> FromTy &Val)</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html#afbe68352d888c0b15e9f46d4e378bacb">isa_impl_cl<To,FromTy>::doit</a>(Val);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  }</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> };</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="comment">// SVFUtil::isa<X> - Return true if the parameter to the template is an instance of the</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="comment">// template type argument. Used like this:</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="comment">//</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment">// if (SVFUtil::isa<Type>(myVal)) { ... }</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment">//</span></div><div class="line"><a name="l00240"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#a5c8cbc986cccb9d84f87aae162df3737"> 240</a></span> <span class="keyword">template</span> <<span class="keyword">class</span> X, <span class="keyword">class</span> Y> <a class="code" href="Casting_8h.html#a8ce3b3743bf423cf00a9eb18a3f0f139">LLVM_NODISCARD</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5c8cbc986cccb9d84f87aae162df3737">isa</a>(<span class="keyword">const</span> Y &Val)</div><div class="line"><a name="l00241"></a><span class="lineno"> 241</span> {</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap.html">isa_impl_wrap</a><X, <span class="keyword">const</span> Y,</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<const Y>::SimpleType</a>>::doit(Val);</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span> }</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> </div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="comment">// cast<x> Support Templates</span></div><div class="line"><a name="l00248"></a><span class="lineno"> 248</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> </div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty.html"> 250</a></span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html">cast_retty</a>;</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> </div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span> <span class="comment">// Calculate what type the 'cast' function should return, based on a requested</span></div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="comment">// type of To and a source type of From.</span></div><div class="line"><a name="l00254"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html"> 254</a></span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html">cast_retty_impl</a></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> {</div><div class="line"><a name="l00256"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html#a5f8f6d651931eba7e0fa14c26a691a04"> 256</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html#a5f8f6d651931eba7e0fa14c26a691a04">ret_type</a> = To &; <span class="comment">// Normal case, return Ty&</span></div><div class="line"><a name="l00257"></a><span class="lineno"> 257</span> };</div><div class="line"><a name="l00258"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_4.html"> 258</a></span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html">cast_retty_impl</a><To, const From></div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> {</div><div class="line"><a name="l00260"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_4.html#ad0bc349135b60cc51fd040b615a979f7"> 260</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_4.html#ad0bc349135b60cc51fd040b615a979f7">ret_type</a> = <span class="keyword">const</span> To &; <span class="comment">// Normal case, return Ty&</span></div><div class="line"><a name="l00261"></a><span class="lineno"> 261</span> };</div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> </div><div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01From_01_5_01_4.html"> 263</a></span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html">cast_retty_impl</a><To, From*></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> {</div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01From_01_5_01_4.html#a86c02dc15b65d0c052ea4447b3fb6333"> 265</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01From_01_5_01_4.html#a86c02dc15b65d0c052ea4447b3fb6333">ret_type</a> = To *; <span class="comment">// Pointer arg case, return Ty*</span></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> };</div><div class="line"><a name="l00267"></a><span class="lineno"> 267</span> </div><div class="line"><a name="l00268"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5_01_4.html"> 268</a></span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html">cast_retty_impl</a><To, const From*></div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> {</div><div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5_01_4.html#a98a60de95a331a34dcbad6da9961a9b7"> 270</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5_01_4.html#a98a60de95a331a34dcbad6da9961a9b7">ret_type</a> = <span class="keyword">const</span> To *; <span class="comment">// Constant pointer arg case, return const Ty*</span></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> };</div><div class="line"><a name="l00272"></a><span class="lineno"> 272</span> </div><div class="line"><a name="l00273"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5const_01_4.html"> 273</a></span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html">cast_retty_impl</a><To, const From*<span class="keyword">const</span>></div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> {</div><div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5const_01_4.html#add8668ca96bbf0808c146cc81c62267c"> 275</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5const_01_4.html#add8668ca96bbf0808c146cc81c62267c">ret_type</a> = <span class="keyword">const</span> To *; <span class="comment">// Constant pointer arg case, return const Ty*</span></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> };</div><div class="line"><a name="l00277"></a><span class="lineno"> 277</span> </div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> <span class="keyword">template</span> <<span class="keyword">class</span> To, <span class="keyword">class</span> From></div><div class="line"><a name="l00279"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html"> 279</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html">cast_retty_impl</a><To, <a class="code" href="namespacestd.html">std</a>::unique_ptr<From>></div><div class="line"><a name="l00280"></a><span class="lineno"> 280</span> {</div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a9d08abc346f3b77c487eba144f3cbd8d"> 282</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a9d08abc346f3b77c487eba144f3cbd8d">PointerType</a> = <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html#a5f8f6d651931eba7e0fa14c26a691a04">cast_retty_impl<To, From *>::ret_type</a>;</div><div class="line"><a name="l00283"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a052f7cd3a81e368060f132bf0268fa68"> 283</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a052f7cd3a81e368060f132bf0268fa68">ResultType</a> = <span class="keyword">typename</span> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">std::remove_pointer<PointerType>::type</a>;</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a3bf80190e39c339d4e3ec703789ae845"> 286</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a3bf80190e39c339d4e3ec703789ae845">ret_type</a> = std::unique_ptr<ResultType>;</div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> };</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> </div><div class="line"><a name="l00289"></a><span class="lineno"> 289</span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From, <span class="keyword">class</span> SimpleFrom></div><div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap.html"> 290</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap.html">cast_retty_wrap</a></div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> {</div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span>  <span class="comment">// When the simplified type and the from type are not the same, use the type</span></div><div class="line"><a name="l00293"></a><span class="lineno"> 293</span>  <span class="comment">// simplifier to reduce the type, then reuse cast_retty_impl to get the</span></div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span>  <span class="comment">// resultant type.</span></div><div class="line"><a name="l00295"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap.html#af3d80ab43e47626f32c91a6c4454e82e"> 295</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap.html#af3d80ab43e47626f32c91a6c4454e82e">ret_type</a> = <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<To, SimpleFrom>::ret_type</a>;</div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> };</div><div class="line"><a name="l00297"></a><span class="lineno"> 297</span> </div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> FromTy></div><div class="line"><a name="l00299"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html"> 299</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap.html">cast_retty_wrap</a><To, FromTy, FromTy></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span> {</div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="comment">// When the simplified type is equal to the from type, use it directly.</span></div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html#ad989c130f2b6cd5a0f1ba0c7abd62b9a"> 302</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html#ad989c130f2b6cd5a0f1ba0c7abd62b9a">ret_type</a> = <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html#a5f8f6d651931eba7e0fa14c26a691a04">cast_retty_impl<To,FromTy>::ret_type</a>;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> };</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From></div><div class="line"><a name="l00306"></a><span class="lineno"> 306</span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html">cast_retty</a></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html#ad989c130f2b6cd5a0f1ba0c7abd62b9a">ret_type</a> = <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap.html">cast_retty_wrap</a><</div><div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b"> 309</a></span>  To, From, <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<From>::SimpleType</a>><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">::ret_type</a>;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> };</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="comment">// Ensure the non-simple values are converted using the simplify_type template</span></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="comment">// that may be specialized by smart pointers...</span></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> <span class="comment">//</span></div><div class="line"><a name="l00315"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html"> 315</a></span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From, <span class="keyword">class</span> SimpleFrom> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html">cast_convert_val</a></div><div class="line"><a name="l00316"></a><span class="lineno"> 316</span> {</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span>  <span class="comment">// This is not a simple type, use the template to simplify it...</span></div><div class="line"><a name="l00318"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html#a42987ff69d76fef88044fe0b19743239"> 318</a></span>  <span class="keyword">static</span> <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<To, From>::ret_type</a> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html#a42987ff69d76fef88044fe0b19743239">doit</a>(From &Val)</div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span>  {</div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html">cast_convert_val</a><To, SimpleFrom,</div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<SimpleFrom>::SimpleType</a>>::doit(</div><div class="line"><a name="l00322"></a><span class="lineno"> 322</span>  <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html">simplify_type<From>::getSimplifiedValue</a>(Val));</div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span>  }</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span> };</div><div class="line"><a name="l00325"></a><span class="lineno"> 325</span> </div><div class="line"><a name="l00326"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__convert__val_3_01To_00_01FromTy_00_01FromTy_01_4.html"> 326</a></span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> FromTy> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html">cast_convert_val</a><To,FromTy,FromTy></div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span> {</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="comment">// This _is_ a simple type, just cast it.</span></div><div class="line"><a name="l00329"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__convert__val_3_01To_00_01FromTy_00_01FromTy_01_4.html#a2dd56ef15d86f61c7fef34dc15173e4a"> 329</a></span>  <span class="keyword">static</span> <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<To, FromTy>::ret_type</a> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val_3_01To_00_01FromTy_00_01FromTy_01_4.html#a2dd56ef15d86f61c7fef34dc15173e4a">doit</a>(<span class="keyword">const</span> FromTy &Val)</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  {</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<To, FromTy>::ret_type</a> Res2</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span>  = (<span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<To, FromTy>::ret_type</a>)const_cast<FromTy&>(Val);</div><div class="line"><a name="l00333"></a><span class="lineno"> 333</span>  <span class="keywordflow">return</span> Res2;</div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span>  }</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span> };</div><div class="line"><a name="l00336"></a><span class="lineno"> 336</span> </div><div class="line"><a name="l00337"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1is__simple__type.html"> 337</a></span> <span class="keyword">template</span> <<span class="keyword">class</span> X> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1is__simple__type.html">is_simple_type</a></div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span> {</div><div class="line"><a name="l00339"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1is__simple__type.html#a700d43a1b318fb30fa9472da323cb34f"> 339</a></span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> value =</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  std::is_same<X, typename simplify_type<X>::SimpleType>::value;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span> };</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> </div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> <span class="comment">// cast<X> - Return the argument parameter cast to the specified type. This</span></div><div class="line"><a name="l00344"></a><span class="lineno"> 344</span> <span class="comment">// casting operator asserts that the type is correct, so it does not return null</span></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> <span class="comment">// on failure. It does not allow a null argument (use cast_or_null for that).</span></div><div class="line"><a name="l00346"></a><span class="lineno"> 346</span> <span class="comment">// It is typically used like this:</span></div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span> <span class="comment">//</span></div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> <span class="comment">// cast<Instruction>(myVal)->getParent()</span></div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> <span class="comment">//</span></div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="keyword">template</span> <<span class="keyword">class</span> X, <span class="keyword">class</span> Y></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="keyword">inline</span> std::enable_if_t<!is_simple_type<Y>::value,</div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<X, const Y>::ret_type</a>></div><div class="line"><a name="l00353"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#a3ddf7041e685da8ede81cd773dd47761"> 353</a></span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a3ddf7041e685da8ede81cd773dd47761">cast</a>(<span class="keyword">const</span> Y &Val)</div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> {</div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span>  assert(SVFUtil::isa<X>(Val) && <span class="stringliteral">"cast<Ty>() argument of incompatible type!"</span>);</div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html">cast_convert_val</a><</div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span>  X, <span class="keyword">const</span> Y, <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<const Y>::SimpleType</a>>::doit(Val);</div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> }</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span> </div><div class="line"><a name="l00360"></a><span class="lineno"> 360</span> <span class="keyword">template</span> <<span class="keyword">class</span> X, <span class="keyword">class</span> Y></div><div class="line"><a name="l00361"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#a406dd9baf2ce66235d482fd6c6121b2c"> 361</a></span> <span class="keyword">inline</span> <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<X, Y>::ret_type</a> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a3ddf7041e685da8ede81cd773dd47761">cast</a>(Y &Val)</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span> {</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  assert(SVFUtil::isa<X>(Val) && <span class="stringliteral">"cast<Ty>() argument of incompatible type!"</span>);</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html">cast_convert_val</a><X, Y,</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<Y>::SimpleType</a>>::doit(Val);</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> }</div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> </div><div class="line"><a name="l00368"></a><span class="lineno"> 368</span> <span class="keyword">template</span> <<span class="keyword">class</span> X, <span class="keyword">class</span> Y></div><div class="line"><a name="l00369"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#acc2419a55c0427571f11ad14db2fe481"> 369</a></span> <span class="keyword">inline</span> <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<X, Y *>::ret_type</a> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a3ddf7041e685da8ede81cd773dd47761">cast</a>(Y *Val)</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span> {</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  assert(SVFUtil::isa<X>(Val) && <span class="stringliteral">"cast<Ty>() argument of incompatible type!"</span>);</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html">cast_convert_val</a><X, Y*,</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<Y*>::SimpleType</a>>::doit(Val);</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span> }</div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> </div><div class="line"><a name="l00376"></a><span class="lineno"> 376</span> <span class="keyword">template</span> <<span class="keyword">class</span> X, <span class="keyword">class</span> Y></div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> <span class="keyword">inline</span> <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html">cast_retty<X, std::unique_ptr<Y></a>>::ret_type</div><div class="line"><a name="l00378"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#af3ca049b4ce83c874e231f5e13bf36a8"> 378</a></span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a3ddf7041e685da8ede81cd773dd47761">cast</a>(std::unique_ptr<Y> &&Val)</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span> {</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  assert(SVFUtil::isa<X>(Val.get()) && <span class="stringliteral">"cast<Ty>() argument of incompatible type!"</span>);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span>  <span class="keyword">using</span> ret_type = <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html">cast_retty<X, std::unique_ptr<Y></a>>::ret_type;</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span>  <span class="keywordflow">return</span> ret_type(</div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span>  <a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html">cast_convert_val</a><X, Y *, <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<Y *>::SimpleType</a>>::doit(</div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span>  Val.release()));</div><div class="line"><a name="l00385"></a><span class="lineno"> 385</span> }</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> </div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span> <span class="comment">// dyn_cast<X> - Return the argument parameter cast to the specified type. This</span></div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span> <span class="comment">// casting operator returns null if the argument is of the wrong type, so it can</span></div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span> <span class="comment">// be used to test for a type as well as cast if successful. This should be</span></div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span> <span class="comment">// used in the context of an if statement like this:</span></div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span> <span class="comment">//</span></div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> <span class="comment">// if (const Instruction* I = dyn_cast<Instruction>(myVal)) { ... }</span></div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> <span class="comment">//</span></div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> </div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="keyword">template</span> <<span class="keyword">class</span> X, <span class="keyword">class</span> Y></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <a class="code" href="Casting_8h.html#a8ce3b3743bf423cf00a9eb18a3f0f139">LLVM_NODISCARD</a> <span class="keyword">inline</span> std::enable_if_t<</div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> !<a class="code" href="structSVF_1_1SVFUtil_1_1is__simple__type.html">is_simple_type<Y>::value</a>, <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<X, const Y>::ret_type</a>></div><div class="line"><a name="l00398"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e"> 398</a></span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">dyn_cast</a>(<span class="keyword">const</span> Y &Val)</div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> {</div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span>  <span class="keywordflow">return</span> SVFUtil::isa<X>(Val) ? SVFUtil::cast<X>(Val) : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> }</div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span> </div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <span class="keyword">template</span> <<span class="keyword">class</span> X, <span class="keyword">class</span> Y></div><div class="line"><a name="l00404"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#a52d852ba8fa569e858565b3bba403656"> 404</a></span> <a class="code" href="Casting_8h.html#a8ce3b3743bf423cf00a9eb18a3f0f139">LLVM_NODISCARD</a> <span class="keyword">inline</span> <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<X, Y>::ret_type</a> <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">dyn_cast</a>(Y &Val)</div><div class="line"><a name="l00405"></a><span class="lineno"> 405</span> {</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span>  <span class="keywordflow">return</span> SVFUtil::isa<X>(Val) ? SVFUtil::cast<X>(Val) : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span> }</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> </div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> <span class="keyword">template</span> <<span class="keyword">class</span> X, <span class="keyword">class</span> Y></div><div class="line"><a name="l00410"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#a105c5c5e97d56533fb2b3ba7a0bc59f3"> 410</a></span> <a class="code" href="Casting_8h.html#a8ce3b3743bf423cf00a9eb18a3f0f139">LLVM_NODISCARD</a> <span class="keyword">inline</span> <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<X, Y *>::ret_type</a> <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">dyn_cast</a>(Y *Val)</div><div class="line"><a name="l00411"></a><span class="lineno"> 411</span> {</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span>  <span class="keywordflow">return</span> SVFUtil::isa<X>(Val) ? SVFUtil::cast<X>(Val) : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span> }</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span> </div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> } <span class="comment">// End namespace SVFUtil</span></div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span> </div><div class="line"><a name="l00417"></a><span class="lineno"> 417</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span> </div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span> <span class="preprocessor">#endif </span><span class="comment">/* INCLUDE_UTIL_CASTING_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_4_html_af9a6a9c7660d5daedf8cd907788ac78d"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_4.html#af9a6a9c7660d5daedf8cd907788ac78d">SVF::SVFUtil::isa_impl_cl< To, const From >::doit</a></div><div class="ttdeci">static bool doit(const From &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00160">Casting.h:160</a></div></div>
|
|
69
|
+
<a href="Casting_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> <span class="comment">/*</span></div><div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="comment"> * Casting.h</span></div><div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="comment"> *</span></div><div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="comment"> * Created on: 19Sep.,2018</span></div><div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="comment"> * Author: yulei</span></div><div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="comment"> */</span></div><div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div><div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#ifndef INCLUDE_UTIL_CASTING_H_</span></div><div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#define INCLUDE_UTIL_CASTING_H_</span></div><div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div><div class="line"><a name="l00011"></a><span class="lineno"> 11</span> </div><div class="line"><a name="l00012"></a><span class="lineno"> 12</span> <span class="comment">//===- llvm/Support/Casting.h - Allow flexible, checked, casts --*- C++ -*-===//</span></div><div class="line"><a name="l00013"></a><span class="lineno"> 13</span> <span class="comment">//</span></div><div class="line"><a name="l00014"></a><span class="lineno"> 14</span> <span class="comment">// The LLVM Compiler Infrastructure</span></div><div class="line"><a name="l00015"></a><span class="lineno"> 15</span> <span class="comment">//</span></div><div class="line"><a name="l00016"></a><span class="lineno"> 16</span> <span class="comment">// This file is distributed under the University of Illinois Open Source</span></div><div class="line"><a name="l00017"></a><span class="lineno"> 17</span> <span class="comment">// License. See LICENSE.TXT for details.</span></div><div class="line"><a name="l00018"></a><span class="lineno"> 18</span> <span class="comment">//</span></div><div class="line"><a name="l00019"></a><span class="lineno"> 19</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00020"></a><span class="lineno"> 20</span> <span class="comment">//</span></div><div class="line"><a name="l00021"></a><span class="lineno"> 21</span> <span class="comment">// This file defines the SVFUtil::isa<X>(), cast<X>(), dyn_cast<X>(), cast_or_null<X>(),</span></div><div class="line"><a name="l00022"></a><span class="lineno"> 22</span> <span class="comment">// and dyn_cast_or_null<X>() templates.</span></div><div class="line"><a name="l00023"></a><span class="lineno"> 23</span> <span class="comment">//</span></div><div class="line"><a name="l00024"></a><span class="lineno"> 24</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00025"></a><span class="lineno"> 25</span> </div><div class="line"><a name="l00026"></a><span class="lineno"> 26</span> <span class="preprocessor">#include <cassert></span></div><div class="line"><a name="l00027"></a><span class="lineno"> 27</span> <span class="preprocessor">#include <memory></span></div><div class="line"><a name="l00028"></a><span class="lineno"> 28</span> <span class="preprocessor">#include <type_traits></span></div><div class="line"><a name="l00029"></a><span class="lineno"> 29</span> </div><div class="line"><a name="l00030"></a><span class="lineno"> 30</span> <span class="comment">//===-- Part of llvm/Support/Compiler.h - Compiler abstraction support --*- C++ -*-===//</span></div><div class="line"><a name="l00031"></a><span class="lineno"> 31</span> </div><div class="line"><a name="l00032"></a><span class="lineno"> 32</span> <span class="comment">// Only use __has_cpp_attribute in C++ mode. GCC defines __has_cpp_attribute in</span></div><div class="line"><a name="l00033"></a><span class="lineno"> 33</span> <span class="comment">// C mode, but the :: in __has_cpp_attribute(scoped::attribute) is invalid.</span></div><div class="line"><a name="l00034"></a><span class="lineno"> 34</span> <span class="preprocessor">#ifndef LLVM_HAS_CPP_ATTRIBUTE</span></div><div class="line"><a name="l00035"></a><span class="lineno"> 35</span> <span class="preprocessor">#if defined(__cplusplus) && defined(__has_cpp_attribute)</span></div><div class="line"><a name="l00036"></a><span class="lineno"> 36</span> <span class="preprocessor"># define LLVM_HAS_CPP_ATTRIBUTE(x) __has_cpp_attribute(x)</span></div><div class="line"><a name="l00037"></a><span class="lineno"> 37</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00038"></a><span class="lineno"><a class="line" href="Casting_8h.html#ac655bc80da3bd4c0e27a9ac4ac8163f9"> 38</a></span> <span class="preprocessor"># define LLVM_HAS_CPP_ATTRIBUTE(x) 0</span></div><div class="line"><a name="l00039"></a><span class="lineno"> 39</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00040"></a><span class="lineno"> 40</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00041"></a><span class="lineno"> 41</span> </div><div class="line"><a name="l00043"></a><span class="lineno"> 43</span> </div><div class="line"><a name="l00044"></a><span class="lineno"> 44</span> <span class="comment">// Use the 'nodiscard' attribute in C++17 or newer mode.</span></div><div class="line"><a name="l00045"></a><span class="lineno"> 45</span> <span class="preprocessor">#if defined(__cplusplus) && __cplusplus > 201402L && LLVM_HAS_CPP_ATTRIBUTE(nodiscard)</span></div><div class="line"><a name="l00046"></a><span class="lineno"> 46</span> <span class="preprocessor">#define LLVM_NODISCARD [[nodiscard]]</span></div><div class="line"><a name="l00047"></a><span class="lineno"> 47</span> <span class="preprocessor">#elif LLVM_HAS_CPP_ATTRIBUTE(clang::warn_unused_result)</span></div><div class="line"><a name="l00048"></a><span class="lineno"> 48</span> <span class="preprocessor">#define LLVM_NODISCARD [[clang::warn_unused_result]]</span></div><div class="line"><a name="l00049"></a><span class="lineno"> 49</span> <span class="comment">// Clang in C++14 mode claims that it has the 'nodiscard' attribute, but also</span></div><div class="line"><a name="l00050"></a><span class="lineno"> 50</span> <span class="comment">// warns in the pedantic mode that 'nodiscard' is a C++17 extension (PR33518).</span></div><div class="line"><a name="l00051"></a><span class="lineno"> 51</span> <span class="comment">// Use the 'nodiscard' attribute in C++14 mode only with GCC.</span></div><div class="line"><a name="l00052"></a><span class="lineno"> 52</span> <span class="comment">// TODO: remove this workaround when PR33518 is resolved.</span></div><div class="line"><a name="l00053"></a><span class="lineno"> 53</span> <span class="preprocessor">#elif defined(__GNUC__) && LLVM_HAS_CPP_ATTRIBUTE(nodiscard)</span></div><div class="line"><a name="l00054"></a><span class="lineno"> 54</span> <span class="preprocessor">#define LLVM_NODISCARD [[nodiscard]]</span></div><div class="line"><a name="l00055"></a><span class="lineno"> 55</span> <span class="preprocessor">#else</span></div><div class="line"><a name="l00056"></a><span class="lineno"><a class="line" href="Casting_8h.html#a8ce3b3743bf423cf00a9eb18a3f0f139"> 56</a></span> <span class="preprocessor">#define LLVM_NODISCARD</span></div><div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="preprocessor">#endif</span></div><div class="line"><a name="l00058"></a><span class="lineno"> 58</span> </div><div class="line"><a name="l00059"></a><span class="lineno"> 59</span> <span class="keyword">namespace </span><a class="code" href="namespaceSVF.html">SVF</a></div><div class="line"><a name="l00060"></a><span class="lineno"> 60</span> {</div><div class="line"><a name="l00061"></a><span class="lineno"> 61</span> </div><div class="line"><a name="l00062"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html"> 62</a></span> <span class="keyword">namespace </span><a class="code" href="namespaceSVFUtil.html">SVFUtil</a></div><div class="line"><a name="l00063"></a><span class="lineno"> 63</span> {</div><div class="line"><a name="l00064"></a><span class="lineno"> 64</span> </div><div class="line"><a name="l00065"></a><span class="lineno"> 65</span> <span class="comment">//===- Part of llvm/Support/type_traits.h - Simplfied type traits -------*- C++ -*-===//</span></div><div class="line"><a name="l00066"></a><span class="lineno"> 66</span> </div><div class="line"><a name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Enable = <span class="keywordtype">void</span>></div><div class="line"><a name="l00070"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer.html"> 70</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer.html">add_const_past_pointer</a></div><div class="line"><a name="l00071"></a><span class="lineno"> 71</span> {</div><div class="line"><a name="l00072"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer.html#a52fe829ad016bca3285dfba2b5b68d35"> 72</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer.html#a52fe829ad016bca3285dfba2b5b68d35">type</a> = <span class="keyword">const</span> T;</div><div class="line"><a name="l00073"></a><span class="lineno"> 73</span> };</div><div class="line"><a name="l00074"></a><span class="lineno"> 74</span> </div><div class="line"><a name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00076"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is_7fffc8df953a67082a10c9027356ecdf.html"> 76</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer.html">add_const_past_pointer</a><T, <a class="code" href="namespacestd.html">std</a>::enable_if_t<std::is_pointer<T>::value>></div><div class="line"><a name="l00077"></a><span class="lineno"> 77</span> {</div><div class="line"><a name="l00078"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is_7fffc8df953a67082a10c9027356ecdf.html#a6c70a94bde914aa0ca86e4fd9f6c1179"> 78</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is_7fffc8df953a67082a10c9027356ecdf.html#a6c70a94bde914aa0ca86e4fd9f6c1179">type</a> = <span class="keyword">const</span> std::remove_pointer_t<T> *;</div><div class="line"><a name="l00079"></a><span class="lineno"> 79</span> };</div><div class="line"><a name="l00080"></a><span class="lineno"> 80</span> </div><div class="line"><a name="l00082"></a><span class="lineno"> 82</span> <span class="keyword">template</span><<span class="keyword">typename</span> T, <span class="keyword">typename</span> Enable = <span class="keywordtype">void</span>></div><div class="line"><a name="l00083"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer.html"> 83</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer.html">add_lvalue_reference_if_not_pointer</a></div><div class="line"><a name="l00084"></a><span class="lineno"> 84</span> {</div><div class="line"><a name="l00085"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer.html#a871b0a9d4f1c68caca4d8e8b9ce29079"> 85</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer.html#a871b0a9d4f1c68caca4d8e8b9ce29079">type</a> = T &;</div><div class="line"><a name="l00086"></a><span class="lineno"> 86</span> };</div><div class="line"><a name="l00087"></a><span class="lineno"> 87</span> </div><div class="line"><a name="l00088"></a><span class="lineno"> 88</span> <span class="keyword">template</span> <<span class="keyword">typename</span> T></div><div class="line"><a name="l00089"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer_3_01T_00_01std_1_1enable__if__t915410d772a4855ec3d21a633a25ee09.html"> 89</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer.html">add_lvalue_reference_if_not_pointer</a><</div><div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  T, <a class="code" href="namespacestd.html">std</a>::enable_if_t<std::is_pointer<T>::value>></div><div class="line"><a name="l00091"></a><span class="lineno"> 91</span> {</div><div class="line"><a name="l00092"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer_3_01T_00_01std_1_1enable__if__t915410d772a4855ec3d21a633a25ee09.html#a7930ae77015a1bef7da45e112a92cbce"> 92</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer_3_01T_00_01std_1_1enable__if__t915410d772a4855ec3d21a633a25ee09.html#a7930ae77015a1bef7da45e112a92cbce">type</a> = T;</div><div class="line"><a name="l00093"></a><span class="lineno"> 93</span> };</div><div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div><div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="comment">// SVFUtil::isa<x> Support Templates</span></div><div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00098"></a><span class="lineno"> 98</span> </div><div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment">// Define a template that can be specialized by smart pointers to reflect the</span></div><div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment">// fact that they are automatically dereferenced, and are not involved with the</span></div><div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment">// template selection process... the default implementation is a noop.</span></div><div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment">//</span></div><div class="line"><a name="l00103"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1simplify__type.html"> 103</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html">simplify_type</a></div><div class="line"><a name="l00104"></a><span class="lineno"> 104</span> {</div><div class="line"><a name="l00105"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4"> 105</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">SimpleType</a> = From; <span class="comment">// The real type this represents...</span></div><div class="line"><a name="l00106"></a><span class="lineno"> 106</span> </div><div class="line"><a name="l00107"></a><span class="lineno"> 107</span>  <span class="comment">// An accessor to get the real value...</span></div><div class="line"><a name="l00108"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a8046f044d895a5c9aee85de9705161f9"> 108</a></span>  <span class="keyword">static</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">SimpleType</a> &<a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a8046f044d895a5c9aee85de9705161f9">getSimplifiedValue</a>(From &Val)</div><div class="line"><a name="l00109"></a><span class="lineno"> 109</span>  {</div><div class="line"><a name="l00110"></a><span class="lineno"> 110</span>  <span class="keywordflow">return</span> Val;</div><div class="line"><a name="l00111"></a><span class="lineno"> 111</span>  }</div><div class="line"><a name="l00112"></a><span class="lineno"> 112</span> };</div><div class="line"><a name="l00113"></a><span class="lineno"> 113</span> </div><div class="line"><a name="l00114"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html"> 114</a></span> <span class="keyword">template</span><<span class="keyword">typename</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html">simplify_type</a><const From></div><div class="line"><a name="l00115"></a><span class="lineno"> 115</span> {</div><div class="line"><a name="l00116"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#aadddb18b44c9744dcc639a3de603151d"> 116</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#aadddb18b44c9744dcc639a3de603151d">NonConstSimpleType</a> = <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<From>::SimpleType</a>;</div><div class="line"><a name="l00117"></a><span class="lineno"> 117</span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#a8de25e1bb07ca0f995e5760065259531">SimpleType</a> =</div><div class="line"><a name="l00118"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#a8de25e1bb07ca0f995e5760065259531"> 118</a></span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1add__const__past__pointer.html#a52fe829ad016bca3285dfba2b5b68d35">SVFUtil::add_const_past_pointer<NonConstSimpleType>::type</a>;</div><div class="line"><a name="l00119"></a><span class="lineno"> 119</span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#abd3fdf0fdc5e4622a879b7890ad43789">RetType</a> =</div><div class="line"><a name="l00120"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#abd3fdf0fdc5e4622a879b7890ad43789"> 120</a></span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer.html#a871b0a9d4f1c68caca4d8e8b9ce29079">SVFUtil::add_lvalue_reference_if_not_pointer<SimpleType>::type</a>;</div><div class="line"><a name="l00121"></a><span class="lineno"> 121</span> </div><div class="line"><a name="l00122"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#ac64f5d9a2ec97aebd7b377319d7f043b"> 122</a></span>  <span class="keyword">static</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#abd3fdf0fdc5e4622a879b7890ad43789">RetType</a> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#ac64f5d9a2ec97aebd7b377319d7f043b">getSimplifiedValue</a>(<span class="keyword">const</span> From& Val)</div><div class="line"><a name="l00123"></a><span class="lineno"> 123</span>  {</div><div class="line"><a name="l00124"></a><span class="lineno"> 124</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a8046f044d895a5c9aee85de9705161f9">simplify_type<From>::getSimplifiedValue</a>(const_cast<From&>(Val));</div><div class="line"><a name="l00125"></a><span class="lineno"> 125</span>  }</div><div class="line"><a name="l00126"></a><span class="lineno"> 126</span> };</div><div class="line"><a name="l00127"></a><span class="lineno"> 127</span> </div><div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment">// The core of the implementation of SVFUtil::isa<X> is here; To and From should be</span></div><div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment">// the names of classes. This template can be specialized to customize the</span></div><div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment">// implementation of SVFUtil::isa<> without rewriting it from scratch.</span></div><div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From, <span class="keyword">typename</span> Enabler = <span class="keywordtype">void</span>></div><div class="line"><a name="l00132"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl.html"> 132</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html">isa_impl</a></div><div class="line"><a name="l00133"></a><span class="lineno"> 133</span> {</div><div class="line"><a name="l00134"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee"> 134</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee">doit</a>(<span class="keyword">const</span> From &Val)</div><div class="line"><a name="l00135"></a><span class="lineno"> 135</span>  {</div><div class="line"><a name="l00136"></a><span class="lineno"> 136</span>  <span class="keywordflow">return</span> To::classof(&Val);</div><div class="line"><a name="l00137"></a><span class="lineno"> 137</span>  }</div><div class="line"><a name="l00138"></a><span class="lineno"> 138</span> };</div><div class="line"><a name="l00139"></a><span class="lineno"> 139</span> </div><div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From></div><div class="line"><a name="l00142"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl_3_01To_00_01From_00_01std_1_1enable__if__t_3_01std_1_1is__baseacbe8554d65d479d86c5b7d994311309.html"> 142</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html">isa_impl</a><To, From, <a class="code" href="namespacestd.html">std</a>::enable_if_t<std::is_base_of<To, From>::value>></div><div class="line"><a name="l00143"></a><span class="lineno"> 143</span> {</div><div class="line"><a name="l00144"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl_3_01To_00_01From_00_01std_1_1enable__if__t_3_01std_1_1is__baseacbe8554d65d479d86c5b7d994311309.html#a1d03ef26d605e8f9cb9ecf68e69447dc"> 144</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl_3_01To_00_01From_00_01std_1_1enable__if__t_3_01std_1_1is__baseacbe8554d65d479d86c5b7d994311309.html#a1d03ef26d605e8f9cb9ecf68e69447dc">doit</a>(<span class="keyword">const</span> From &)</div><div class="line"><a name="l00145"></a><span class="lineno"> 145</span>  {</div><div class="line"><a name="l00146"></a><span class="lineno"> 146</span>  <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00147"></a><span class="lineno"> 147</span>  }</div><div class="line"><a name="l00148"></a><span class="lineno"> 148</span> };</div><div class="line"><a name="l00149"></a><span class="lineno"> 149</span> </div><div class="line"><a name="l00150"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html"> 150</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html">isa_impl_cl</a></div><div class="line"><a name="l00151"></a><span class="lineno"> 151</span> {</div><div class="line"><a name="l00152"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html#afbe68352d888c0b15e9f46d4e378bacb"> 152</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html#afbe68352d888c0b15e9f46d4e378bacb">doit</a>(<span class="keyword">const</span> From &Val)</div><div class="line"><a name="l00153"></a><span class="lineno"> 153</span>  {</div><div class="line"><a name="l00154"></a><span class="lineno"> 154</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee">isa_impl<To, From>::doit</a>(Val);</div><div class="line"><a name="l00155"></a><span class="lineno"> 155</span>  }</div><div class="line"><a name="l00156"></a><span class="lineno"> 156</span> };</div><div class="line"><a name="l00157"></a><span class="lineno"> 157</span> </div><div class="line"><a name="l00158"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_4.html"> 158</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html">isa_impl_cl</a><To, const From></div><div class="line"><a name="l00159"></a><span class="lineno"> 159</span> {</div><div class="line"><a name="l00160"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_4.html#af9a6a9c7660d5daedf8cd907788ac78d"> 160</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_4.html#af9a6a9c7660d5daedf8cd907788ac78d">doit</a>(<span class="keyword">const</span> From &Val)</div><div class="line"><a name="l00161"></a><span class="lineno"> 161</span>  {</div><div class="line"><a name="l00162"></a><span class="lineno"> 162</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee">isa_impl<To, From>::doit</a>(Val);</div><div class="line"><a name="l00163"></a><span class="lineno"> 163</span>  }</div><div class="line"><a name="l00164"></a><span class="lineno"> 164</span> };</div><div class="line"><a name="l00165"></a><span class="lineno"> 165</span> </div><div class="line"><a name="l00166"></a><span class="lineno"> 166</span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From></div><div class="line"><a name="l00167"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01std_1_1unique__ptr_3_01From_01_4_01_4.html"> 167</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html">isa_impl_cl</a><To, const <a class="code" href="namespacestd.html">std</a>::unique_ptr<From>></div><div class="line"><a name="l00168"></a><span class="lineno"> 168</span> {</div><div class="line"><a name="l00169"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01std_1_1unique__ptr_3_01From_01_4_01_4.html#aff368847551a69d07b06237908594852"> 169</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01std_1_1unique__ptr_3_01From_01_4_01_4.html#aff368847551a69d07b06237908594852">doit</a>(<span class="keyword">const</span> std::unique_ptr<From> &Val)</div><div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  {</div><div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  assert(Val && <span class="stringliteral">"SVFUtil::isa<> used on a null pointer"</span>);</div><div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html#afbe68352d888c0b15e9f46d4e378bacb">isa_impl_cl<To, From>::doit</a>(*Val);</div><div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  }</div><div class="line"><a name="l00174"></a><span class="lineno"> 174</span> };</div><div class="line"><a name="l00175"></a><span class="lineno"> 175</span> </div><div class="line"><a name="l00176"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5_01_4.html"> 176</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html">isa_impl_cl</a><To, From*></div><div class="line"><a name="l00177"></a><span class="lineno"> 177</span> {</div><div class="line"><a name="l00178"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5_01_4.html#a8add67bd107583b7c34fce53a748bcb0"> 178</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5_01_4.html#a8add67bd107583b7c34fce53a748bcb0">doit</a>(<span class="keyword">const</span> From *Val)</div><div class="line"><a name="l00179"></a><span class="lineno"> 179</span>  {</div><div class="line"><a name="l00180"></a><span class="lineno"> 180</span>  assert(Val && <span class="stringliteral">"SVFUtil::isa<> used on a null pointer"</span>);</div><div class="line"><a name="l00181"></a><span class="lineno"> 181</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee">isa_impl<To, From>::doit</a>(*Val);</div><div class="line"><a name="l00182"></a><span class="lineno"> 182</span>  }</div><div class="line"><a name="l00183"></a><span class="lineno"> 183</span> };</div><div class="line"><a name="l00184"></a><span class="lineno"> 184</span> </div><div class="line"><a name="l00185"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5const_01_4.html"> 185</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html">isa_impl_cl</a><To, From*<span class="keyword">const</span>></div><div class="line"><a name="l00186"></a><span class="lineno"> 186</span> {</div><div class="line"><a name="l00187"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5const_01_4.html#ac95b00b5d96e6b8457ecade4dbda3de3"> 187</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5const_01_4.html#ac95b00b5d96e6b8457ecade4dbda3de3">doit</a>(<span class="keyword">const</span> From *Val)</div><div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  {</div><div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  assert(Val && <span class="stringliteral">"SVFUtil::isa<> used on a null pointer"</span>);</div><div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee">isa_impl<To, From>::doit</a>(*Val);</div><div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  }</div><div class="line"><a name="l00192"></a><span class="lineno"> 192</span> };</div><div class="line"><a name="l00193"></a><span class="lineno"> 193</span> </div><div class="line"><a name="l00194"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5_01_4.html"> 194</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html">isa_impl_cl</a><To, const From*></div><div class="line"><a name="l00195"></a><span class="lineno"> 195</span> {</div><div class="line"><a name="l00196"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5_01_4.html#a761b612c6ee476a28aabfbbc6b2da7ab"> 196</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5_01_4.html#a761b612c6ee476a28aabfbbc6b2da7ab">doit</a>(<span class="keyword">const</span> From *Val)</div><div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  {</div><div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  assert(Val && <span class="stringliteral">"SVFUtil::isa<> used on a null pointer"</span>);</div><div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee">isa_impl<To, From>::doit</a>(*Val);</div><div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  }</div><div class="line"><a name="l00201"></a><span class="lineno"> 201</span> };</div><div class="line"><a name="l00202"></a><span class="lineno"> 202</span> </div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5const_01_4.html"> 203</a></span> <span class="keyword">template</span> <<span class="keyword">typename</span> To, <span class="keyword">typename</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html">isa_impl_cl</a><To, const From*<span class="keyword">const</span>></div><div class="line"><a name="l00204"></a><span class="lineno"> 204</span> {</div><div class="line"><a name="l00205"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5const_01_4.html#af73d1d0d7eb6f51090b4df47b497483a"> 205</a></span>  <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5const_01_4.html#af73d1d0d7eb6f51090b4df47b497483a">doit</a>(<span class="keyword">const</span> From *Val)</div><div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  {</div><div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  assert(Val && <span class="stringliteral">"SVFUtil::isa<> used on a null pointer"</span>);</div><div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee">isa_impl<To, From>::doit</a>(*Val);</div><div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  }</div><div class="line"><a name="l00210"></a><span class="lineno"> 210</span> };</div><div class="line"><a name="l00211"></a><span class="lineno"> 211</span> </div><div class="line"><a name="l00212"></a><span class="lineno"> 212</span> <span class="keyword">template</span><<span class="keyword">typename</span> To, <span class="keyword">typename</span> From, <span class="keyword">typename</span> SimpleFrom></div><div class="line"><a name="l00213"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap.html"> 213</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap.html">isa_impl_wrap</a></div><div class="line"><a name="l00214"></a><span class="lineno"> 214</span> {</div><div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  <span class="comment">// When From != SimplifiedType, we can simplify the type some more by using</span></div><div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  <span class="comment">// the simplify_type template.</span></div><div class="line"><a name="l00217"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap.html#aa0f166d8bdcd1e7b954cc29c19a40b04"> 217</a></span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap.html#aa0f166d8bdcd1e7b954cc29c19a40b04">doit</a>(<span class="keyword">const</span> From &Val)</div><div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  {</div><div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap.html">isa_impl_wrap</a><To, SimpleFrom,</div><div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<SimpleFrom>::SimpleType</a>>::doit(</div><div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html">simplify_type<const From>::getSimplifiedValue</a>(Val));</div><div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  }</div><div class="line"><a name="l00223"></a><span class="lineno"> 223</span> };</div><div class="line"><a name="l00224"></a><span class="lineno"> 224</span> </div><div class="line"><a name="l00225"></a><span class="lineno"> 225</span> <span class="keyword">template</span><<span class="keyword">typename</span> To, <span class="keyword">typename</span> FromTy></div><div class="line"><a name="l00226"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html"> 226</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap.html">isa_impl_wrap</a><To, FromTy, FromTy></div><div class="line"><a name="l00227"></a><span class="lineno"> 227</span> {</div><div class="line"><a name="l00228"></a><span class="lineno"> 228</span>  <span class="comment">// When From == SimpleType, we are as simple as we are going to get.</span></div><div class="line"><a name="l00229"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html#a414dc089b04305b8580dede7a6337404"> 229</a></span>  <span class="keyword">static</span> <span class="keywordtype">bool</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html#a414dc089b04305b8580dede7a6337404">doit</a>(<span class="keyword">const</span> FromTy &Val)</div><div class="line"><a name="l00230"></a><span class="lineno"> 230</span>  {</div><div class="line"><a name="l00231"></a><span class="lineno"> 231</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html#afbe68352d888c0b15e9f46d4e378bacb">isa_impl_cl<To,FromTy>::doit</a>(Val);</div><div class="line"><a name="l00232"></a><span class="lineno"> 232</span>  }</div><div class="line"><a name="l00233"></a><span class="lineno"> 233</span> };</div><div class="line"><a name="l00234"></a><span class="lineno"> 234</span> </div><div class="line"><a name="l00235"></a><span class="lineno"> 235</span> <span class="comment">// SVFUtil::isa<X> - Return true if the parameter to the template is an instance of the</span></div><div class="line"><a name="l00236"></a><span class="lineno"> 236</span> <span class="comment">// template type argument. Used like this:</span></div><div class="line"><a name="l00237"></a><span class="lineno"> 237</span> <span class="comment">//</span></div><div class="line"><a name="l00238"></a><span class="lineno"> 238</span> <span class="comment">// if (SVFUtil::isa<Type>(myVal)) { ... }</span></div><div class="line"><a name="l00239"></a><span class="lineno"> 239</span> <span class="comment">// if (SVFUtil::isa<Type0, Type1, Type2>(myVal)) { ... }</span></div><div class="line"><a name="l00240"></a><span class="lineno"> 240</span> <span class="comment">//</span></div><div class="line"><a name="l00241"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#a5c8cbc986cccb9d84f87aae162df3737"> 241</a></span> <span class="keyword">template</span> <<span class="keyword">class</span> X, <span class="keyword">class</span> Y> <a class="code" href="Casting_8h.html#a8ce3b3743bf423cf00a9eb18a3f0f139">LLVM_NODISCARD</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5c8cbc986cccb9d84f87aae162df3737">isa</a>(<span class="keyword">const</span> Y &Val)</div><div class="line"><a name="l00242"></a><span class="lineno"> 242</span> {</div><div class="line"><a name="l00243"></a><span class="lineno"> 243</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1isa__impl__wrap.html">isa_impl_wrap</a><X, <span class="keyword">const</span> Y,</div><div class="line"><a name="l00244"></a><span class="lineno"> 244</span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<const Y>::SimpleType</a>>::doit(Val);</div><div class="line"><a name="l00245"></a><span class="lineno"> 245</span> }</div><div class="line"><a name="l00246"></a><span class="lineno"> 246</span> </div><div class="line"><a name="l00247"></a><span class="lineno"> 247</span> <span class="keyword">template</span> <<span class="keyword">typename</span> First, <span class="keyword">typename</span> Second, <span class="keyword">typename</span>... Rest, <span class="keyword">typename</span> Y></div><div class="line"><a name="l00248"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#a13729076054a2977670b05a338a6763d"> 248</a></span> <a class="code" href="Casting_8h.html#a8ce3b3743bf423cf00a9eb18a3f0f139">LLVM_NODISCARD</a> <span class="keyword">inline</span> <span class="keywordtype">bool</span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a5c8cbc986cccb9d84f87aae162df3737">isa</a>(<span class="keyword">const</span> Y &Val)</div><div class="line"><a name="l00249"></a><span class="lineno"> 249</span> {</div><div class="line"><a name="l00250"></a><span class="lineno"> 250</span>  <span class="keywordflow">return</span> SVFUtil::isa<First>(Val) || SVFUtil::isa<Second, Rest...>(Val);</div><div class="line"><a name="l00251"></a><span class="lineno"> 251</span> }</div><div class="line"><a name="l00252"></a><span class="lineno"> 252</span> </div><div class="line"><a name="l00253"></a><span class="lineno"> 253</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00254"></a><span class="lineno"> 254</span> <span class="comment">// cast<x> Support Templates</span></div><div class="line"><a name="l00255"></a><span class="lineno"> 255</span> <span class="comment">//===----------------------------------------------------------------------===//</span></div><div class="line"><a name="l00256"></a><span class="lineno"> 256</span> </div><div class="line"><a name="l00257"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty.html"> 257</a></span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html">cast_retty</a>;</div><div class="line"><a name="l00258"></a><span class="lineno"> 258</span> </div><div class="line"><a name="l00259"></a><span class="lineno"> 259</span> <span class="comment">// Calculate what type the 'cast' function should return, based on a requested</span></div><div class="line"><a name="l00260"></a><span class="lineno"> 260</span> <span class="comment">// type of To and a source type of From.</span></div><div class="line"><a name="l00261"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html"> 261</a></span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html">cast_retty_impl</a></div><div class="line"><a name="l00262"></a><span class="lineno"> 262</span> {</div><div class="line"><a name="l00263"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html#a5f8f6d651931eba7e0fa14c26a691a04"> 263</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html#a5f8f6d651931eba7e0fa14c26a691a04">ret_type</a> = To &; <span class="comment">// Normal case, return Ty&</span></div><div class="line"><a name="l00264"></a><span class="lineno"> 264</span> };</div><div class="line"><a name="l00265"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_4.html"> 265</a></span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html">cast_retty_impl</a><To, const From></div><div class="line"><a name="l00266"></a><span class="lineno"> 266</span> {</div><div class="line"><a name="l00267"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_4.html#ad0bc349135b60cc51fd040b615a979f7"> 267</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_4.html#ad0bc349135b60cc51fd040b615a979f7">ret_type</a> = <span class="keyword">const</span> To &; <span class="comment">// Normal case, return Ty&</span></div><div class="line"><a name="l00268"></a><span class="lineno"> 268</span> };</div><div class="line"><a name="l00269"></a><span class="lineno"> 269</span> </div><div class="line"><a name="l00270"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01From_01_5_01_4.html"> 270</a></span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html">cast_retty_impl</a><To, From*></div><div class="line"><a name="l00271"></a><span class="lineno"> 271</span> {</div><div class="line"><a name="l00272"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01From_01_5_01_4.html#a86c02dc15b65d0c052ea4447b3fb6333"> 272</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01From_01_5_01_4.html#a86c02dc15b65d0c052ea4447b3fb6333">ret_type</a> = To *; <span class="comment">// Pointer arg case, return Ty*</span></div><div class="line"><a name="l00273"></a><span class="lineno"> 273</span> };</div><div class="line"><a name="l00274"></a><span class="lineno"> 274</span> </div><div class="line"><a name="l00275"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5_01_4.html"> 275</a></span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html">cast_retty_impl</a><To, const From*></div><div class="line"><a name="l00276"></a><span class="lineno"> 276</span> {</div><div class="line"><a name="l00277"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5_01_4.html#a98a60de95a331a34dcbad6da9961a9b7"> 277</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5_01_4.html#a98a60de95a331a34dcbad6da9961a9b7">ret_type</a> = <span class="keyword">const</span> To *; <span class="comment">// Constant pointer arg case, return const Ty*</span></div><div class="line"><a name="l00278"></a><span class="lineno"> 278</span> };</div><div class="line"><a name="l00279"></a><span class="lineno"> 279</span> </div><div class="line"><a name="l00280"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5const_01_4.html"> 280</a></span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html">cast_retty_impl</a><To, const From*<span class="keyword">const</span>></div><div class="line"><a name="l00281"></a><span class="lineno"> 281</span> {</div><div class="line"><a name="l00282"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5const_01_4.html#add8668ca96bbf0808c146cc81c62267c"> 282</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5const_01_4.html#add8668ca96bbf0808c146cc81c62267c">ret_type</a> = <span class="keyword">const</span> To *; <span class="comment">// Constant pointer arg case, return const Ty*</span></div><div class="line"><a name="l00283"></a><span class="lineno"> 283</span> };</div><div class="line"><a name="l00284"></a><span class="lineno"> 284</span> </div><div class="line"><a name="l00285"></a><span class="lineno"> 285</span> <span class="keyword">template</span> <<span class="keyword">class</span> To, <span class="keyword">class</span> From></div><div class="line"><a name="l00286"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html"> 286</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html">cast_retty_impl</a><To, <a class="code" href="namespacestd.html">std</a>::unique_ptr<From>></div><div class="line"><a name="l00287"></a><span class="lineno"> 287</span> {</div><div class="line"><a name="l00288"></a><span class="lineno"> 288</span> <span class="keyword">private</span>:</div><div class="line"><a name="l00289"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a9d08abc346f3b77c487eba144f3cbd8d"> 289</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a9d08abc346f3b77c487eba144f3cbd8d">PointerType</a> = <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html#a5f8f6d651931eba7e0fa14c26a691a04">cast_retty_impl<To, From *>::ret_type</a>;</div><div class="line"><a name="l00290"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a052f7cd3a81e368060f132bf0268fa68"> 290</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a052f7cd3a81e368060f132bf0268fa68">ResultType</a> = <span class="keyword">typename</span> <a class="code" href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">std::remove_pointer<PointerType>::type</a>;</div><div class="line"><a name="l00291"></a><span class="lineno"> 291</span> </div><div class="line"><a name="l00292"></a><span class="lineno"> 292</span> <span class="keyword">public</span>:</div><div class="line"><a name="l00293"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a3bf80190e39c339d4e3ec703789ae845"> 293</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a3bf80190e39c339d4e3ec703789ae845">ret_type</a> = std::unique_ptr<ResultType>;</div><div class="line"><a name="l00294"></a><span class="lineno"> 294</span> };</div><div class="line"><a name="l00295"></a><span class="lineno"> 295</span> </div><div class="line"><a name="l00296"></a><span class="lineno"> 296</span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From, <span class="keyword">class</span> SimpleFrom></div><div class="line"><a name="l00297"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap.html"> 297</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap.html">cast_retty_wrap</a></div><div class="line"><a name="l00298"></a><span class="lineno"> 298</span> {</div><div class="line"><a name="l00299"></a><span class="lineno"> 299</span>  <span class="comment">// When the simplified type and the from type are not the same, use the type</span></div><div class="line"><a name="l00300"></a><span class="lineno"> 300</span>  <span class="comment">// simplifier to reduce the type, then reuse cast_retty_impl to get the</span></div><div class="line"><a name="l00301"></a><span class="lineno"> 301</span>  <span class="comment">// resultant type.</span></div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap.html#af3d80ab43e47626f32c91a6c4454e82e"> 302</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap.html#af3d80ab43e47626f32c91a6c4454e82e">ret_type</a> = <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<To, SimpleFrom>::ret_type</a>;</div><div class="line"><a name="l00303"></a><span class="lineno"> 303</span> };</div><div class="line"><a name="l00304"></a><span class="lineno"> 304</span> </div><div class="line"><a name="l00305"></a><span class="lineno"> 305</span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> FromTy></div><div class="line"><a name="l00306"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html"> 306</a></span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap.html">cast_retty_wrap</a><To, FromTy, FromTy></div><div class="line"><a name="l00307"></a><span class="lineno"> 307</span> {</div><div class="line"><a name="l00308"></a><span class="lineno"> 308</span>  <span class="comment">// When the simplified type is equal to the from type, use it directly.</span></div><div class="line"><a name="l00309"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html#ad989c130f2b6cd5a0f1ba0c7abd62b9a"> 309</a></span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html#ad989c130f2b6cd5a0f1ba0c7abd62b9a">ret_type</a> = <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html#a5f8f6d651931eba7e0fa14c26a691a04">cast_retty_impl<To,FromTy>::ret_type</a>;</div><div class="line"><a name="l00310"></a><span class="lineno"> 310</span> };</div><div class="line"><a name="l00311"></a><span class="lineno"> 311</span> </div><div class="line"><a name="l00312"></a><span class="lineno"> 312</span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From></div><div class="line"><a name="l00313"></a><span class="lineno"> 313</span> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html">cast_retty</a></div><div class="line"><a name="l00314"></a><span class="lineno"> 314</span> {</div><div class="line"><a name="l00315"></a><span class="lineno"> 315</span>  <span class="keyword">using</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html#ad989c130f2b6cd5a0f1ba0c7abd62b9a">ret_type</a> = <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty__wrap.html">cast_retty_wrap</a><</div><div class="line"><a name="l00316"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b"> 316</a></span>  To, From, <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<From>::SimpleType</a>><a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">::ret_type</a>;</div><div class="line"><a name="l00317"></a><span class="lineno"> 317</span> };</div><div class="line"><a name="l00318"></a><span class="lineno"> 318</span> </div><div class="line"><a name="l00319"></a><span class="lineno"> 319</span> <span class="comment">// Ensure the non-simple values are converted using the simplify_type template</span></div><div class="line"><a name="l00320"></a><span class="lineno"> 320</span> <span class="comment">// that may be specialized by smart pointers...</span></div><div class="line"><a name="l00321"></a><span class="lineno"> 321</span> <span class="comment">//</span></div><div class="line"><a name="l00322"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html"> 322</a></span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> From, <span class="keyword">class</span> SimpleFrom> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html">cast_convert_val</a></div><div class="line"><a name="l00323"></a><span class="lineno"> 323</span> {</div><div class="line"><a name="l00324"></a><span class="lineno"> 324</span>  <span class="comment">// This is not a simple type, use the template to simplify it...</span></div><div class="line"><a name="l00325"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html#a42987ff69d76fef88044fe0b19743239"> 325</a></span>  <span class="keyword">static</span> <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<To, From>::ret_type</a> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html#a42987ff69d76fef88044fe0b19743239">doit</a>(From &Val)</div><div class="line"><a name="l00326"></a><span class="lineno"> 326</span>  {</div><div class="line"><a name="l00327"></a><span class="lineno"> 327</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html">cast_convert_val</a><To, SimpleFrom,</div><div class="line"><a name="l00328"></a><span class="lineno"> 328</span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<SimpleFrom>::SimpleType</a>>::doit(</div><div class="line"><a name="l00329"></a><span class="lineno"> 329</span>  <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html">simplify_type<From>::getSimplifiedValue</a>(Val));</div><div class="line"><a name="l00330"></a><span class="lineno"> 330</span>  }</div><div class="line"><a name="l00331"></a><span class="lineno"> 331</span> };</div><div class="line"><a name="l00332"></a><span class="lineno"> 332</span> </div><div class="line"><a name="l00333"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__convert__val_3_01To_00_01FromTy_00_01FromTy_01_4.html"> 333</a></span> <span class="keyword">template</span><<span class="keyword">class</span> To, <span class="keyword">class</span> FromTy> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html">cast_convert_val</a><To,FromTy,FromTy></div><div class="line"><a name="l00334"></a><span class="lineno"> 334</span> {</div><div class="line"><a name="l00335"></a><span class="lineno"> 335</span>  <span class="comment">// This _is_ a simple type, just cast it.</span></div><div class="line"><a name="l00336"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1cast__convert__val_3_01To_00_01FromTy_00_01FromTy_01_4.html#a2dd56ef15d86f61c7fef34dc15173e4a"> 336</a></span>  <span class="keyword">static</span> <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<To, FromTy>::ret_type</a> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val_3_01To_00_01FromTy_00_01FromTy_01_4.html#a2dd56ef15d86f61c7fef34dc15173e4a">doit</a>(<span class="keyword">const</span> FromTy &Val)</div><div class="line"><a name="l00337"></a><span class="lineno"> 337</span>  {</div><div class="line"><a name="l00338"></a><span class="lineno"> 338</span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<To, FromTy>::ret_type</a> Res2</div><div class="line"><a name="l00339"></a><span class="lineno"> 339</span>  = (<span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<To, FromTy>::ret_type</a>)const_cast<FromTy&>(Val);</div><div class="line"><a name="l00340"></a><span class="lineno"> 340</span>  <span class="keywordflow">return</span> Res2;</div><div class="line"><a name="l00341"></a><span class="lineno"> 341</span>  }</div><div class="line"><a name="l00342"></a><span class="lineno"> 342</span> };</div><div class="line"><a name="l00343"></a><span class="lineno"> 343</span> </div><div class="line"><a name="l00344"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1is__simple__type.html"> 344</a></span> <span class="keyword">template</span> <<span class="keyword">class</span> X> <span class="keyword">struct </span><a class="code" href="structSVF_1_1SVFUtil_1_1is__simple__type.html">is_simple_type</a></div><div class="line"><a name="l00345"></a><span class="lineno"> 345</span> {</div><div class="line"><a name="l00346"></a><span class="lineno"><a class="line" href="structSVF_1_1SVFUtil_1_1is__simple__type.html#a700d43a1b318fb30fa9472da323cb34f"> 346</a></span>  <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">bool</span> value =</div><div class="line"><a name="l00347"></a><span class="lineno"> 347</span>  std::is_same<X, typename simplify_type<X>::SimpleType>::value;</div><div class="line"><a name="l00348"></a><span class="lineno"> 348</span> };</div><div class="line"><a name="l00349"></a><span class="lineno"> 349</span> </div><div class="line"><a name="l00350"></a><span class="lineno"> 350</span> <span class="comment">// cast<X> - Return the argument parameter cast to the specified type. This</span></div><div class="line"><a name="l00351"></a><span class="lineno"> 351</span> <span class="comment">// casting operator asserts that the type is correct, so it does not return null</span></div><div class="line"><a name="l00352"></a><span class="lineno"> 352</span> <span class="comment">// on failure. It does not allow a null argument (use cast_or_null for that).</span></div><div class="line"><a name="l00353"></a><span class="lineno"> 353</span> <span class="comment">// It is typically used like this:</span></div><div class="line"><a name="l00354"></a><span class="lineno"> 354</span> <span class="comment">//</span></div><div class="line"><a name="l00355"></a><span class="lineno"> 355</span> <span class="comment">// cast<Instruction>(myVal)->getParent()</span></div><div class="line"><a name="l00356"></a><span class="lineno"> 356</span> <span class="comment">//</span></div><div class="line"><a name="l00357"></a><span class="lineno"> 357</span> <span class="keyword">template</span> <<span class="keyword">class</span> X, <span class="keyword">class</span> Y></div><div class="line"><a name="l00358"></a><span class="lineno"> 358</span> <span class="keyword">inline</span> std::enable_if_t<!is_simple_type<Y>::value,</div><div class="line"><a name="l00359"></a><span class="lineno"> 359</span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<X, const Y>::ret_type</a>></div><div class="line"><a name="l00360"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#a3ddf7041e685da8ede81cd773dd47761"> 360</a></span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a3ddf7041e685da8ede81cd773dd47761">cast</a>(<span class="keyword">const</span> Y &Val)</div><div class="line"><a name="l00361"></a><span class="lineno"> 361</span> {</div><div class="line"><a name="l00362"></a><span class="lineno"> 362</span>  assert(SVFUtil::isa<X>(Val) && <span class="stringliteral">"cast<Ty>() argument of incompatible type!"</span>);</div><div class="line"><a name="l00363"></a><span class="lineno"> 363</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html">cast_convert_val</a><</div><div class="line"><a name="l00364"></a><span class="lineno"> 364</span>  X, <span class="keyword">const</span> Y, <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<const Y>::SimpleType</a>>::doit(Val);</div><div class="line"><a name="l00365"></a><span class="lineno"> 365</span> }</div><div class="line"><a name="l00366"></a><span class="lineno"> 366</span> </div><div class="line"><a name="l00367"></a><span class="lineno"> 367</span> <span class="keyword">template</span> <<span class="keyword">class</span> X, <span class="keyword">class</span> Y></div><div class="line"><a name="l00368"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#a406dd9baf2ce66235d482fd6c6121b2c"> 368</a></span> <span class="keyword">inline</span> <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<X, Y>::ret_type</a> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a3ddf7041e685da8ede81cd773dd47761">cast</a>(Y &Val)</div><div class="line"><a name="l00369"></a><span class="lineno"> 369</span> {</div><div class="line"><a name="l00370"></a><span class="lineno"> 370</span>  assert(SVFUtil::isa<X>(Val) && <span class="stringliteral">"cast<Ty>() argument of incompatible type!"</span>);</div><div class="line"><a name="l00371"></a><span class="lineno"> 371</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html">cast_convert_val</a><X, Y,</div><div class="line"><a name="l00372"></a><span class="lineno"> 372</span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<Y>::SimpleType</a>>::doit(Val);</div><div class="line"><a name="l00373"></a><span class="lineno"> 373</span> }</div><div class="line"><a name="l00374"></a><span class="lineno"> 374</span> </div><div class="line"><a name="l00375"></a><span class="lineno"> 375</span> <span class="keyword">template</span> <<span class="keyword">class</span> X, <span class="keyword">class</span> Y></div><div class="line"><a name="l00376"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#acc2419a55c0427571f11ad14db2fe481"> 376</a></span> <span class="keyword">inline</span> <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<X, Y *>::ret_type</a> <a class="code" href="namespaceSVF_1_1SVFUtil.html#a3ddf7041e685da8ede81cd773dd47761">cast</a>(Y *Val)</div><div class="line"><a name="l00377"></a><span class="lineno"> 377</span> {</div><div class="line"><a name="l00378"></a><span class="lineno"> 378</span>  assert(SVFUtil::isa<X>(Val) && <span class="stringliteral">"cast<Ty>() argument of incompatible type!"</span>);</div><div class="line"><a name="l00379"></a><span class="lineno"> 379</span>  <span class="keywordflow">return</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html">cast_convert_val</a><X, Y*,</div><div class="line"><a name="l00380"></a><span class="lineno"> 380</span>  <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<Y*>::SimpleType</a>>::doit(Val);</div><div class="line"><a name="l00381"></a><span class="lineno"> 381</span> }</div><div class="line"><a name="l00382"></a><span class="lineno"> 382</span> </div><div class="line"><a name="l00383"></a><span class="lineno"> 383</span> <span class="keyword">template</span> <<span class="keyword">class</span> X, <span class="keyword">class</span> Y></div><div class="line"><a name="l00384"></a><span class="lineno"> 384</span> <span class="keyword">inline</span> <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html">cast_retty<X, std::unique_ptr<Y></a>>::ret_type</div><div class="line"><a name="l00385"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#af3ca049b4ce83c874e231f5e13bf36a8"> 385</a></span>  <a class="code" href="namespaceSVF_1_1SVFUtil.html#a3ddf7041e685da8ede81cd773dd47761">cast</a>(std::unique_ptr<Y> &&Val)</div><div class="line"><a name="l00386"></a><span class="lineno"> 386</span> {</div><div class="line"><a name="l00387"></a><span class="lineno"> 387</span>  assert(SVFUtil::isa<X>(Val.get()) && <span class="stringliteral">"cast<Ty>() argument of incompatible type!"</span>);</div><div class="line"><a name="l00388"></a><span class="lineno"> 388</span>  <span class="keyword">using</span> ret_type = <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html">cast_retty<X, std::unique_ptr<Y></a>>::ret_type;</div><div class="line"><a name="l00389"></a><span class="lineno"> 389</span>  <span class="keywordflow">return</span> ret_type(</div><div class="line"><a name="l00390"></a><span class="lineno"> 390</span>  <a class="code" href="structSVF_1_1SVFUtil_1_1cast__convert__val.html">cast_convert_val</a><X, Y *, <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">simplify_type<Y *>::SimpleType</a>>::doit(</div><div class="line"><a name="l00391"></a><span class="lineno"> 391</span>  Val.release()));</div><div class="line"><a name="l00392"></a><span class="lineno"> 392</span> }</div><div class="line"><a name="l00393"></a><span class="lineno"> 393</span> </div><div class="line"><a name="l00394"></a><span class="lineno"> 394</span> <span class="comment">// dyn_cast<X> - Return the argument parameter cast to the specified type. This</span></div><div class="line"><a name="l00395"></a><span class="lineno"> 395</span> <span class="comment">// casting operator returns null if the argument is of the wrong type, so it can</span></div><div class="line"><a name="l00396"></a><span class="lineno"> 396</span> <span class="comment">// be used to test for a type as well as cast if successful. This should be</span></div><div class="line"><a name="l00397"></a><span class="lineno"> 397</span> <span class="comment">// used in the context of an if statement like this:</span></div><div class="line"><a name="l00398"></a><span class="lineno"> 398</span> <span class="comment">//</span></div><div class="line"><a name="l00399"></a><span class="lineno"> 399</span> <span class="comment">// if (const Instruction* I = dyn_cast<Instruction>(myVal)) { ... }</span></div><div class="line"><a name="l00400"></a><span class="lineno"> 400</span> <span class="comment">//</span></div><div class="line"><a name="l00401"></a><span class="lineno"> 401</span> </div><div class="line"><a name="l00402"></a><span class="lineno"> 402</span> <span class="keyword">template</span> <<span class="keyword">class</span> X, <span class="keyword">class</span> Y></div><div class="line"><a name="l00403"></a><span class="lineno"> 403</span> <a class="code" href="Casting_8h.html#a8ce3b3743bf423cf00a9eb18a3f0f139">LLVM_NODISCARD</a> <span class="keyword">inline</span> std::enable_if_t<</div><div class="line"><a name="l00404"></a><span class="lineno"> 404</span> !<a class="code" href="structSVF_1_1SVFUtil_1_1is__simple__type.html">is_simple_type<Y>::value</a>, <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<X, const Y>::ret_type</a>></div><div class="line"><a name="l00405"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e"> 405</a></span> <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">dyn_cast</a>(<span class="keyword">const</span> Y &Val)</div><div class="line"><a name="l00406"></a><span class="lineno"> 406</span> {</div><div class="line"><a name="l00407"></a><span class="lineno"> 407</span>  <span class="keywordflow">return</span> SVFUtil::isa<X>(Val) ? SVFUtil::cast<X>(Val) : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00408"></a><span class="lineno"> 408</span> }</div><div class="line"><a name="l00409"></a><span class="lineno"> 409</span> </div><div class="line"><a name="l00410"></a><span class="lineno"> 410</span> <span class="keyword">template</span> <<span class="keyword">class</span> X, <span class="keyword">class</span> Y></div><div class="line"><a name="l00411"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#a52d852ba8fa569e858565b3bba403656"> 411</a></span> <a class="code" href="Casting_8h.html#a8ce3b3743bf423cf00a9eb18a3f0f139">LLVM_NODISCARD</a> <span class="keyword">inline</span> <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<X, Y>::ret_type</a> <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">dyn_cast</a>(Y &Val)</div><div class="line"><a name="l00412"></a><span class="lineno"> 412</span> {</div><div class="line"><a name="l00413"></a><span class="lineno"> 413</span>  <span class="keywordflow">return</span> SVFUtil::isa<X>(Val) ? SVFUtil::cast<X>(Val) : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00414"></a><span class="lineno"> 414</span> }</div><div class="line"><a name="l00415"></a><span class="lineno"> 415</span> </div><div class="line"><a name="l00416"></a><span class="lineno"> 416</span> <span class="keyword">template</span> <<span class="keyword">class</span> X, <span class="keyword">class</span> Y></div><div class="line"><a name="l00417"></a><span class="lineno"><a class="line" href="namespaceSVF_1_1SVFUtil.html#a105c5c5e97d56533fb2b3ba7a0bc59f3"> 417</a></span> <a class="code" href="Casting_8h.html#a8ce3b3743bf423cf00a9eb18a3f0f139">LLVM_NODISCARD</a> <span class="keyword">inline</span> <span class="keyword">typename</span> <a class="code" href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">cast_retty<X, Y *>::ret_type</a> <a class="code" href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">dyn_cast</a>(Y *Val)</div><div class="line"><a name="l00418"></a><span class="lineno"> 418</span> {</div><div class="line"><a name="l00419"></a><span class="lineno"> 419</span>  <span class="keywordflow">return</span> SVFUtil::isa<X>(Val) ? SVFUtil::cast<X>(Val) : <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00420"></a><span class="lineno"> 420</span> }</div><div class="line"><a name="l00421"></a><span class="lineno"> 421</span> </div><div class="line"><a name="l00422"></a><span class="lineno"> 422</span> } <span class="comment">// End namespace SVFUtil</span></div><div class="line"><a name="l00423"></a><span class="lineno"> 423</span> </div><div class="line"><a name="l00424"></a><span class="lineno"> 424</span> } <span class="comment">// End namespace SVF</span></div><div class="line"><a name="l00425"></a><span class="lineno"> 425</span> </div><div class="line"><a name="l00426"></a><span class="lineno"> 426</span> <span class="preprocessor">#endif </span><span class="comment">/* INCLUDE_UTIL_CASTING_H_ */</span><span class="preprocessor"></span></div><div class="ttc" id="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_4_html_af9a6a9c7660d5daedf8cd907788ac78d"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_4.html#af9a6a9c7660d5daedf8cd907788ac78d">SVF::SVFUtil::isa_impl_cl< To, const From >::doit</a></div><div class="ttdeci">static bool doit(const From &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00160">Casting.h:160</a></div></div>
|
|
70
70
|
<div class="ttc" id="Casting_8h_html_a8ce3b3743bf423cf00a9eb18a3f0f139"><div class="ttname"><a href="Casting_8h.html#a8ce3b3743bf423cf00a9eb18a3f0f139">LLVM_NODISCARD</a></div><div class="ttdeci">#define LLVM_NODISCARD</div><div class="ttdoc">LLVM_NODISCARD - Warn if a type or return value is discarded. </div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00056">Casting.h:56</a></div></div>
|
|
71
71
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1isa__impl_html"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1isa__impl.html">SVF::SVFUtil::isa_impl</a></div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00132">Casting.h:132</a></div></div>
|
|
72
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__wrap_html_af3d80ab43e47626f32c91a6c4454e82e"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__wrap.html#af3d80ab43e47626f32c91a6c4454e82e">SVF::SVFUtil::cast_retty_wrap::ret_type</a></div><div class="ttdeci">typename cast_retty< To, SimpleFrom >::ret_type ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
72
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__wrap_html_af3d80ab43e47626f32c91a6c4454e82e"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__wrap.html#af3d80ab43e47626f32c91a6c4454e82e">SVF::SVFUtil::cast_retty_wrap::ret_type</a></div><div class="ttdeci">typename cast_retty< To, SimpleFrom >::ret_type ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00302">Casting.h:302</a></div></div>
|
|
73
73
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1isa__impl__wrap_3_01To_00_01FromTy_00_01FromTy_01_4_html_a414dc089b04305b8580dede7a6337404"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1isa__impl__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html#a414dc089b04305b8580dede7a6337404">SVF::SVFUtil::isa_impl_wrap< To, FromTy, FromTy >::doit</a></div><div class="ttdeci">static bool doit(const FromTy &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00229">Casting.h:229</a></div></div>
|
|
74
74
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4_html_a8de25e1bb07ca0f995e5760065259531"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#a8de25e1bb07ca0f995e5760065259531">SVF::SVFUtil::simplify_type< const From >::SimpleType</a></div><div class="ttdeci">typename SVFUtil::add_const_past_pointer< NonConstSimpleType >::type SimpleType</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00118">Casting.h:118</a></div></div>
|
|
75
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5const_01_4_html_add8668ca96bbf0808c146cc81c62267c"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5const_01_4.html#add8668ca96bbf0808c146cc81c62267c">SVF::SVFUtil::cast_retty_impl< To, const From *const >::ret_type</a></div><div class="ttdeci">const To * ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
75
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5const_01_4_html_add8668ca96bbf0808c146cc81c62267c"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5const_01_4.html#add8668ca96bbf0808c146cc81c62267c">SVF::SVFUtil::cast_retty_impl< To, const From *const >::ret_type</a></div><div class="ttdeci">const To * ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00282">Casting.h:282</a></div></div>
|
|
76
76
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1isa__impl_3_01To_00_01From_00_01std_1_1enable__if__t_3_01std_1_1is__baseacbe8554d65d479d86c5b7d994311309_html_a1d03ef26d605e8f9cb9ecf68e69447dc"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1isa__impl_3_01To_00_01From_00_01std_1_1enable__if__t_3_01std_1_1is__baseacbe8554d65d479d86c5b7d994311309.html#a1d03ef26d605e8f9cb9ecf68e69447dc">SVF::SVFUtil::isa_impl< To, From, std::enable_if_t< std::is_base_of< To, From >::value > >::doit</a></div><div class="ttdeci">static bool doit(const From &)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00144">Casting.h:144</a></div></div>
|
|
77
77
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1isa__impl_html_a150c6a99c45befa44a4cd2bcc8d06eee"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1isa__impl.html#a150c6a99c45befa44a4cd2bcc8d06eee">SVF::SVFUtil::isa_impl::doit</a></div><div class="ttdeci">static bool doit(const From &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00134">Casting.h:134</a></div></div>
|
|
78
78
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5_01_4_html_a761b612c6ee476a28aabfbbc6b2da7ab"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5_01_4.html#a761b612c6ee476a28aabfbbc6b2da7ab">SVF::SVFUtil::isa_impl_cl< To, const From * >::doit</a></div><div class="ttdeci">static bool doit(const From *Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00196">Casting.h:196</a></div></div>
|
|
79
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__wrap_3_01To_00_01FromTy_00_01FromTy_01_4_html_ad989c130f2b6cd5a0f1ba0c7abd62b9a"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html#ad989c130f2b6cd5a0f1ba0c7abd62b9a">SVF::SVFUtil::cast_retty_wrap< To, FromTy, FromTy >::ret_type</a></div><div class="ttdeci">typename cast_retty_impl< To, FromTy >::ret_type ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
80
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty_html_aea91708cabb8176b031f1c1fdb89a15b"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">SVF::SVFUtil::cast_retty::ret_type</a></div><div class="ttdeci">typename cast_retty_wrap< To, From, typename simplify_type< From >::SimpleType >::ret_type ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
79
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__wrap_3_01To_00_01FromTy_00_01FromTy_01_4_html_ad989c130f2b6cd5a0f1ba0c7abd62b9a"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__wrap_3_01To_00_01FromTy_00_01FromTy_01_4.html#ad989c130f2b6cd5a0f1ba0c7abd62b9a">SVF::SVFUtil::cast_retty_wrap< To, FromTy, FromTy >::ret_type</a></div><div class="ttdeci">typename cast_retty_impl< To, FromTy >::ret_type ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00309">Casting.h:309</a></div></div>
|
|
80
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty_html_aea91708cabb8176b031f1c1fdb89a15b"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty.html#aea91708cabb8176b031f1c1fdb89a15b">SVF::SVFUtil::cast_retty::ret_type</a></div><div class="ttdeci">typename cast_retty_wrap< To, From, typename simplify_type< From >::SimpleType >::ret_type ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00316">Casting.h:316</a></div></div>
|
|
81
81
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1isa__impl__wrap_html"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1isa__impl__wrap.html">SVF::SVFUtil::isa_impl_wrap</a></div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00213">Casting.h:213</a></div></div>
|
|
82
82
|
<div class="ttc" id="namespacestd_html"><div class="ttname"><a href="namespacestd.html">std</a></div></div>
|
|
83
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
84
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__convert__val_html_a42987ff69d76fef88044fe0b19743239"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__convert__val.html#a42987ff69d76fef88044fe0b19743239">SVF::SVFUtil::cast_convert_val::doit</a></div><div class="ttdeci">static cast_retty< To, From >::ret_type doit(From &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
85
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__convert__val_3_01To_00_01FromTy_00_01FromTy_01_4_html_a2dd56ef15d86f61c7fef34dc15173e4a"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__convert__val_3_01To_00_01FromTy_00_01FromTy_01_4.html#a2dd56ef15d86f61c7fef34dc15173e4a">SVF::SVFUtil::cast_convert_val< To, FromTy, FromTy >::doit</a></div><div class="ttdeci">static cast_retty< To, FromTy >::ret_type doit(const FromTy &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
83
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_af6e96694d983643a66c238cce01bff0e"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#af6e96694d983643a66c238cce01bff0e">SVF::SVFUtil::dyn_cast</a></div><div class="ttdeci">LLVM_NODISCARD std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > dyn_cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00405">Casting.h:405</a></div></div>
|
|
84
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__convert__val_html_a42987ff69d76fef88044fe0b19743239"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__convert__val.html#a42987ff69d76fef88044fe0b19743239">SVF::SVFUtil::cast_convert_val::doit</a></div><div class="ttdeci">static cast_retty< To, From >::ret_type doit(From &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00325">Casting.h:325</a></div></div>
|
|
85
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__convert__val_3_01To_00_01FromTy_00_01FromTy_01_4_html_a2dd56ef15d86f61c7fef34dc15173e4a"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__convert__val_3_01To_00_01FromTy_00_01FromTy_01_4.html#a2dd56ef15d86f61c7fef34dc15173e4a">SVF::SVFUtil::cast_convert_val< To, FromTy, FromTy >::doit</a></div><div class="ttdeci">static cast_retty< To, FromTy >::ret_type doit(const FromTy &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00336">Casting.h:336</a></div></div>
|
|
86
86
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1add__const__past__pointer_html"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1add__const__past__pointer.html">SVF::SVFUtil::add_const_past_pointer</a></div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00070">Casting.h:70</a></div></div>
|
|
87
87
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer_html"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer.html">SVF::SVFUtil::add_lvalue_reference_if_not_pointer</a></div><div class="ttdoc">If T is a pointer, just return it. If it is not, return T&. </div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00083">Casting.h:83</a></div></div>
|
|
88
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_4_html_ad0bc349135b60cc51fd040b615a979f7"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_4.html#ad0bc349135b60cc51fd040b615a979f7">SVF::SVFUtil::cast_retty_impl< To, const From >::ret_type</a></div><div class="ttdeci">const To & ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
88
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_4_html_ad0bc349135b60cc51fd040b615a979f7"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_4.html#ad0bc349135b60cc51fd040b615a979f7">SVF::SVFUtil::cast_retty_impl< To, const From >::ret_type</a></div><div class="ttdeci">const To & ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00267">Casting.h:267</a></div></div>
|
|
89
89
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4_html_abd3fdf0fdc5e4622a879b7890ad43789"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#abd3fdf0fdc5e4622a879b7890ad43789">SVF::SVFUtil::simplify_type< const From >::RetType</a></div><div class="ttdeci">typename SVFUtil::add_lvalue_reference_if_not_pointer< SimpleType >::type RetType</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00120">Casting.h:120</a></div></div>
|
|
90
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a3ddf7041e685da8ede81cd773dd47761"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a3ddf7041e685da8ede81cd773dd47761">SVF::SVFUtil::cast</a></div><div class="ttdeci">std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
90
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a3ddf7041e685da8ede81cd773dd47761"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a3ddf7041e685da8ede81cd773dd47761">SVF::SVFUtil::cast</a></div><div class="ttdeci">std::enable_if_t<!is_simple_type< Y >::value, typename cast_retty< X, const Y >::ret_type > cast(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00360">Casting.h:360</a></div></div>
|
|
91
91
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5const_01_4_html_af73d1d0d7eb6f51090b4df47b497483a"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01From_01_5const_01_4.html#af73d1d0d7eb6f51090b4df47b497483a">SVF::SVFUtil::isa_impl_cl< To, const From *const >::doit</a></div><div class="ttdeci">static bool doit(const From *Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00205">Casting.h:205</a></div></div>
|
|
92
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__wrap_html"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__wrap.html">SVF::SVFUtil::cast_retty_wrap</a></div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
92
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__wrap_html"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__wrap.html">SVF::SVFUtil::cast_retty_wrap</a></div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00297">Casting.h:297</a></div></div>
|
|
93
93
|
<div class="ttc" id="cJSON_8cpp_html_a3f9a0d3265a6254722587175dac3e4dc"><div class="ttname"><a href="cJSON_8cpp.html#a3f9a0d3265a6254722587175dac3e4dc">type</a></div><div class="ttdeci">newitem type</div><div class="ttdef"><b>Definition:</b> <a href="cJSON_8cpp_source.html#l02739">cJSON.cpp:2739</a></div></div>
|
|
94
94
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1simplify__type_html_a8046f044d895a5c9aee85de9705161f9"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1simplify__type.html#a8046f044d895a5c9aee85de9705161f9">SVF::SVFUtil::simplify_type::getSimplifiedValue</a></div><div class="ttdeci">static SimpleType & getSimplifiedValue(From &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00108">Casting.h:108</a></div></div>
|
|
95
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5_01_4_html_a98a60de95a331a34dcbad6da9961a9b7"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5_01_4.html#a98a60de95a331a34dcbad6da9961a9b7">SVF::SVFUtil::cast_retty_impl< To, const From * >::ret_type</a></div><div class="ttdeci">const To * ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
95
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5_01_4_html_a98a60de95a331a34dcbad6da9961a9b7"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01const_01From_01_5_01_4.html#a98a60de95a331a34dcbad6da9961a9b7">SVF::SVFUtil::cast_retty_impl< To, const From * >::ret_type</a></div><div class="ttdeci">const To * ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00277">Casting.h:277</a></div></div>
|
|
96
96
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1add__const__past__pointer_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is_7fffc8df953a67082a10c9027356ecdf_html_a6c70a94bde914aa0ca86e4fd9f6c1179"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1add__const__past__pointer_3_01T_00_01std_1_1enable__if__t_3_01std_1_1is_7fffc8df953a67082a10c9027356ecdf.html#a6c70a94bde914aa0ca86e4fd9f6c1179">SVF::SVFUtil::add_const_past_pointer< T, std::enable_if_t< std::is_pointer< T >::value > >::type</a></div><div class="ttdeci">const std::remove_pointer_t< T > * type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00078">Casting.h:78</a></div></div>
|
|
97
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4_html_a052f7cd3a81e368060f132bf0268fa68"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a052f7cd3a81e368060f132bf0268fa68">SVF::SVFUtil::cast_retty_impl< To, std::unique_ptr< From > >::ResultType</a></div><div class="ttdeci">typename std::remove_pointer< PointerType >::type ResultType</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
97
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4_html_a052f7cd3a81e368060f132bf0268fa68"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a052f7cd3a81e368060f132bf0268fa68">SVF::SVFUtil::cast_retty_impl< To, std::unique_ptr< From > >::ResultType</a></div><div class="ttdeci">typename std::remove_pointer< PointerType >::type ResultType</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00290">Casting.h:290</a></div></div>
|
|
98
98
|
<div class="ttc" id="namespaceSVFUtil_html"><div class="ttname"><a href="namespaceSVFUtil.html">SVFUtil</a></div></div>
|
|
99
99
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4_html_ac64f5d9a2ec97aebd7b377319d7f043b"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#ac64f5d9a2ec97aebd7b377319d7f043b">SVF::SVFUtil::simplify_type< const From >::getSimplifiedValue</a></div><div class="ttdeci">static RetType getSimplifiedValue(const From &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00122">Casting.h:122</a></div></div>
|
|
100
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_html_a5f8f6d651931eba7e0fa14c26a691a04"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html#a5f8f6d651931eba7e0fa14c26a691a04">SVF::SVFUtil::cast_retty_impl::ret_type</a></div><div class="ttdeci">To & ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
101
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01From_01_5_01_4_html_a86c02dc15b65d0c052ea4447b3fb6333"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01From_01_5_01_4.html#a86c02dc15b65d0c052ea4447b3fb6333">SVF::SVFUtil::cast_retty_impl< To, From * >::ret_type</a></div><div class="ttdeci">To * ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
102
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4_html_a9d08abc346f3b77c487eba144f3cbd8d"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a9d08abc346f3b77c487eba144f3cbd8d">SVF::SVFUtil::cast_retty_impl< To, std::unique_ptr< From > >::PointerType</a></div><div class="ttdeci">typename cast_retty_impl< To, From * >::ret_type PointerType</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
100
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_html_a5f8f6d651931eba7e0fa14c26a691a04"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html#a5f8f6d651931eba7e0fa14c26a691a04">SVF::SVFUtil::cast_retty_impl::ret_type</a></div><div class="ttdeci">To & ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00263">Casting.h:263</a></div></div>
|
|
101
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01From_01_5_01_4_html_a86c02dc15b65d0c052ea4447b3fb6333"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01From_01_5_01_4.html#a86c02dc15b65d0c052ea4447b3fb6333">SVF::SVFUtil::cast_retty_impl< To, From * >::ret_type</a></div><div class="ttdeci">To * ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00272">Casting.h:272</a></div></div>
|
|
102
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4_html_a9d08abc346f3b77c487eba144f3cbd8d"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a9d08abc346f3b77c487eba144f3cbd8d">SVF::SVFUtil::cast_retty_impl< To, std::unique_ptr< From > >::PointerType</a></div><div class="ttdeci">typename cast_retty_impl< To, From * >::ret_type PointerType</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00289">Casting.h:289</a></div></div>
|
|
103
103
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1isa__impl__wrap_html_aa0f166d8bdcd1e7b954cc29c19a40b04"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1isa__impl__wrap.html#aa0f166d8bdcd1e7b954cc29c19a40b04">SVF::SVFUtil::isa_impl_wrap::doit</a></div><div class="ttdeci">static bool doit(const From &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00217">Casting.h:217</a></div></div>
|
|
104
104
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer_html_a871b0a9d4f1c68caca4d8e8b9ce29079"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer.html#a871b0a9d4f1c68caca4d8e8b9ce29079">SVF::SVFUtil::add_lvalue_reference_if_not_pointer::type</a></div><div class="ttdeci">T & type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00085">Casting.h:85</a></div></div>
|
|
105
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4_html_a3bf80190e39c339d4e3ec703789ae845"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a3bf80190e39c339d4e3ec703789ae845">SVF::SVFUtil::cast_retty_impl< To, std::unique_ptr< From > >::ret_type</a></div><div class="ttdeci">std::unique_ptr< ResultType > ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
105
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4_html_a3bf80190e39c339d4e3ec703789ae845"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl_3_01To_00_01std_1_1unique__ptr_3_01From_01_4_01_4.html#a3bf80190e39c339d4e3ec703789ae845">SVF::SVFUtil::cast_retty_impl< To, std::unique_ptr< From > >::ret_type</a></div><div class="ttdeci">std::unique_ptr< ResultType > ret_type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00293">Casting.h:293</a></div></div>
|
|
106
106
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4_html_aadddb18b44c9744dcc639a3de603151d"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1simplify__type_3_01const_01From_01_4.html#aadddb18b44c9744dcc639a3de603151d">SVF::SVFUtil::simplify_type< const From >::NonConstSimpleType</a></div><div class="ttdeci">typename simplify_type< From >::SimpleType NonConstSimpleType</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00116">Casting.h:116</a></div></div>
|
|
107
107
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5const_01_4_html_ac95b00b5d96e6b8457ecade4dbda3de3"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5const_01_4.html#ac95b00b5d96e6b8457ecade4dbda3de3">SVF::SVFUtil::isa_impl_cl< To, From *const >::doit</a></div><div class="ttdeci">static bool doit(const From *Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00187">Casting.h:187</a></div></div>
|
|
108
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1is__simple__type_html"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1is__simple__type.html">SVF::SVFUtil::is_simple_type</a></div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
109
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_html"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html">SVF::SVFUtil::cast_retty_impl</a></div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
108
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1is__simple__type_html"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1is__simple__type.html">SVF::SVFUtil::is_simple_type</a></div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00344">Casting.h:344</a></div></div>
|
|
109
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty__impl_html"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty__impl.html">SVF::SVFUtil::cast_retty_impl</a></div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00261">Casting.h:261</a></div></div>
|
|
110
110
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5_01_4_html_a8add67bd107583b7c34fce53a748bcb0"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01From_01_5_01_4.html#a8add67bd107583b7c34fce53a748bcb0">SVF::SVFUtil::isa_impl_cl< To, From * >::doit</a></div><div class="ttdeci">static bool doit(const From *Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00178">Casting.h:178</a></div></div>
|
|
111
111
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer_3_01T_00_01std_1_1enable__if__t915410d772a4855ec3d21a633a25ee09_html_a7930ae77015a1bef7da45e112a92cbce"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1add__lvalue__reference__if__not__pointer_3_01T_00_01std_1_1enable__if__t915410d772a4855ec3d21a633a25ee09.html#a7930ae77015a1bef7da45e112a92cbce">SVF::SVFUtil::add_lvalue_reference_if_not_pointer< T, std::enable_if_t< std::is_pointer< T >::value > >::type</a></div><div class="ttdeci">T type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00092">Casting.h:92</a></div></div>
|
|
112
112
|
<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>
|
|
113
113
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1simplify__type_html"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1simplify__type.html">SVF::SVFUtil::simplify_type</a></div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00103">Casting.h:103</a></div></div>
|
|
114
|
-
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a5c8cbc986cccb9d84f87aae162df3737"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a5c8cbc986cccb9d84f87aae162df3737">SVF::SVFUtil::isa</a></div><div class="ttdeci">LLVM_NODISCARD bool isa(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
114
|
+
<div class="ttc" id="namespaceSVF_1_1SVFUtil_html_a5c8cbc986cccb9d84f87aae162df3737"><div class="ttname"><a href="namespaceSVF_1_1SVFUtil.html#a5c8cbc986cccb9d84f87aae162df3737">SVF::SVFUtil::isa</a></div><div class="ttdeci">LLVM_NODISCARD bool isa(const Y &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00241">Casting.h:241</a></div></div>
|
|
115
115
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1isa__impl__cl_html"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html">SVF::SVFUtil::isa_impl_cl</a></div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00150">Casting.h:150</a></div></div>
|
|
116
116
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1isa__impl__cl_html_afbe68352d888c0b15e9f46d4e378bacb"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1isa__impl__cl.html#afbe68352d888c0b15e9f46d4e378bacb">SVF::SVFUtil::isa_impl_cl::doit</a></div><div class="ttdeci">static bool doit(const From &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00152">Casting.h:152</a></div></div>
|
|
117
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty_html"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty.html">SVF::SVFUtil::cast_retty</a></div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
117
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__retty_html"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__retty.html">SVF::SVFUtil::cast_retty</a></div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00257">Casting.h:257</a></div></div>
|
|
118
118
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01std_1_1unique__ptr_3_01From_01_4_01_4_html_aff368847551a69d07b06237908594852"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1isa__impl__cl_3_01To_00_01const_01std_1_1unique__ptr_3_01From_01_4_01_4.html#aff368847551a69d07b06237908594852">SVF::SVFUtil::isa_impl_cl< To, const std::unique_ptr< From > >::doit</a></div><div class="ttdeci">static bool doit(const std::unique_ptr< From > &Val)</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00169">Casting.h:169</a></div></div>
|
|
119
|
-
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__convert__val_html"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__convert__val.html">SVF::SVFUtil::cast_convert_val</a></div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#
|
|
119
|
+
<div class="ttc" id="structSVF_1_1SVFUtil_1_1cast__convert__val_html"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1cast__convert__val.html">SVF::SVFUtil::cast_convert_val</a></div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00322">Casting.h:322</a></div></div>
|
|
120
120
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1simplify__type_html_a40c0d9a74681d3eaa7172ba137d489e4"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1simplify__type.html#a40c0d9a74681d3eaa7172ba137d489e4">SVF::SVFUtil::simplify_type::SimpleType</a></div><div class="ttdeci">From SimpleType</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00105">Casting.h:105</a></div></div>
|
|
121
121
|
<div class="ttc" id="structSVF_1_1SVFUtil_1_1add__const__past__pointer_html_a52fe829ad016bca3285dfba2b5b68d35"><div class="ttname"><a href="structSVF_1_1SVFUtil_1_1add__const__past__pointer.html#a52fe829ad016bca3285dfba2b5b68d35">SVF::SVFUtil::add_const_past_pointer::type</a></div><div class="ttdeci">const T type</div><div class="ttdef"><b>Definition:</b> <a href="Casting_8h_source.html#l00072">Casting.h:72</a></div></div>
|
|
122
122
|
</div><!-- fragment --></div><!-- contents -->
|