Skip to content

Commit

Permalink
Move the HIR cfg to rustc_ast_borrowck
Browse files Browse the repository at this point in the history
No new code should be using it.
  • Loading branch information
matthewjasper committed Sep 6, 2019
1 parent 1fb3c4e commit 10f46b6
Show file tree
Hide file tree
Showing 10 changed files with 32 additions and 43 deletions.
1 change: 0 additions & 1 deletion src/librustc/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@ pub mod query;

#[macro_use]
pub mod arena;
pub mod cfg;
pub mod dep_graph;
pub mod hir;
pub mod ich;
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_ast_borrowck/borrowck/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ use InteriorKind::*;

use rustc::hir::HirId;
use rustc::hir::Node;
use rustc::cfg;
use rustc::middle::borrowck::{BorrowCheckResult, SignalledError};
use rustc::hir::def_id::{DefId, LocalDefId};
use rustc::middle::mem_categorization as mc;
Expand All @@ -28,6 +27,7 @@ use log::debug;

use rustc::hir;

use crate::cfg;
use crate::dataflow::{DataFlowContext, BitwiseOperator, DataFlowOperator, KillFrom};

pub mod check_loans;
Expand Down
2 changes: 1 addition & 1 deletion src/librustc_ast_borrowck/borrowck/move_data.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
use crate::dataflow::{DataFlowContext, BitwiseOperator, DataFlowOperator, KillFrom};

use crate::borrowck::*;
use rustc::cfg;
use crate::cfg;
use rustc::ty::{self, TyCtxt};
use rustc::util::nodemap::FxHashMap;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use crate::cfg::*;
use crate::middle::region;
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 crate::hir::def_id::DefId;
use crate::hir::ptr::P;
use rustc::hir::{self, PatKind};
use rustc::hir::def_id::DefId;
use rustc::hir::ptr::P;

struct CFGBuilder<'a, 'tcx> {
tcx: TyCtxt<'tcx>,
Expand All @@ -30,7 +30,7 @@ struct LoopScope {
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 entry = graph.add_node(CFGNodeData::Entry);

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,12 @@
/// This module provides linkage between rustc::middle::graph and
/// libgraphviz traits.

// For clarity, rename the graphviz crate locally to dot.
use graphviz as dot;

use crate::cfg;
use crate::hir;
use crate::ty::TyCtxt;
use rustc::hir;
use rustc::ty::TyCtxt;

pub type Node<'a> = (cfg::CFGIndex, &'a cfg::CFGNode);
pub type Edge<'a> = &'a cfg::CFGEdge;
pub(crate) type Node<'a> = (cfg::CFGIndex, &'a cfg::CFGNode);
pub(crate) type Edge<'a> = &'a cfg::CFGEdge;

pub struct LabelledCFG<'a, 'tcx> {
pub tcx: TyCtxt<'tcx>,
Expand Down
31 changes: 13 additions & 18 deletions src/librustc/cfg/mod.rs → src/librustc_ast_borrowck/cfg/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,18 @@
//! Uses `Graph` as the underlying representation.

use rustc_data_structures::graph::implementation as graph;
use crate::ty::TyCtxt;
use crate::hir;
use crate::hir::def_id::DefId;
use rustc::ty::TyCtxt;
use rustc::hir;
use rustc::hir::def_id::DefId;

mod construct;
pub mod graphviz;

pub struct CFG {
pub owner_def_id: DefId,
pub graph: CFGGraph,
pub entry: CFGIndex,
pub exit: CFGIndex,
owner_def_id: DefId,
pub(crate) graph: CFGGraph,
pub(crate) entry: CFGIndex,
exit: CFGIndex,
}

#[derive(Copy, Clone, Debug, PartialEq)]
Expand All @@ -26,7 +26,7 @@ pub enum CFGNodeData {
}

impl CFGNodeData {
pub fn id(&self) -> hir::ItemLocalId {
pub(crate) fn id(&self) -> hir::ItemLocalId {
if let CFGNodeData::AST(id) = *self {
id
} else {
Expand All @@ -37,24 +37,19 @@ impl CFGNodeData {

#[derive(Debug)]
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 {
pub fn new(tcx: TyCtxt<'_>, body: &hir::Body) -> CFG {
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)
}
}
5 changes: 2 additions & 3 deletions src/librustc_ast_borrowck/dataflow.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,7 @@
//! and thus uses bitvectors. Your job is simply to specify the so-called
//! GEN and KILL bits for each expression.

use rustc::cfg;
use rustc::cfg::CFGIndex;
use rustc::ty::TyCtxt;
use crate::cfg::{self, CFGIndex};
use std::mem;
use std::usize;
use log::debug;
Expand All @@ -16,6 +14,7 @@ use rustc::util::nodemap::FxHashMap;
use rustc::hir;
use rustc::hir::intravisit;
use rustc::hir::print as pprust;
use rustc::ty::TyCtxt;

#[derive(Copy, Clone, Debug)]
pub enum EntryOrExit {
Expand Down
7 changes: 3 additions & 4 deletions src/librustc_ast_borrowck/graphviz.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,12 @@

pub use Variant::*;

pub use rustc::cfg::graphviz::{Node, Edge};
use rustc::cfg::graphviz as cfg_dot;

pub(crate) use crate::cfg::graphviz::{Node, Edge};
use crate::cfg::graphviz as cfg_dot;
use crate::cfg::CFGIndex;
use crate::borrowck::{self, BorrowckCtxt, LoanPath};
use crate::dataflow::{DataFlowOperator, DataFlowContext, EntryOrExit};
use log::debug;
use rustc::cfg::CFGIndex;
use std::rc::Rc;

#[derive(Debug, Copy, Clone)]
Expand Down
1 change: 1 addition & 0 deletions src/librustc_ast_borrowck/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,6 @@ mod borrowck;
pub mod graphviz;

mod dataflow;
pub mod cfg;

pub use borrowck::provide;
3 changes: 1 addition & 2 deletions src/librustc_driver/pretty.rs
Original file line number Diff line number Diff line change
@@ -1,7 +1,5 @@
//! The various pretty-printing routines.

use rustc::cfg;
use rustc::cfg::graphviz::LabelledCFG;
use rustc::hir;
use rustc::hir::map as hir_map;
use rustc::hir::map::blocks;
Expand All @@ -14,6 +12,7 @@ use rustc::util::common::ErrorReported;
use rustc_interface::util::ReplaceBodyWithLoop;
use rustc_ast_borrowck as borrowck;
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 syntax::ast;
Expand Down

0 comments on commit 10f46b6

Please sign in to comment.