svf-tools 1.0.849 → 1.0.850

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. package/SVF-doxygen/html/IntervalExeState_8cpp_source.html +293 -217
  2. package/SVF-doxygen/html/IntervalExeState_8h.html +2 -0
  3. package/SVF-doxygen/html/IntervalExeState_8h_source.html +622 -435
  4. package/SVF-doxygen/html/RelationSolver_8cpp_source.html +60 -60
  5. package/SVF-doxygen/html/RelationSolver_8h_source.html +16 -16
  6. package/SVF-doxygen/html/SVFIR2ItvExeState_8cpp_source.html +10 -10
  7. package/SVF-doxygen/html/SVFIR2ItvExeState_8h_source.html +8 -8
  8. package/SVF-doxygen/html/annotated.html +215 -214
  9. package/SVF-doxygen/html/classSVF_1_1ExeState.html +9 -8
  10. package/SVF-doxygen/html/classSVF_1_1ExeState.png +0 -0
  11. package/SVF-doxygen/html/classSVF_1_1IntervalESBase-members.html +168 -0
  12. package/SVF-doxygen/html/classSVF_1_1IntervalESBase.html +2331 -0
  13. package/SVF-doxygen/html/classSVF_1_1IntervalESBase.png +0 -0
  14. package/SVF-doxygen/html/classSVF_1_1IntervalExeState-members.html +79 -62
  15. package/SVF-doxygen/html/classSVF_1_1IntervalExeState.html +497 -1381
  16. package/SVF-doxygen/html/classSVF_1_1IntervalExeState.png +0 -0
  17. package/SVF-doxygen/html/classSVF_1_1RelationSolver-members.html +8 -8
  18. package/SVF-doxygen/html/classSVF_1_1RelationSolver.html +100 -100
  19. package/SVF-doxygen/html/classSVF_1_1SVFIR2ItvExeState.html +29 -29
  20. package/SVF-doxygen/html/classes.html +232 -231
  21. package/SVF-doxygen/html/functions.html +2 -2
  22. package/SVF-doxygen/html/functions_a.html +1 -1
  23. package/SVF-doxygen/html/functions_b.html +4 -4
  24. package/SVF-doxygen/html/functions_c.html +2 -2
  25. package/SVF-doxygen/html/functions_e.html +4 -3
  26. package/SVF-doxygen/html/functions_f.html +3 -3
  27. package/SVF-doxygen/html/functions_func.html +1 -1
  28. package/SVF-doxygen/html/functions_func_b.html +4 -4
  29. package/SVF-doxygen/html/functions_func_c.html +2 -2
  30. package/SVF-doxygen/html/functions_func_e.html +3 -2
  31. package/SVF-doxygen/html/functions_func_g.html +27 -24
  32. package/SVF-doxygen/html/functions_func_h.html +4 -3
  33. package/SVF-doxygen/html/functions_func_i.html +16 -9
  34. package/SVF-doxygen/html/functions_func_j.html +1 -0
  35. package/SVF-doxygen/html/functions_func_l.html +6 -4
  36. package/SVF-doxygen/html/functions_func_m.html +1 -0
  37. package/SVF-doxygen/html/functions_func_n.html +6 -4
  38. package/SVF-doxygen/html/functions_func_o.html +17 -11
  39. package/SVF-doxygen/html/functions_func_p.html +3 -3
  40. package/SVF-doxygen/html/functions_func_r.html +1 -1
  41. package/SVF-doxygen/html/functions_func_s.html +2 -2
  42. package/SVF-doxygen/html/functions_func_t.html +2 -2
  43. package/SVF-doxygen/html/functions_func_w.html +4 -2
  44. package/SVF-doxygen/html/functions_func_~.html +3 -0
  45. package/SVF-doxygen/html/functions_g.html +24 -21
  46. package/SVF-doxygen/html/functions_h.html +6 -5
  47. package/SVF-doxygen/html/functions_i.html +21 -14
  48. package/SVF-doxygen/html/functions_j.html +1 -0
  49. package/SVF-doxygen/html/functions_l.html +10 -8
  50. package/SVF-doxygen/html/functions_m.html +1 -0
  51. package/SVF-doxygen/html/functions_n.html +5 -3
  52. package/SVF-doxygen/html/functions_o.html +18 -12
  53. package/SVF-doxygen/html/functions_p.html +17 -13
  54. package/SVF-doxygen/html/functions_r.html +7 -8
  55. package/SVF-doxygen/html/functions_rela_r.html +2 -1
  56. package/SVF-doxygen/html/functions_rela_s.html +1 -0
  57. package/SVF-doxygen/html/functions_s.html +15 -14
  58. package/SVF-doxygen/html/functions_t.html +5 -5
  59. package/SVF-doxygen/html/functions_type_l.html +1 -1
  60. package/SVF-doxygen/html/functions_type_v.html +1 -1
  61. package/SVF-doxygen/html/functions_v.html +7 -5
  62. package/SVF-doxygen/html/functions_vars.html +2 -2
  63. package/SVF-doxygen/html/functions_w.html +13 -9
  64. package/SVF-doxygen/html/functions_~.html +3 -0
  65. package/SVF-doxygen/html/hierarchy.html +2 -1
  66. package/SVF-doxygen/html/namespaceSVF.html +2 -0
  67. package/SVF-doxygen/html/search/all_0.js +2 -2
  68. package/SVF-doxygen/html/search/all_1.js +1 -1
  69. package/SVF-doxygen/html/search/all_10.js +325 -325
  70. package/SVF-doxygen/html/search/all_11.js +224 -224
  71. package/SVF-doxygen/html/search/all_12.js +552 -552
  72. package/SVF-doxygen/html/search/all_13.js +190 -190
  73. package/SVF-doxygen/html/search/all_14.js +67 -67
  74. package/SVF-doxygen/html/search/all_15.js +168 -168
  75. package/SVF-doxygen/html/search/all_16.js +63 -63
  76. package/SVF-doxygen/html/search/all_17.js +1 -1
  77. package/SVF-doxygen/html/search/all_18.js +1 -1
  78. package/SVF-doxygen/html/search/all_19.js +11 -11
  79. package/SVF-doxygen/html/search/all_1a.js +174 -173
  80. package/SVF-doxygen/html/search/all_2.js +4 -4
  81. package/SVF-doxygen/html/search/all_3.js +2 -2
  82. package/SVF-doxygen/html/search/all_5.js +2 -2
  83. package/SVF-doxygen/html/search/all_6.js +1 -1
  84. package/SVF-doxygen/html/search/all_7.js +6 -6
  85. package/SVF-doxygen/html/search/all_8.js +2 -2
  86. package/SVF-doxygen/html/search/all_9.js +406 -405
  87. package/SVF-doxygen/html/search/all_a.js +46 -46
  88. package/SVF-doxygen/html/search/all_b.js +26 -26
  89. package/SVF-doxygen/html/search/all_c.js +115 -115
  90. package/SVF-doxygen/html/search/all_d.js +197 -197
  91. package/SVF-doxygen/html/search/all_e.js +207 -207
  92. package/SVF-doxygen/html/search/all_f.js +116 -116
  93. package/SVF-doxygen/html/search/classes_0.js +26 -26
  94. package/SVF-doxygen/html/search/classes_1.js +9 -9
  95. package/SVF-doxygen/html/search/classes_10.js +73 -73
  96. package/SVF-doxygen/html/search/classes_11.js +15 -15
  97. package/SVF-doxygen/html/search/classes_12.js +2 -2
  98. package/SVF-doxygen/html/search/classes_13.js +10 -10
  99. package/SVF-doxygen/html/search/classes_14.js +14 -14
  100. package/SVF-doxygen/html/search/classes_15.js +1 -1
  101. package/SVF-doxygen/html/search/classes_2.js +81 -81
  102. package/SVF-doxygen/html/search/classes_3.js +37 -37
  103. package/SVF-doxygen/html/search/classes_4.js +9 -9
  104. package/SVF-doxygen/html/search/classes_5.js +28 -28
  105. package/SVF-doxygen/html/search/classes_6.js +104 -104
  106. package/SVF-doxygen/html/search/classes_7.js +34 -34
  107. package/SVF-doxygen/html/search/classes_8.js +57 -56
  108. package/SVF-doxygen/html/search/classes_9.js +1 -1
  109. package/SVF-doxygen/html/search/classes_a.js +12 -12
  110. package/SVF-doxygen/html/search/classes_b.js +29 -29
  111. package/SVF-doxygen/html/search/classes_c.js +6 -6
  112. package/SVF-doxygen/html/search/classes_d.js +18 -18
  113. package/SVF-doxygen/html/search/classes_e.js +36 -36
  114. package/SVF-doxygen/html/search/classes_f.js +25 -25
  115. package/SVF-doxygen/html/search/defines_0.js +3 -3
  116. package/SVF-doxygen/html/search/defines_1.js +2 -2
  117. package/SVF-doxygen/html/search/defines_2.js +30 -30
  118. package/SVF-doxygen/html/search/defines_3.js +20 -20
  119. package/SVF-doxygen/html/search/defines_4.js +2 -2
  120. package/SVF-doxygen/html/search/defines_5.js +4 -4
  121. package/SVF-doxygen/html/search/defines_6.js +2 -2
  122. package/SVF-doxygen/html/search/defines_7.js +5 -5
  123. package/SVF-doxygen/html/search/defines_8.js +11 -11
  124. package/SVF-doxygen/html/search/defines_9.js +9 -9
  125. package/SVF-doxygen/html/search/defines_a.js +2 -2
  126. package/SVF-doxygen/html/search/defines_b.js +1 -1
  127. package/SVF-doxygen/html/search/defines_c.js +3 -3
  128. package/SVF-doxygen/html/search/defines_d.js +2 -2
  129. package/SVF-doxygen/html/search/defines_e.js +7 -7
  130. package/SVF-doxygen/html/search/defines_f.js +3 -3
  131. package/SVF-doxygen/html/search/enums_0.js +3 -3
  132. package/SVF-doxygen/html/search/enums_1.js +2 -2
  133. package/SVF-doxygen/html/search/enums_10.js +1 -1
  134. package/SVF-doxygen/html/search/enums_11.js +1 -1
  135. package/SVF-doxygen/html/search/enums_2.js +8 -8
  136. package/SVF-doxygen/html/search/enums_3.js +1 -1
  137. package/SVF-doxygen/html/search/enums_4.js +3 -3
  138. package/SVF-doxygen/html/search/enums_5.js +1 -1
  139. package/SVF-doxygen/html/search/enums_6.js +2 -2
  140. package/SVF-doxygen/html/search/enums_7.js +2 -2
  141. package/SVF-doxygen/html/search/enums_8.js +4 -4
  142. package/SVF-doxygen/html/search/enums_9.js +1 -1
  143. package/SVF-doxygen/html/search/enums_a.js +1 -1
  144. package/SVF-doxygen/html/search/enums_b.js +7 -7
  145. package/SVF-doxygen/html/search/enums_c.js +1 -1
  146. package/SVF-doxygen/html/search/enums_d.js +4 -4
  147. package/SVF-doxygen/html/search/enums_e.js +2 -2
  148. package/SVF-doxygen/html/search/enums_f.js +4 -4
  149. package/SVF-doxygen/html/search/enumvalues_0.js +14 -14
  150. package/SVF-doxygen/html/search/enumvalues_1.js +14 -14
  151. package/SVF-doxygen/html/search/enumvalues_10.js +35 -35
  152. package/SVF-doxygen/html/search/enumvalues_11.js +3 -3
  153. package/SVF-doxygen/html/search/enumvalues_12.js +10 -10
  154. package/SVF-doxygen/html/search/enumvalues_13.js +1 -1
  155. package/SVF-doxygen/html/search/enumvalues_14.js +1 -1
  156. package/SVF-doxygen/html/search/enumvalues_15.js +3 -3
  157. package/SVF-doxygen/html/search/enumvalues_2.js +36 -36
  158. package/SVF-doxygen/html/search/enumvalues_3.js +13 -13
  159. package/SVF-doxygen/html/search/enumvalues_4.js +2 -2
  160. package/SVF-doxygen/html/search/enumvalues_5.js +47 -47
  161. package/SVF-doxygen/html/search/enumvalues_6.js +6 -6
  162. package/SVF-doxygen/html/search/enumvalues_7.js +8 -8
  163. package/SVF-doxygen/html/search/enumvalues_8.js +23 -23
  164. package/SVF-doxygen/html/search/enumvalues_9.js +6 -6
  165. package/SVF-doxygen/html/search/enumvalues_a.js +15 -15
  166. package/SVF-doxygen/html/search/enumvalues_b.js +11 -11
  167. package/SVF-doxygen/html/search/enumvalues_c.js +5 -5
  168. package/SVF-doxygen/html/search/enumvalues_d.js +18 -18
  169. package/SVF-doxygen/html/search/enumvalues_e.js +9 -9
  170. package/SVF-doxygen/html/search/enumvalues_f.js +45 -45
  171. package/SVF-doxygen/html/search/files_0.js +13 -13
  172. package/SVF-doxygen/html/search/files_1.js +7 -7
  173. package/SVF-doxygen/html/search/files_10.js +8 -8
  174. package/SVF-doxygen/html/search/files_11.js +8 -8
  175. package/SVF-doxygen/html/search/files_12.js +2 -2
  176. package/SVF-doxygen/html/search/files_2.js +57 -57
  177. package/SVF-doxygen/html/search/files_3.js +14 -14
  178. package/SVF-doxygen/html/search/files_4.js +5 -5
  179. package/SVF-doxygen/html/search/files_5.js +13 -13
  180. package/SVF-doxygen/html/search/files_6.js +9 -9
  181. package/SVF-doxygen/html/search/files_7.js +14 -14
  182. package/SVF-doxygen/html/search/files_8.js +13 -13
  183. package/SVF-doxygen/html/search/files_9.js +18 -18
  184. package/SVF-doxygen/html/search/files_a.js +3 -3
  185. package/SVF-doxygen/html/search/files_b.js +2 -2
  186. package/SVF-doxygen/html/search/files_c.js +20 -20
  187. package/SVF-doxygen/html/search/files_d.js +4 -4
  188. package/SVF-doxygen/html/search/files_e.js +62 -62
  189. package/SVF-doxygen/html/search/files_f.js +8 -8
  190. package/SVF-doxygen/html/search/functions_0.js +13 -13
  191. package/SVF-doxygen/html/search/functions_1.js +362 -362
  192. package/SVF-doxygen/html/search/functions_10.js +140 -140
  193. package/SVF-doxygen/html/search/functions_11.js +139 -139
  194. package/SVF-doxygen/html/search/functions_12.js +288 -288
  195. package/SVF-doxygen/html/search/functions_13.js +59 -59
  196. package/SVF-doxygen/html/search/functions_14.js +39 -39
  197. package/SVF-doxygen/html/search/functions_15.js +71 -71
  198. package/SVF-doxygen/html/search/functions_16.js +32 -32
  199. package/SVF-doxygen/html/search/functions_17.js +3 -3
  200. package/SVF-doxygen/html/search/functions_18.js +174 -173
  201. package/SVF-doxygen/html/search/functions_2.js +89 -89
  202. package/SVF-doxygen/html/search/functions_3.js +261 -261
  203. package/SVF-doxygen/html/search/functions_4.js +78 -78
  204. package/SVF-doxygen/html/search/functions_5.js +53 -53
  205. package/SVF-doxygen/html/search/functions_6.js +60 -60
  206. package/SVF-doxygen/html/search/functions_7.js +855 -855
  207. package/SVF-doxygen/html/search/functions_8.js +148 -148
  208. package/SVF-doxygen/html/search/functions_9.js +421 -420
  209. package/SVF-doxygen/html/search/functions_a.js +30 -30
  210. package/SVF-doxygen/html/search/functions_b.js +2 -2
  211. package/SVF-doxygen/html/search/functions_c.js +25 -25
  212. package/SVF-doxygen/html/search/functions_d.js +79 -79
  213. package/SVF-doxygen/html/search/functions_e.js +35 -35
  214. package/SVF-doxygen/html/search/functions_f.js +56 -56
  215. package/SVF-doxygen/html/search/namespaces_0.js +1 -1
  216. package/SVF-doxygen/html/search/namespaces_1.js +7 -7
  217. package/SVF-doxygen/html/search/related_0.js +2 -2
  218. package/SVF-doxygen/html/search/related_1.js +2 -2
  219. package/SVF-doxygen/html/search/related_2.js +3 -3
  220. package/SVF-doxygen/html/search/related_3.js +2 -2
  221. package/SVF-doxygen/html/search/related_4.js +2 -2
  222. package/SVF-doxygen/html/search/related_5.js +1 -1
  223. package/SVF-doxygen/html/search/related_6.js +2 -2
  224. package/SVF-doxygen/html/search/related_7.js +4 -4
  225. package/SVF-doxygen/html/search/related_8.js +2 -2
  226. package/SVF-doxygen/html/search/related_9.js +4 -4
  227. package/SVF-doxygen/html/search/related_a.js +19 -19
  228. package/SVF-doxygen/html/search/related_b.js +4 -4
  229. package/SVF-doxygen/html/search/related_c.js +2 -2
  230. package/SVF-doxygen/html/search/related_d.js +12 -12
  231. package/SVF-doxygen/html/search/related_e.js +2 -2
  232. package/SVF-doxygen/html/search/related_f.js +2 -2
  233. package/SVF-doxygen/html/search/typedefs_0.js +19 -19
  234. package/SVF-doxygen/html/search/typedefs_1.js +26 -26
  235. package/SVF-doxygen/html/search/typedefs_10.js +62 -62
  236. package/SVF-doxygen/html/search/typedefs_11.js +13 -13
  237. package/SVF-doxygen/html/search/typedefs_12.js +11 -11
  238. package/SVF-doxygen/html/search/typedefs_13.js +33 -33
  239. package/SVF-doxygen/html/search/typedefs_14.js +8 -8
  240. package/SVF-doxygen/html/search/typedefs_2.js +129 -129
  241. package/SVF-doxygen/html/search/typedefs_3.js +39 -39
  242. package/SVF-doxygen/html/search/typedefs_4.js +17 -17
  243. package/SVF-doxygen/html/search/typedefs_5.js +41 -41
  244. package/SVF-doxygen/html/search/typedefs_6.js +56 -56
  245. package/SVF-doxygen/html/search/typedefs_7.js +44 -44
  246. package/SVF-doxygen/html/search/typedefs_8.js +1 -1
  247. package/SVF-doxygen/html/search/typedefs_9.js +6 -6
  248. package/SVF-doxygen/html/search/typedefs_a.js +29 -29
  249. package/SVF-doxygen/html/search/typedefs_b.js +29 -29
  250. package/SVF-doxygen/html/search/typedefs_c.js +41 -41
  251. package/SVF-doxygen/html/search/typedefs_d.js +14 -14
  252. package/SVF-doxygen/html/search/typedefs_e.js +52 -52
  253. package/SVF-doxygen/html/search/typedefs_f.js +14 -14
  254. package/SVF-doxygen/html/search/variables_0.js +151 -151
  255. package/SVF-doxygen/html/search/variables_1.js +75 -75
  256. package/SVF-doxygen/html/search/variables_10.js +98 -98
  257. package/SVF-doxygen/html/search/variables_11.js +45 -45
  258. package/SVF-doxygen/html/search/variables_12.js +90 -90
  259. package/SVF-doxygen/html/search/variables_13.js +74 -74
  260. package/SVF-doxygen/html/search/variables_14.js +14 -14
  261. package/SVF-doxygen/html/search/variables_15.js +49 -49
  262. package/SVF-doxygen/html/search/variables_16.js +9 -9
  263. package/SVF-doxygen/html/search/variables_17.js +1 -1
  264. package/SVF-doxygen/html/search/variables_18.js +2 -2
  265. package/SVF-doxygen/html/search/variables_2.js +38 -38
  266. package/SVF-doxygen/html/search/variables_3.js +142 -142
  267. package/SVF-doxygen/html/search/variables_4.js +50 -50
  268. package/SVF-doxygen/html/search/variables_5.js +37 -37
  269. package/SVF-doxygen/html/search/variables_6.js +66 -66
  270. package/SVF-doxygen/html/search/variables_7.js +34 -34
  271. package/SVF-doxygen/html/search/variables_8.js +7 -7
  272. package/SVF-doxygen/html/search/variables_9.js +78 -78
  273. package/SVF-doxygen/html/search/variables_a.js +4 -4
  274. package/SVF-doxygen/html/search/variables_b.js +10 -10
  275. package/SVF-doxygen/html/search/variables_c.js +45 -45
  276. package/SVF-doxygen/html/search/variables_d.js +55 -55
  277. package/SVF-doxygen/html/search/variables_e.js +123 -123
  278. package/SVF-doxygen/html/search/variables_f.js +30 -30
  279. package/SVF-doxygen/html/structstd_1_1hash_3_01SVF_1_1IntervalExeState_01_4.html +6 -6
  280. package/package.json +1 -1
  281. package/svf/include/AbstractExecution/IntervalExeState.h +274 -102
  282. package/svf/include/AbstractExecution/RelationSolver.h +9 -9
  283. package/svf/lib/AbstractExecution/IntervalExeState.cpp +85 -14
  284. package/svf/lib/AbstractExecution/RelationSolver.cpp +22 -22
