22//! Uses `Graph` as the underlying representation.
33
44use rustc_data_structures:: graph:: implementation as graph;
5- use crate :: ty:: TyCtxt ;
6- use crate :: hir;
7- use crate :: hir:: def_id:: DefId ;
5+ use rustc :: ty:: TyCtxt ;
6+ use rustc :: hir;
7+ use rustc :: hir:: def_id:: DefId ;
88
99mod construct;
1010pub mod graphviz;
1111
1212pub struct CFG {
13- pub owner_def_id : DefId ,
14- pub graph : CFGGraph ,
15- pub entry : CFGIndex ,
16- pub exit : CFGIndex ,
13+ owner_def_id : DefId ,
14+ pub ( crate ) graph : CFGGraph ,
15+ pub ( crate ) entry : CFGIndex ,
16+ exit : CFGIndex ,
1717}
1818
1919#[ derive( Copy , Clone , Debug , PartialEq ) ]
@@ -26,7 +26,7 @@ pub enum CFGNodeData {
2626}
2727
2828impl CFGNodeData {
29- pub fn id ( & self ) -> hir:: ItemLocalId {
29+ pub ( crate ) fn id ( & self ) -> hir:: ItemLocalId {
3030 if let CFGNodeData :: AST ( id) = * self {
3131 id
3232 } else {
@@ -37,24 +37,19 @@ impl CFGNodeData {
3737
3838#[ derive( Debug ) ]
3939pub struct CFGEdgeData {
40- pub exiting_scopes : Vec < hir:: ItemLocalId >
40+ pub ( crate ) exiting_scopes : Vec < hir:: ItemLocalId >
4141}
4242
43- pub type CFGIndex = graph:: NodeIndex ;
43+ pub ( crate ) type CFGIndex = graph:: NodeIndex ;
4444
45- pub type CFGGraph = graph:: Graph < CFGNodeData , CFGEdgeData > ;
45+ pub ( crate ) type CFGGraph = graph:: Graph < CFGNodeData , CFGEdgeData > ;
4646
47- pub type CFGNode = graph:: Node < CFGNodeData > ;
47+ pub ( crate ) type CFGNode = graph:: Node < CFGNodeData > ;
4848
49- pub type CFGEdge = graph:: Edge < CFGEdgeData > ;
49+ pub ( crate ) type CFGEdge = graph:: Edge < CFGEdgeData > ;
5050
5151impl CFG {
5252 pub fn new ( tcx : TyCtxt < ' _ > , body : & hir:: Body ) -> CFG {
5353 construct:: construct ( tcx, body)
5454 }
55-
56- pub fn node_is_reachable ( & self , id : hir:: ItemLocalId ) -> bool {
57- self . graph . depth_traverse ( self . entry , graph:: OUTGOING )
58- . any ( |idx| self . graph . node_data ( idx) . id ( ) == id)
59- }
6055}
0 commit comments