1
Fork 0

Move the HIR cfg to rustc_ast_borrowck

No new code should be using it.
This commit is contained in:
Matthew Jasper 2019-09-06 18:02:12 +01:00
parent 1fb3c4ec7c
commit 10f46b69bc
10 changed files with 32 additions and 43 deletions

View file

@ -97,7 +97,6 @@ pub mod query;
#[macro_use] #[macro_use]
pub mod arena; pub mod arena;
pub mod cfg;
pub mod dep_graph; pub mod dep_graph;
pub mod hir; pub mod hir;
pub mod ich; pub mod ich;

View file

@ -9,7 +9,6 @@ use InteriorKind::*;
use rustc::hir::HirId; use rustc::hir::HirId;
use rustc::hir::Node; use rustc::hir::Node;
use rustc::cfg;
use rustc::middle::borrowck::{BorrowCheckResult, SignalledError}; use rustc::middle::borrowck::{BorrowCheckResult, SignalledError};
use rustc::hir::def_id::{DefId, LocalDefId}; use rustc::hir::def_id::{DefId, LocalDefId};
use rustc::middle::mem_categorization as mc; use rustc::middle::mem_categorization as mc;
@ -28,6 +27,7 @@ use log::debug;
use rustc::hir; use rustc::hir;
use crate::cfg;
use crate::dataflow::{DataFlowContext, BitwiseOperator, DataFlowOperator, KillFrom}; use crate::dataflow::{DataFlowContext, BitwiseOperator, DataFlowOperator, KillFrom};
pub mod check_loans; pub mod check_loans;

View file

@ -4,7 +4,7 @@
use crate::dataflow::{DataFlowContext, BitwiseOperator, DataFlowOperator, KillFrom}; use crate::dataflow::{DataFlowContext, BitwiseOperator, DataFlowOperator, KillFrom};
use crate::borrowck::*; use crate::borrowck::*;
use rustc::cfg; use crate::cfg;
use rustc::ty::{self, TyCtxt}; use rustc::ty::{self, TyCtxt};
use rustc::util::nodemap::FxHashMap; use rustc::util::nodemap::FxHashMap;

View file

