803 {
805 if (SVFUtil::isa<ValVar>(node))
806 {
807 if(SVFUtil::isa<GepValVar>(node))
808 return "shape=hexagon";
809 else if (SVFUtil::isa<DummyValVar>(node))
810 return "shape=diamond";
811 else
812 return "shape=box";
813 }
814 else if (SVFUtil::isa<ObjVar>(node))
815 {
816 if(SVFUtil::isa<GepObjVar>(node))
817 return "shape=doubleoctagon";
818 else if(SVFUtil::isa<BaseObjVar>(node))
819 return "shape=box3d";
820 else if (SVFUtil::isa<DummyObjVar>(node))
821 return "shape=tab";
822 else
823 return "shape=component";
824 }
825 else if (SVFUtil::isa<RetValPN>(node))
826 {
827 return "shape=Mrecord";
828 }
829 else if (SVFUtil::isa<VarArgValPN>(node))
830 {
831 return "shape=octagon";
832 }
833 else
834 {
835 assert(0 &&
"no such kind!!");
836 }
837 return "";
838 }
const SVFVar * getSVFVar(NodeID id) const
ObjVar/GepObjVar/BaseObjVar.
static SVFIR * getPAG(bool buildFromFile=false)
Singleton design here to make sure we only have one instance during any analysis.