948 {
951
953 {
955 if (SVFUtil::isa<AddrStmt>(
edge))
956 {
958 }
959 else if (SVFUtil::isa<CopyStmt>(
edge))
960 {
962 }
963 else if (SVFUtil::isa<RetPE>(
edge))
964 {
965 rawstr <<
"color=black,style=dotted";
966 }
967 else if (SVFUtil::isa<GepStmt>(
edge))
968 {
970 }
971 else if (SVFUtil::isa<StoreStmt>(
edge))
972 {
974 }
975 else if (SVFUtil::isa<LoadStmt>(
edge))
976 {
978 }
979 else
980 {
981 assert(0 &&
"No such kind edge!!");
982 }
984 }
985 else if(SVFUtil::isa<MSSAPHISVFGNode>(node))
986 {
988 }
989 else if(SVFUtil::isa<PHISVFGNode>(node))
990 {
992 }
993 else if(SVFUtil::isa<NullPtrSVFGNode>(node))
994 {
996 }
997 else if(SVFUtil::isa<FormalINSVFGNode>(node))
998 {
999 rawstr <<
"color=yellow,penwidth=2";
1000 }
1001 else if(SVFUtil::isa<FormalOUTSVFGNode>(node))
1002 {
1003 rawstr <<
"color=yellow,penwidth=2";
1004 }
1005 else if(SVFUtil::isa<FormalParmSVFGNode>(node))
1006 {
1007 rawstr <<
"color=yellow,penwidth=2";
1008 }
1009 else if(SVFUtil::isa<ActualINSVFGNode>(node))
1010 {
1011 rawstr <<
"color=yellow,penwidth=2";
1012 }
1013 else if(SVFUtil::isa<ActualOUTSVFGNode>(node))
1014 {
1015 rawstr <<
"color=yellow,penwidth=2";
1016 }
1017 else if(SVFUtil::isa<ActualParmSVFGNode>(node))
1018 {
1019 rawstr <<
"color=yellow,penwidth=2";
1020 }
1021 else if (SVFUtil::isa<ActualRetSVFGNode>(node))
1022 {
1023 rawstr <<
"color=yellow,penwidth=2";
1024 }
1025 else if (SVFUtil::isa<FormalRetSVFGNode>(node))
1026 {
1027 rawstr <<
"color=yellow,penwidth=2";
1028 }
1029 else if (SVFUtil::isa<BinaryOPVFGNode>(node))
1030 {
1031 rawstr <<
"color=black,penwidth=2";
1032 }
1033 else if (SVFUtil::isa<CmpVFGNode>(node))
1034 {
1035 rawstr <<
"color=black,penwidth=2";
1036 }
1037 else if (SVFUtil::isa<UnaryOPVFGNode>(node))
1038 {
1039 rawstr <<
"color=black,penwidth=2";
1040 }
1041 else if (SVFUtil::isa<BranchVFGNode>(node))
1042 {
1043 rawstr <<
"color=gold,penwidth=2";
1044 }
1045 else
1046 assert(
false &&
"no such kind of node!!");
1047
1050 {
1051 rawstr <<
",style=filled, fillcolor=red";
1052 }
1054 {
1055 rawstr <<
",style=filled, fillcolor=blue";
1056 }
1058 {
1059 rawstr <<
",style=filled, fillcolor=yellow";
1060 }
1062 rawstr <<
",style=filled, fillcolor=gray";
1063
1065
1067 }
bool inBackwardSlice(const SVFGNode *node) const
bool isSource(const SVFGNode *node) const
bool inForwardSlice(const SVFGNode *node) const
bool isSink(const SVFGNode *node) const
SVFGStat * getStat() const
Return statistics.