svf-lib 1.0.2201 → 1.0.2203

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.
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -553,10 +553,10 @@ private:
553
553
  return addValNode(node);
554
554
  }
555
555
 
556
- NodeID addArgValNode(NodeID i, u32_t argNo, const ICFGNode* icfgNode, const CallGraphNode* callGraphNode, const SVFType* type, bool isUncalled = false)
556
+ NodeID addArgValNode(NodeID i, u32_t argNo, const ICFGNode* icfgNode, const CallGraphNode* callGraphNode, const SVFType* type)
557
557
  {
558
558
  ArgValVar* node =
559
- new ArgValVar(i, argNo, icfgNode, callGraphNode, type, isUncalled);
559
+ new ArgValVar(i, argNo, icfgNode, callGraphNode, type);
560
560
  return addValNode(node);
561
561
  }
562
562
 
@@ -292,6 +292,8 @@ public:
292
292
  //@}
293
293
  };
294
294
 
295
+ class ArgValVar;
296
+
295
297
  class SVFFunction : public SVFValue
296
298
  {
297
299
  friend class LLVMModuleSet;
@@ -316,7 +318,7 @@ private:
316
318
  const SVFFunctionType* funcType; /// FunctionType, which is different from the type (PointerType) of this SVFFunction
317
319
  SVFLoopAndDomInfo* loopAndDom; /// the loop and dominate information
318
320
  const SVFFunction* realDefFun; /// the definition of a function across multiple modules
319
- std::vector<const SVFArgument*> allArgs; /// all formal arguments of this function
321
+ std::vector<const ArgValVar*> allArgs; /// all formal arguments of this function
320
322
  SVFBasicBlock *exitBlock; /// a 'single' basic block having no successors and containing return instruction in a function
321
323
  const CallGraphNode *callGraphNode; /// call graph node for this function
322
324
  BasicBlockGraph* bbGraph; /// the basic block graph of this function
@@ -327,7 +329,7 @@ protected:
327
329
  callGraphNode = cgn;
328
330
  }
329
331
 
330
- inline void addArgument(SVFArgument* arg)
332
+ inline void addArgument(const ArgValVar* arg)
331
333
  {
332
334
  allArgs.push_back(arg);
333
335
  }
@@ -417,7 +419,7 @@ public:
417
419
  }
418
420
 
419
421
  u32_t arg_size() const;
420
- const SVFArgument* getArg(u32_t idx) const;
422
+ const ArgValVar* getArg(u32_t idx) const;
421
423
  bool isVarArg() const;
422
424
 
423
425
  inline bool hasBasicBlock() const
@@ -368,7 +368,6 @@ class ArgValVar: public ValVar
368
368
  private:
369
369
  const CallGraphNode* cgNode;
370
370
  u32_t argNo;
371
- bool uncalled;
372
371
 
373
372
  protected:
374
373
  /// Constructor to create function argument (for SVFIRReader/deserialization)
@@ -401,7 +400,7 @@ public:
401
400
 
402
401
  /// Constructor
403
402
  ArgValVar(NodeID i, u32_t argNo, const ICFGNode* icn, const CallGraphNode* callGraphNode,
404
- const SVFType* svfType, bool isUncalled = false);
403
+ const SVFType* svfType);
405
404
 
406
405
  /// Return name of a LLVM value
407
406
  inline const std::string getValueName() const
@@ -422,7 +421,7 @@ public:
422
421
 
423
422
  inline bool isArgOfUncalledFunction() const
424
423
  {
425
- return uncalled;
424
+ return getFunction()->isUncalledFunction();
426
425
  }
427
426
 
428
427
  virtual bool isPointer() const;
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -123,14 +123,30 @@ public:
123
123
 
124
124
 
125
125
  // Return a handle to the stack of nodes in topological
126
- // order. This will be used to seed the initial solution
126
+ // order. This will be used to seed the initial solution
127
127
  // and improve efficiency.
128
128
  inline GNodeStack &topoNodeStack()
129
129
  {
130
130
  return _T;
131
131
  }
132
132
 
133
- const inline GNODESCCInfoMap &GNodeSCCInfo() const
133
+ /// Return a handle to the stack of nodes in reverse topological
134
+ /// order. This will be used to seed the initial solution
135
+ /// and improve efficiency.
136
+ inline GNodeStack revTopoNodeStack()
137
+ {
138
+ GNodeStack revTopoOrder;
139
+ GNodeStack topoOrder = topoNodeStack();
140
+ while(!topoOrder.empty())
141
+ {
142
+ NodeID nodeID = topoOrder.top();
143
+ topoOrder.pop();
144
+ revTopoOrder.push(nodeID);
145
+ }
146
+ return revTopoOrder;
147
+ }
148
+
149
+ const inline GNODESCCInfoMap &GNodeSCCInfo() const
134
150
  {
135
151
  return _NodeSCCAuxInfo;
136
152
  }
@@ -69,31 +69,23 @@ protected:
69
69
  /// SCC detection
70
70
  this->getSCCDetector()->find();
71
71
 
72
+ assert(nodeStack.empty() && "node stack is not empty, some nodes are not popped properly.");
73
+
72
74
  /// Both rep and sub nodes need to be processed later.
73
75
  /// Collect sub nodes from SCCDetector.
74
- NodeStack revTopoStack;
75
- NodeStack& topoStack = this->getSCCDetector()->topoNodeStack();
76
- while (!topoStack.empty())
76
+ NodeStack revTopoStack = this->getSCCDetector()->revTopoNodeStack();
77
+ while (!revTopoStack.empty())
77
78
  {
78
- NodeID nodeId = topoStack.top();
79
- topoStack.pop();
79
+ NodeID nodeId = revTopoStack.top();
80
+ revTopoStack.pop();
80
81
  const NodeBS& subNodes = this->getSCCDetector()->subNodes(nodeId);
81
82
  for (NodeBS::iterator it = subNodes.begin(), eit = subNodes.end(); it != eit; ++it)
82
83
  {
83
- revTopoStack.push(*it);
84
+ /// restore the topological order.
85
+ nodeStack.push(*it);
84
86
  }
85
87
  }
86
88
 
87
- assert(nodeStack.empty() && "node stack is not empty, some nodes are not popped properly.");
88
-
89
- /// restore the topological order.
90
- while (!revTopoStack.empty())
91
- {
92
- NodeID nodeId = revTopoStack.top();
93
- revTopoStack.pop();
94
- nodeStack.push(nodeId);
95
- }
96
-
97
89
  return nodeStack;
98
90
  }
99
91
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-lib",
3
- "version": "1.0.2201",
3
+ "version": "1.0.2203",
4
4
  "description": "SVF's npm support",
5
5
  "main": "index.js",
6
6
  "scripts": {