svf-lib 1.0.2472 → 1.0.2473

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-osx/bin/ae CHANGED
Binary file
@@ -218,26 +218,55 @@ private:
218
218
  *
219
219
  * @param cycle WTOCycle which has weak topo order of basic blocks and nested cycles
220
220
  */
221
- virtual void handleCycleWTO(const ICFGCycleWTO* cycle);
221
+ virtual void handleLoopOrRecursion(const ICFGCycleWTO* cycle);
222
222
 
223
- void handleWTOComponents(const std::list<const ICFGWTOComp*>& wtoComps);
223
+ /**
224
+ * Handle a function using worklist algorithm
225
+ *
226
+ * @param funEntry The entry node of the function to handle
227
+ */
228
+ void handleFunction(const ICFGNode* funEntry);
224
229
 
225
- void handleWTOComponent(const ICFGWTOComp* wtoComp);
230
+ /**
231
+ * Handle an ICFG node by merging states and processing statements
232
+ *
233
+ * @param node The ICFG node to handle
234
+ * @return true if state changed, false if fixpoint reached or infeasible
235
+ */
236
+ bool handleICFGNode(const ICFGNode* node);
226
237
 
238
+ /**
239
+ * Get the next nodes of a node within the same function
240
+ *
241
+ * @param node The node to get successors for
242
+ * @return Vector of successor nodes
243
+ */
244
+ std::vector<const ICFGNode*> getNextNodes(const ICFGNode* node) const;
227
245
 
228
246
  /**
229
- * handle SVF Statement like CmpStmt, CallStmt, GepStmt, LoadStmt, StoreStmt, etc.
247
+ * Get the next nodes outside a cycle
230
248
  *
231
- * @param stmt SVFStatement which is a value flow of instruction
249
+ * @param cycle The cycle to get exit successors for
250
+ * @return Vector of successor nodes outside the cycle
232
251
  */
233
- virtual void handleSVFStatement(const SVFStmt* stmt);
252
+ std::vector<const ICFGNode*> getNextNodesOfCycle(const ICFGCycleWTO* cycle) const;
234
253
 
235
254
  /**
236
- * Check if this callnode is recursive call and skip it.
255
+ * Recursively collect cycle heads from nested WTO components
237
256
  *
238
- * @param callnode CallICFGNode which calls a recursive function
257
+ * @param comps The list of WTO components to collect cycle heads from
239
258
  */
240
- virtual void SkipRecursiveCall(const CallICFGNode* callnode);
259
+ void collectCycleHeads(const std::list<const ICFGWTOComp*>& comps);
260
+
261
+
262
+ /**
263
+ * handle SVF Statement like CmpStmt, CallStmt, GepStmt, LoadStmt, StoreStmt, etc.
264
+ *
265
+ * @param stmt SVFStatement which is a value flow of instruction
266
+ */
267
+ virtual void handleSVFStatement(const SVFStmt* stmt);
268
+
269
+ virtual void setTopToObjInRecursion(const CallICFGNode* callnode);
241
270
 
242
271
 
243
272
  /**
@@ -299,6 +328,7 @@ private:
299
328
  Map<const FunObjVar*, const ICFGWTO*> funcToWTO;
300
329
  Set<std::pair<const CallICFGNode*, NodeID>> nonRecursiveCallSites;
301
330
  Set<const FunObjVar*> recursiveFuns;
331
+ Map<const ICFGNode*, const ICFGCycleWTO*> cycleHeadToCycle;
302
332
 
303
333
 
304
334
  bool hasAbsStateFromTrace(const ICFGNode* node)
@@ -313,15 +343,16 @@ private:
313
343
 
314
344
  // helper functions in handleCallSite
315
345
  virtual bool isExtCall(const CallICFGNode* callNode);
316
- virtual void extCallPass(const CallICFGNode* callNode);
346
+ virtual void handleExtCall(const CallICFGNode* callNode);
317
347
  virtual bool isRecursiveFun(const FunObjVar* fun);
318
348
  virtual bool isRecursiveCall(const CallICFGNode* callNode);
319
349
  virtual void recursiveCallPass(const CallICFGNode *callNode);
320
350
  virtual bool isRecursiveCallSite(const CallICFGNode* callNode, const FunObjVar *);
321
- virtual bool isDirectCall(const CallICFGNode* callNode);
322
- virtual void directCallFunPass(const CallICFGNode* callNode);
323
- virtual bool isIndirectCall(const CallICFGNode* callNode);
324
- virtual void indirectCallFunPass(const CallICFGNode* callNode);
351
+ virtual void handleFunCall(const CallICFGNode* callNode);
352
+
353
+ bool skipRecursiveCall(const CallICFGNode* callNode);
354
+ const FunObjVar* getCallee(const CallICFGNode* callNode);
355
+ bool shouldApplyNarrowing(const FunObjVar* fun);
325
356
 
326
357
  // there data should be shared with subclasses
327
358
  Map<std::string, std::function<void(const CallICFGNode*)>> func_map;
Binary file
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-lib",
3
- "version": "1.0.2472",
3
+ "version": "1.0.2473",
4
4
  "description": "SVF's npm support",
5
5
  "main": "index.js",
6
6
  "scripts": {