1009 {
1012
1013 rawstr <<
"shape=record";
1014
1016 {
1018 if (SVFUtil::isa<AddrStmt>(
edge))
1019 {
1020 rawstr <<
",color=green";
1021 }
1022 else if (SVFUtil::isa<CopyStmt>(
edge))
1023 {
1024 rawstr <<
",color=black";
1025 }
1026 else if (SVFUtil::isa<RetPE>(
edge))
1027 {
1028 rawstr <<
",color=black,style=dotted";
1029 }
1030 else if (SVFUtil::isa<GepStmt>(
edge))
1031 {
1032 rawstr <<
",color=purple";
1033 }
1034 else if (SVFUtil::isa<StoreStmt>(
edge))
1035 {
1037 }
1038 else if (SVFUtil::isa<LoadStmt>(
edge))
1039 {
1041 }
1042 else
1043 {
1044 assert(0 &&
"No such kind edge!!");
1045 }
1046 }
1047 else if(SVFUtil::isa<MSSAPHISVFGNode>(node))
1048 {
1049 rawstr <<
",color=black";
1050 }
1051 else if(SVFUtil::isa<PHISVFGNode>(node))
1052 {
1053 rawstr <<
",color=black";
1054 }
1055 else if(SVFUtil::isa<NullPtrSVFGNode>(node))
1056 {
1058 }
1059 else if(SVFUtil::isa<FormalINSVFGNode>(node))
1060 {
1061 rawstr <<
",color=yellow,penwidth=2";
1062 }
1063 else if(SVFUtil::isa<FormalOUTSVFGNode>(node))
1064 {
1065 rawstr <<
",color=yellow,penwidth=2";
1066 }
1067 else if(SVFUtil::isa<FormalParmSVFGNode>(node))
1068 {
1069 rawstr <<
",color=yellow,penwidth=2";
1070 }
1071 else if(SVFUtil::isa<ActualINSVFGNode>(node))
1072 {
1073 rawstr <<
",color=yellow,penwidth=2";
1074 }
1075 else if(SVFUtil::isa<ActualOUTSVFGNode>(node))
1076 {
1077 rawstr <<
",color=yellow,penwidth=2";
1078 }
1079 else if(SVFUtil::isa<ActualParmSVFGNode>(node))
1080 {
1081 rawstr <<
",color=yellow,penwidth=2";
1082 }
1083 else if (SVFUtil::isa<ActualRetSVFGNode>(node))
1084 {
1085 rawstr <<
",color=yellow,penwidth=2";
1086 }
1087 else if (SVFUtil::isa<FormalRetSVFGNode>(node))
1088 {
1089 rawstr <<
",color=yellow,penwidth=2";
1090 }
1091 else if (SVFUtil::isa<BinaryOPVFGNode>(node))
1092 {
1093 rawstr <<
",color=black,penwidth=2";
1094 }
1095 else if (SVFUtil::isa<CmpVFGNode>(node))
1096 {
1097 rawstr <<
",color=black,penwidth=2";
1098 }
1099 else if (SVFUtil::isa<UnaryOPVFGNode>(node))
1100 {
1101 rawstr <<
",color=black,penwidth=2";
1102 }
1103 else if (SVFUtil::isa<BranchVFGNode>(node))
1104 {
1105 rawstr <<
",color=gold,penwidth=2";
1106 }
1107 else
1108 assert(
false &&
"no such kind of node!!");
1109
1112 {
1113 rawstr <<
",style=filled, fillcolor=red";
1114 }
1116 {
1117 rawstr <<
",style=filled, fillcolor=blue";
1118 }
1120 {
1121 rawstr <<
",style=filled, fillcolor=yellow";
1122 }
1124 rawstr <<
",style=filled, fillcolor=gray";
1125
1127 }
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.