svf-lib 1.0.809 → 1.0.813

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.
@@ -569,7 +569,7 @@ public:
569
569
  u32_t getNumSuccessors() const{
570
570
  return brstmt->getNumSuccessors();
571
571
  }
572
- const std::vector<const ICFGNode*>& getSuccessors() const{
572
+ const BranchStmt::SuccAndCondPairVec& getSuccessors() const{
573
573
  return brstmt->getSuccessors();
574
574
  }
575
575
  const ICFGNode* getSuccessor (u32_t i) const{
@@ -637,7 +637,7 @@ private:
637
637
  /// Add Unary edge
638
638
  UnaryOPStmt* addUnaryOPStmt(NodeID src, NodeID dst, u32_t opcode);
639
639
  /// Add BranchStmt
640
- BranchStmt* addBranchStmt(NodeID br, NodeID cond, std::vector<const ICFGNode*> succs);
640
+ BranchStmt* addBranchStmt(NodeID br, NodeID cond, const BranchStmt::SuccAndCondPairVec& succs);
641
641
  /// Add Load edge
642
642
  LoadStmt* addLoadStmt(NodeID src, NodeID dst);
643
643
  /// Add Store edge
@@ -839,6 +839,8 @@ public:
839
839
  */
840
840
  class BranchStmt: public SVFStmt
841
841
  {
842
+ public:
843
+ typedef std::vector<std::pair<const ICFGNode*, s64_t> > SuccAndCondPairVec;
842
844
  private:
843
845
  BranchStmt(); ///< place holder
844
846
  BranchStmt(const BranchStmt &); ///< place holder
@@ -848,9 +850,10 @@ private:
848
850
  NodeID getSrcID(); ///< place holder, use getOpVarID(pos) instead
849
851
  NodeID getDstID(); ///< place holder, use getResID() instead
850
852
 
851
- std::vector<const ICFGNode*> successors;
853
+ SuccAndCondPairVec successors;
852
854
  const SVFVar* cond;
853
855
  const SVFVar* brInst;
856
+
854
857
  public:
855
858
  /// Methods for support type inquiry through isa, cast, and dyn_cast:
856
859
  //@{
@@ -869,7 +872,7 @@ public:
869
872
  //@}
870
873
 
871
874
  /// constructor
872
- BranchStmt(SVFVar* inst, SVFVar* c, const std::vector<const ICFGNode*>& succs) : SVFStmt(c,inst,SVFStmt::Branch), successors(succs), cond(c), brInst(inst)
875
+ BranchStmt(SVFVar* inst, SVFVar* c, const SuccAndCondPairVec& succs) : SVFStmt(c,inst,SVFStmt::Branch), successors(succs), cond(c), brInst(inst)
873
876
  {
874
877
  }
875
878
 
@@ -882,18 +885,31 @@ public:
882
885
  const SVFVar* getBranchInst() const{
883
886
  return brInst;
884
887
  }
888
+
889
+ /// For example if(c) {stmt1} else {stmt2}
890
+ /// successor(0): stmt1, 1
891
+ /// successor(1): stmt2, 0
892
+
893
+ /// For example switch(c) case 0: {stmt1; break;} case 1: {stmt2; break;} default {stmt3: break}
894
+ /// successor(0): stmt1, 0
895
+ /// successor(1): stmt2, 1
896
+ /// successor(3): stmt3, -1
897
+
885
898
  /// Successors of this branch statement
886
899
  ///@{
887
900
  u32_t getNumSuccessors() const{
888
901
  return successors.size();
889
902
  }
890
- const std::vector<const ICFGNode*>& getSuccessors() const{
903
+ const SuccAndCondPairVec& getSuccessors() const{
891
904
  return successors;
892
905
  }
893
906
  const ICFGNode* getSuccessor (u32_t i) const{
894
- return successors.at(i);
907
+ return successors.at(i).first;
895
908
  }
896
- ///@}
909
+ s64_t getSuccessorCondValue (u32_t i) const{
910
+ return successors.at(i).second;
911
+ }
912
+ //@}
897
913
  virtual const std::string toString() const override;
898
914
  };
899
915
 
@@ -331,7 +331,7 @@ public:
331
331
  return edge;
332
332
  }
333
333
  /// Add Branch statement
334
- inline BranchStmt* addBranchStmt(NodeID br, NodeID cond, const std::vector<const ICFGNode*> succs){
334
+ inline BranchStmt* addBranchStmt(NodeID br, NodeID cond, const BranchStmt::SuccAndCondPairVec& succs){
335
335
  BranchStmt *edge = pag->addBranchStmt(br, cond, succs);
336
336
  setCurrentBBAndValueForPAGEdge(edge);
337
337
  return edge;
Binary file
@@ -569,7 +569,7 @@ public:
569
569
  u32_t getNumSuccessors() const{
570
570
  return brstmt->getNumSuccessors();
571
571
  }
572
- const std::vector<const ICFGNode*>& getSuccessors() const{
572
+ const BranchStmt::SuccAndCondPairVec& getSuccessors() const{
573
573
  return brstmt->getSuccessors();
574
574
  }
575
575
  const ICFGNode* getSuccessor (u32_t i) const{
@@ -637,7 +637,7 @@ private:
637
637
  /// Add Unary edge
638
638
  UnaryOPStmt* addUnaryOPStmt(NodeID src, NodeID dst, u32_t opcode);
639
639
  /// Add BranchStmt
640
- BranchStmt* addBranchStmt(NodeID br, NodeID cond, std::vector<const ICFGNode*> succs);
640
+ BranchStmt* addBranchStmt(NodeID br, NodeID cond, const BranchStmt::SuccAndCondPairVec& succs);
641
641
  /// Add Load edge
642
642
  LoadStmt* addLoadStmt(NodeID src, NodeID dst);
643
643
  /// Add Store edge
@@ -839,6 +839,8 @@ public:
839
839
  */
840
840
  class BranchStmt: public SVFStmt
841
841
  {
842
+ public:
843
+ typedef std::vector<std::pair<const ICFGNode*, s64_t> > SuccAndCondPairVec;
842
844
  private:
843
845
  BranchStmt(); ///< place holder
844
846
  BranchStmt(const BranchStmt &); ///< place holder
@@ -848,9 +850,10 @@ private:
848
850
  NodeID getSrcID(); ///< place holder, use getOpVarID(pos) instead
849
851
  NodeID getDstID(); ///< place holder, use getResID() instead
850
852
 
851
- std::vector<const ICFGNode*> successors;
853
+ SuccAndCondPairVec successors;
852
854
  const SVFVar* cond;
853
855
  const SVFVar* brInst;
856
+
854
857
  public:
855
858
  /// Methods for support type inquiry through isa, cast, and dyn_cast:
856
859
  //@{
@@ -869,7 +872,7 @@ public:
869
872
  //@}
870
873
 
871
874
  /// constructor
872
- BranchStmt(SVFVar* inst, SVFVar* c, const std::vector<const ICFGNode*>& succs) : SVFStmt(c,inst,SVFStmt::Branch), successors(succs), cond(c), brInst(inst)
875
+ BranchStmt(SVFVar* inst, SVFVar* c, const SuccAndCondPairVec& succs) : SVFStmt(c,inst,SVFStmt::Branch), successors(succs), cond(c), brInst(inst)
873
876
  {
874
877
  }
875
878
 
@@ -882,18 +885,31 @@ public:
882
885
  const SVFVar* getBranchInst() const{
883
886
  return brInst;
884
887
  }
888
+
889
+ /// For example if(c) {stmt1} else {stmt2}
890
+ /// successor(0): stmt1, 1
891
+ /// successor(1): stmt2, 0
892
+
893
+ /// For example switch(c) case 0: {stmt1; break;} case 1: {stmt2; break;} default {stmt3: break}
894
+ /// successor(0): stmt1, 0
895
+ /// successor(1): stmt2, 1
896
+ /// successor(3): stmt3, -1
897
+
885
898
  /// Successors of this branch statement
886
899
  ///@{
887
900
  u32_t getNumSuccessors() const{
888
901
  return successors.size();
889
902
  }
890
- const std::vector<const ICFGNode*>& getSuccessors() const{
903
+ const SuccAndCondPairVec& getSuccessors() const{
891
904
  return successors;
892
905
  }
893
906
  const ICFGNode* getSuccessor (u32_t i) const{
894
- return successors.at(i);
907
+ return successors.at(i).first;
895
908
  }
896
- ///@}
909
+ s64_t getSuccessorCondValue (u32_t i) const{
910
+ return successors.at(i).second;
911
+ }
912
+ //@}
897
913
  virtual const std::string toString() const override;
898
914
  };
899
915
 
@@ -331,7 +331,7 @@ public:
331
331
  return edge;
332
332
  }
333
333
  /// Add Branch statement
334
- inline BranchStmt* addBranchStmt(NodeID br, NodeID cond, const std::vector<const ICFGNode*> succs){
334
+ inline BranchStmt* addBranchStmt(NodeID br, NodeID cond, const BranchStmt::SuccAndCondPairVec& succs){
335
335
  BranchStmt *edge = pag->addBranchStmt(br, cond, succs);
336
336
  setCurrentBBAndValueForPAGEdge(edge);
337
337
  return edge;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svf-lib",
3
- "version": "1.0.809",
3
+ "version": "1.0.813",
4
4
  "description": "SVF's npm support",
5
5
  "main": "index.js",
6
6
  "scripts": {