@ -1,11 +1,11 @@
use crate::cfg::*; use crate::cfg::*;
use crate::middle::region;
use rustc_data_structures::graph::implementation as graph; use rustc_data_structures::graph::implementation as graph;
use crate::ty::{self, TyCtxt}; use rustc::middle::region;
use rustc::ty::{self, TyCtxt};
use crate::hir::{self, PatKind}; use rustc::hir::{self, PatKind};
use crate::hir::def_id::DefId; use rustc::hir::def_id::DefId;
use crate::hir::ptr::P; use rustc::hir::ptr::P;
struct CFGBuilder<'a, 'tcx> { struct CFGBuilder<'a, 'tcx> {
tcx: TyCtxt<'tcx>, tcx: TyCtxt<'tcx>,
@ -30,7 +30,7 @@ struct LoopScope {
break_index: CFGIndex, // where to go on a `break` break_index: CFGIndex, // where to go on a `break`
} }
pub fn construct(tcx: TyCtxt<'_>, body: &hir::Body) -> CFG { pub(super) fn construct(tcx: TyCtxt<'_>, body: &hir::Body) -> CFG {
let mut graph = graph::Graph::new(); let mut graph = graph::Graph::new();
let entry = graph.add_node(CFGNodeData::Entry); let entry = graph.add_node(CFGNodeData::Entry);

View file

@ -1,15 +1,12 @@
/// This module provides linkage between rustc::middle::graph and /// This module provides linkage between rustc::middle::graph and
/// libgraphviz traits. /// libgraphviz traits.
// For clarity, rename the graphviz crate locally to dot.
use graphviz as dot;
use crate::cfg; use crate::cfg;
use crate::hir; use rustc::hir;
use crate::ty::TyCtxt; use rustc::ty::TyCtxt;
pub type Node<'a> = (cfg::CFGIndex, &'a cfg::CFGNode); pub(crate) type Node<'a> = (cfg::CFGIndex, &'a cfg::CFGNode);
pub type Edge<'a> = &'a cfg::CFGEdge; pub(crate) type Edge<'a> = &'a cfg::CFGEdge;
pub struct LabelledCFG<'a, 'tcx> { pub struct LabelledCFG<'a, 'tcx> {
pub tcx: TyCtxt<'tcx>, pub tcx: TyCtxt<'tcx>,

View file

@ -2,18 +2,18 @@
//! Uses `Graph` as the underlying representation. //! Uses `Graph` as the underlying representation.
use rustc_data_structures::graph::implementation as graph; use rustc_data_structures::graph::implementation as graph;
use crate::ty::TyCtxt; use rustc::ty::TyCtxt;
use crate::hir; use rustc::hir;
use crate::hir::def_id::DefId; use rustc::hir::def_id::DefId;
mod construct; mod construct;
pub mod graphviz; pub mod graphviz;
pub struct CFG { pub struct CFG {
pub owner_def_id: DefId, owner_def_id: DefId,
pub graph: CFGGraph, pub(crate) graph: CFGGraph,
pub entry: CFGIndex, pub(crate) entry: CFGIndex,
pub exit: CFGIndex, exit: CFGIndex,
} }
#[derive(Copy, Clone, Debug, PartialEq)] #[derive(Copy, Clone, Debug, PartialEq)]
@ -26,7 +26,7 @@ pub enum CFGNodeData {
} }
impl CFGNodeData { impl CFGNodeData {
pub fn id(&self) -> hir::ItemLocalId { pub(crate) fn id(&self) -> hir::ItemLocalId {
if let CFGNodeData::AST(id) = *self { if let CFGNodeData::AST(id) = *self {
id id
} else { } else {
@ -37,24 +37,19 @@ impl CFGNodeData {
#[derive(Debug)] #[derive(Debug)]
pub struct CFGEdgeData { pub struct CFGEdgeData {
pub exiting_scopes: Vec<hir::ItemLocalId> pub(crate) exiting_scopes: Vec<hir::ItemLocalId>
} }
pub type CFGIndex = graph::NodeIndex; pub(crate) type CFGIndex = graph::NodeIndex;
pub type CFGGraph = graph::Graph<CFGNodeData, CFGEdgeData>; pub(crate) type CFGGraph = graph::Graph<CFGNodeData, CFGEdgeData>;
pub type CFGNode = graph::Node<CFGNodeData>; pub(crate) type CFGNode = graph::Node<CFGNodeData>;
pub type CFGEdge = graph::Edge<CFGEdgeData>; pub(crate) type CFGEdge = graph::Edge<CFGEdgeData>;
impl CFG { impl CFG {
pub fn new(tcx: TyCtxt<'_>, body: &hir::Body) -> CFG { pub fn new(tcx: TyCtxt<'_>, body: &hir::Body) -> CFG {
construct::construct(tcx, body) construct::construct(tcx, body)
} }
pub fn node_is_reachable(&self, id: hir::ItemLocalId) -> bool {
self.graph.depth_traverse(self.entry, graph::OUTGOING)
.any(|idx| self.graph.node_data(idx).id() == id)
}
} }

View file

@ -3,9 +3,7 @@
//! and thus uses bitvectors. Your job is simply to specify the so-called //! and thus uses bitvectors. Your job is simply to specify the so-called
//! GEN and KILL bits for each expression. //! GEN and KILL bits for each expression.
use rustc::cfg; use crate::cfg::{self, CFGIndex};
use rustc::cfg::CFGIndex;
use rustc::ty::TyCtxt;
use std::mem; use std::mem;
use std::usize; use std::usize;
use log::debug; use log::debug;
@ -16,6 +14,7 @@ use rustc::util::nodemap::FxHashMap;
use rustc::hir; use rustc::hir;
use rustc::hir::intravisit; use rustc::hir::intravisit;
use rustc::hir::print as pprust; use rustc::hir::print as pprust;
use rustc::ty::TyCtxt;
#[derive(Copy, Clone, Debug)] #[derive(Copy, Clone, Debug)]
pub enum EntryOrExit { pub enum EntryOrExit {

View file

@ -4,13 +4,12 @@
pub use Variant::*; pub use Variant::*;
pub use rustc::cfg::graphviz::{Node, Edge}; pub(crate) use crate::cfg::graphviz::{Node, Edge};
use rustc::cfg::graphviz as cfg_dot; use crate::cfg::graphviz as cfg_dot;
use crate::cfg::CFGIndex;
use crate::borrowck::{self, BorrowckCtxt, LoanPath}; use crate::borrowck::{self, BorrowckCtxt, LoanPath};
use crate::dataflow::{DataFlowOperator, DataFlowContext, EntryOrExit}; use crate::dataflow::{DataFlowOperator, DataFlowContext, EntryOrExit};
use log::debug; use log::debug;
use rustc::cfg::CFGIndex;
use std::rc::Rc; use std::rc::Rc;
#[derive(Debug, Copy, Clone)] #[derive(Debug, Copy, Clone)]

View file

@ -18,5 +18,6 @@ mod borrowck;
pub mod graphviz; pub mod graphviz;
mod dataflow; mod dataflow;
pub mod cfg;
pub use borrowck::provide; pub use borrowck::provide;

View file

@ -1,7 +1,5 @@
//! The various pretty-printing routines. //! The various pretty-printing routines.
use rustc::cfg;
use rustc::cfg::graphviz::LabelledCFG;
use rustc::hir; use rustc::hir;
use rustc::hir::map as hir_map; use rustc::hir::map as hir_map;
use rustc::hir::map::blocks; use rustc::hir::map::blocks;
@ -14,6 +12,7 @@ use rustc::util::common::ErrorReported;
use rustc_interface::util::ReplaceBodyWithLoop; use rustc_interface::util::ReplaceBodyWithLoop;
use rustc_ast_borrowck as borrowck; use rustc_ast_borrowck as borrowck;
use rustc_ast_borrowck::graphviz as borrowck_dot; use rustc_ast_borrowck::graphviz as borrowck_dot;
use rustc_ast_borrowck::cfg::{self, graphviz::LabelledCFG};
use rustc_mir::util::{write_mir_pretty, write_mir_graphviz}; use rustc_mir::util::{write_mir_pretty, write_mir_graphviz};
use syntax::ast; use syntax::ast;