@@ -33,13 +33,12 @@
33
33
  using namespace SVF;
34
34
  using namespace SVFUtil;
35
35
 
36
- IntervalExeState IntervalExeState::globalES;
37
- bool IntervalExeState::equals(const IntervalExeState &other) const
36
+ bool IntervalESBase::equals(const IntervalESBase &other) const
38
37
  {
39
38
  return *this == other;
40
39
  }
41
40
 
42
- u32_t IntervalExeState::hash() const
41
+ u32_t IntervalESBase::hash() const
43
42
  {
44
43
  size_t h = getVarToVal().size() * 2;
45
44
  Hash<u32_t> hf;
@@ -56,9 +55,9 @@ u32_t IntervalExeState::hash() const
56
55
  return pairH(std::make_pair(std::make_pair(h, h2), (u32_t) ExeState::hash()));
57
56
  }
58
57
 
59
- IntervalExeState IntervalExeState::widening(const IntervalExeState& other)
58
+ IntervalESBase IntervalESBase::widening(const IntervalESBase& other)
60
59
  {
61
- IntervalExeState es = *this;
60
+ IntervalESBase es = *this;
62
61
  for (auto it = es._varToItvVal.begin(); it != es._varToItvVal.end(); ++it)
63
62
  {
64
63
  auto key = it->first;
@@ -74,9 +73,9 @@ IntervalExeState IntervalExeState::widening(const IntervalExeState& other)
74
73
  return es;
75
74
  }
76
75
 
77
- IntervalExeState IntervalExeState::narrowing(const IntervalExeState& other)
76
+ IntervalESBase IntervalESBase::narrowing(const IntervalESBase& other)
78
77
  {
79
- IntervalExeState es = *this;
78
+ IntervalESBase es = *this;
80
79
  for (auto it = es._varToItvVal.begin(); it != es._varToItvVal.end(); ++it)
81
80
  {
82
81
  auto key = it->first;
@@ -94,7 +93,7 @@ IntervalExeState IntervalExeState::narrowing(const IntervalExeState& other)
94
93
  }
95
94
 
96
95
  /// domain widen with other, important! other widen this.
97
- void IntervalExeState::widenWith(const IntervalExeState& other)
96
+ void IntervalESBase::widenWith(const IntervalESBase& other)
98
97
  {
99
98
  for (auto it = _varToItvVal.begin(); it != _varToItvVal.end(); ++it)
100
99
  {
@@ -111,7 +110,7 @@ void IntervalExeState::widenWith(const IntervalExeState& other)
111
110
  }
112
111
 
113
112
  /// domain join with other, important! other widen this.
114
- void IntervalExeState::joinWith(const IntervalExeState& other)
113
+ void IntervalESBase::joinWith(const IntervalESBase& other)
115
114
  {
116
115
  ExeState::joinWith(other);
117
116
  for (auto it = other._varToItvVal.begin(); it != other._varToItvVal.end(); ++it)
@@ -143,7 +142,7 @@ void IntervalExeState::joinWith(const IntervalExeState& other)
143
142
  }
144
143
 
145
144
  /// domain narrow with other, important! other widen this.
146
- void IntervalExeState::narrowWith(const IntervalExeState& other)
145
+ void IntervalESBase::narrowWith(const IntervalESBase& other)
147
146
  {
148
147
  for (auto it = _varToItvVal.begin(); it != _varToItvVal.end(); ++it)
149
148
  {
@@ -162,7 +161,7 @@ void IntervalExeState::narrowWith(const IntervalExeState& other)
162
161
  }
163
162
 
164
163
  /// domain meet with other, important! other widen this.
165
- void IntervalExeState::meetWith(const IntervalExeState& other)
164
+ void IntervalESBase::meetWith(const IntervalESBase& other)
166
165
  {
167
166
  ExeState::meetWith(other);
168
167
  for (auto it = other._varToItvVal.begin(); it != other._varToItvVal.end(); ++it)
@@ -186,7 +185,7 @@ void IntervalExeState::meetWith(const IntervalExeState& other)
186
185
  }
187
186
 
188
187
  /// Print values of all expressions
189
- void IntervalExeState::printExprValues(std::ostream &oss) const
188
+ void IntervalESBase::printExprValues(std::ostream &oss) const
190
189
  {
191
190
  oss << "-----------Var and Value-----------\n";
192
191
  printTable(_varToItvVal, oss);
@@ -196,7 +195,7 @@ void IntervalExeState::printExprValues(std::ostream &oss) const
196
195
  oss << "-----------------------------------------\n";
197
196
  }
198
197
 
199
- void IntervalExeState::printTable(const VarToValMap &table, std::ostream &oss) const
198
+ void IntervalESBase::printTable(const VarToValMap &table, std::ostream &oss) const
200
199
  {
201
200
  oss.flags(std::ios::left);
202
201
  std::set<NodeID> ordered;
@@ -219,7 +218,7 @@ void IntervalExeState::printTable(const VarToValMap &table, std::ostream &oss) c
219
218
  }
220
219
  }
221
220
 
222
- void IntervalExeState::printTable(const VarToAddrs &table, std::ostream &oss) const
221
+ void IntervalESBase::printTable(const VarToAddrs &table, std::ostream &oss) const
223
222
  {
224
223
  oss.flags(std::ios::left);
225
224
  std::set<NodeID> ordered;
@@ -239,3 +238,75 @@ void IntervalExeState::printTable(const VarToAddrs &table, std::ostream &oss) co
239
238
  oss << "]\n";
240
239
  }
241
240
  }
241
+
242
+ IntervalExeState IntervalExeState::globalES;
243
+ bool IntervalExeState::equals(const IntervalExeState &other) const
244
+ {
245
+ return *this == other;
246
+ }
247
+
248
+ u32_t IntervalExeState::hash() const
249
+ {
250
+ return IntervalESBase::hash();
251
+ }
252
+
253
+ IntervalExeState IntervalExeState::widening(const IntervalExeState& other)
254
+ {
255
+ IntervalExeState es = *this;
256
+ for (auto it = es._varToItvVal.begin(); it != es._varToItvVal.end(); ++it)
257
+ {
258
+ auto key = it->first;
259
+ if (other._varToItvVal.find(key) != other._varToItvVal.end())
260
+ it->second.widen_with(other._varToItvVal.at(key));
261
+ }
262
+ for (auto it = es._locToItvVal.begin(); it != es._locToItvVal.end(); ++it)
263
+ {
264
+ auto key = it->first;
265
+ if (other._locToItvVal.find(key) != other._locToItvVal.end())
266
+ it->second.widen_with(other._locToItvVal.at(key));
267
+ }
268
+ return es;
269
+ }
270
+
271
+ IntervalExeState IntervalExeState::narrowing(const IntervalExeState& other)
272
+ {
273
+ IntervalExeState es = *this;
274
+ for (auto it = es._varToItvVal.begin(); it != es._varToItvVal.end(); ++it)
275
+ {
276
+ auto key = it->first;
277
+ if (other._varToItvVal.find(key) != other._varToItvVal.end())
278
+ it->second.narrow_with(other._varToItvVal.at(key));
279
+ }
280
+ for (auto it = es._locToItvVal.begin(); it != es._locToItvVal.end(); ++it)
281
+ {
282
+ auto key = it->first;
283
+ if (other._locToItvVal.find(key) != other._locToItvVal.end())
284
+ it->second.narrow_with(other._locToItvVal.at(key));
285
+ }
286
+ return es;
287
+
288
+ }
289
+
290
+ /// domain widen with other, important! other widen this.
291
+ void IntervalExeState::widenWith(const IntervalExeState& other)
292
+ {
293
+ IntervalESBase::widenWith(other);
294
+ }
295
+
296
+ /// domain join with other, important! other widen this.
297
+ void IntervalExeState::joinWith(const IntervalExeState& other)
298
+ {
299
+ IntervalESBase::joinWith(other);
300
+ }
301
+
302
+ /// domain narrow with other, important! other widen this.
303
+ void IntervalExeState::narrowWith(const IntervalExeState& other)
304
+ {
305
+ IntervalESBase::narrowWith(other);
306
+ }
307
+
308
+ /// domain meet with other, important! other widen this.
309
+ void IntervalExeState::meetWith(const IntervalExeState& other)
310
+ {
311
+ IntervalESBase::meetWith(other);
312
+ }
@@ -30,19 +30,19 @@
30
30
  using namespace SVF;
31
31
  using namespace SVFUtil;
32
32
 
33
- IntervalExeState RelationSolver::bilateral(const IntervalExeState &domain, const Z3Expr& phi,
33
+ IntervalESBase RelationSolver::bilateral(const IntervalESBase &domain, const Z3Expr& phi,
34
34
  u32_t descend_check)
35
35
  {
36
36
  /// init variables
37
- IntervalExeState upper = domain.top();
38
- IntervalExeState lower = domain.bottom();
37
+ IntervalESBase upper = domain.top();
38
+ IntervalESBase lower = domain.bottom();
39
39
  u32_t meets_in_a_row = 0;
40
40
  z3::solver solver = Z3Expr::getSolver();
41
41
  z3::params p(Z3Expr::getContext());
42
42
  /// TODO: add option for timeout
43
43
  p.set(":timeout", static_cast<unsigned>(600)); // in milliseconds
44
44
  solver.set(p);
45
- IntervalExeState consequence;
45
+ IntervalESBase consequence;
46
46
 
47
47
  /// start processing
48
48
  while (lower != upper)
@@ -82,9 +82,9 @@ IntervalExeState RelationSolver::bilateral(const IntervalExeState &domain, const
82
82
  }
83
83
  }
84
84
  solver.pop();
85
- IntervalExeState newLower = domain.bottom();
85
+ IntervalESBase newLower = domain.bottom();
86
86
  newLower.joinWith(lower);
87
- IntervalExeState rhs = beta(solution, domain);
87
+ IntervalESBase rhs = beta(solution, domain);
88
88
  newLower.joinWith(rhs);
89
89
  lower = newLower;
90
90
  meets_in_a_row = 0;
@@ -98,7 +98,7 @@ IntervalExeState RelationSolver::bilateral(const IntervalExeState &domain, const
98
98
  if (solver.reason_unknown() == "timeout")
99
99
  return upper;
100
100
  }
101
- IntervalExeState newUpper = domain.top();
101
+ IntervalESBase newUpper = domain.top();
102
102
  newUpper.meetWith(upper);
103
103
  newUpper.meetWith(consequence);
104
104
  upper = newUpper;
@@ -108,9 +108,9 @@ IntervalExeState RelationSolver::bilateral(const IntervalExeState &domain, const
108
108
  return upper;
109
109
  }
110
110
 
111
- IntervalExeState RelationSolver::RSY(const IntervalExeState& domain, const Z3Expr& phi)
111
+ IntervalESBase RelationSolver::RSY(const IntervalESBase& domain, const Z3Expr& phi)
112
112
  {
113
- IntervalExeState lower = domain.bottom();
113
+ IntervalESBase lower = domain.bottom();
114
114
  z3::solver& solver = Z3Expr::getSolver();
115
115
  z3::params p(Z3Expr::getContext());
116
116
  /// TODO: add option for timeout
@@ -144,7 +144,7 @@ IntervalExeState RelationSolver::RSY(const IntervalExeState& domain, const Z3Exp
144
144
  }
145
145
  }
146
146
  solver.pop();
147
- IntervalExeState newLower = domain.bottom();
147
+ IntervalESBase newLower = domain.bottom();
148
148
  newLower.joinWith(lower);
149
149
  newLower.joinWith(beta(solution, domain));
150
150
  lower = newLower;
@@ -164,8 +164,8 @@ IntervalExeState RelationSolver::RSY(const IntervalExeState& domain, const Z3Exp
164
164
  return lower;
165
165
  }
166
166
 
167
- IntervalExeState RelationSolver::abstract_consequence(
168
- const IntervalExeState& lower, const IntervalExeState& upper, const IntervalExeState& domain) const
167
+ IntervalESBase RelationSolver::abstract_consequence(
168
+ const IntervalESBase& lower, const IntervalESBase& upper, const IntervalESBase& domain) const
169
169
  {
170
170
  /*Returns the "abstract consequence" of lower and upper.
171
171
 
@@ -181,7 +181,7 @@ IntervalExeState RelationSolver::abstract_consequence(
181
181
  it != domain.getVarToVal().end(); ++it)
182
182
  /// for variable in self.variables:
183
183
  {
184
- IntervalExeState proposed = domain.top(); /// proposed = self.top.copy()
184
+ IntervalESBase proposed = domain.top(); /// proposed = self.top.copy()
185
185
  proposed._varToItvVal[it->first] = lower._varToItvVal.at(it->first);
186
186
  /// proposed.set_interval(variable, lower.interval_of(variable))
187
187
  /// proposed._locToItvVal
@@ -193,7 +193,7 @@ IntervalExeState RelationSolver::abstract_consequence(
193
193
  return lower; /// return lower.copy()
194
194
  }
195
195
 
196
- Z3Expr RelationSolver::gamma_hat(const IntervalExeState& exeState) const
196
+ Z3Expr RelationSolver::gamma_hat(const IntervalESBase& exeState) const
197
197
  {
198
198
  Z3Expr res(Z3Expr::getContext().bool_val(true));
199
199
  for (auto& item : exeState.getVarToVal())
@@ -209,8 +209,8 @@ Z3Expr RelationSolver::gamma_hat(const IntervalExeState& exeState) const
209
209
  return res;
210
210
  }
211
211
 
212
- Z3Expr RelationSolver::gamma_hat(const IntervalExeState& alpha,
213
- const IntervalExeState& exeState) const
212
+ Z3Expr RelationSolver::gamma_hat(const IntervalESBase& alpha,
213
+ const IntervalESBase& exeState) const
214
214
  {
215
215
  Z3Expr res(Z3Expr::getContext().bool_val(true));
216
216
  for (auto& item : exeState.getVarToVal())
@@ -227,7 +227,7 @@ Z3Expr RelationSolver::gamma_hat(const IntervalExeState& alpha,
227
227
  return res;
228
228
  }
229
229
 
230
- Z3Expr RelationSolver::gamma_hat(u32_t id, const IntervalExeState& exeState) const
230
+ Z3Expr RelationSolver::gamma_hat(u32_t id, const IntervalESBase& exeState) const
231
231
  {
232
232
  auto it = exeState.getVarToVal().find(id);
233
233
  assert(it != exeState.getVarToVal().end() && "id not in varToVal?");
@@ -238,10 +238,10 @@ Z3Expr RelationSolver::gamma_hat(u32_t id, const IntervalExeState& exeState) con
238
238
  return res;
239
239
  }
240
240
 
241
- IntervalExeState RelationSolver::beta(const Map<u32_t, double>& sigma,
242
- const IntervalExeState& exeState) const
241
+ IntervalESBase RelationSolver::beta(const Map<u32_t, double>& sigma,
242
+ const IntervalESBase& exeState) const
243
243
  {
244
- IntervalExeState res;
244
+ IntervalESBase res;
245
245
  for (const auto& item : exeState.getVarToVal())
246
246
  {
247
247
  res._varToItvVal[item.first] = IntervalValue(
@@ -263,7 +263,7 @@ void RelationSolver::updateMap(Map<u32_t, NumericLiteral>& map, u32_t key, const
263
263
  }
264
264
  }
265
265
 
266
- IntervalExeState RelationSolver::BS(const IntervalExeState& domain, const Z3Expr &phi)
266
+ IntervalESBase RelationSolver::BS(const IntervalESBase& domain, const Z3Expr &phi)
267
267
  {
268
268
  /// because key of _varToItvVal is u32_t, -key may out of range for int
269
269
  /// so we do key + bias for -key
@@ -307,7 +307,7 @@ IntervalExeState RelationSolver::BS(const IntervalExeState& domain, const Z3Expr
307
307
  /// optimize each object
308
308
  BoxedOptSolver(new_phi.simplify(), ret, low_values, high_values);
309
309
  /// fill in the return values
310
- IntervalExeState retInv;
310
+ IntervalESBase retInv;
311
311
  for (const auto& item: ret)
312
312
  {
313
313
  if (item.first >= bias)