diff options
| author | Eduard Burtescu <edy.burt@gmail.com> | 2016-05-02 18:07:47 +0300 |
|---|---|---|
| committer | Eduard Burtescu <edy.burt@gmail.com> | 2016-05-11 04:14:58 +0300 |
| commit | 31a07b0ce662e95119a76cce8dcfc29d2055f738 (patch) | |
| tree | 377d11b243e3e4347b7019ca883c0847aed7014d /src/librustc/infer | |
| parent | 3a3013613a437e0f10cf3d978c9352c94dc284df (diff) | |
| download | rust-31a07b0ce662e95119a76cce8dcfc29d2055f738.tar.gz rust-31a07b0ce662e95119a76cce8dcfc29d2055f738.zip | |
rustc_typeck: Generalize over 'tcx != 'gcx.
Diffstat (limited to 'src/librustc/infer')
| -rw-r--r-- | src/librustc/infer/mod.rs | 2 | ||||
| -rw-r--r-- | src/librustc/infer/region_inference/graphviz.rs | 28 | ||||
| -rw-r--r-- | src/librustc/infer/region_inference/mod.rs | 30 |
3 files changed, 31 insertions, 29 deletions
diff --git a/src/librustc/infer/mod.rs b/src/librustc/infer/mod.rs index fdb4c3500c6..e6d9db20ece 100644 --- a/src/librustc/infer/mod.rs +++ b/src/librustc/infer/mod.rs @@ -89,7 +89,7 @@ pub struct InferCtxt<'a, 'gcx: 'a+'tcx, 'tcx: 'a> { float_unification_table: RefCell<UnificationTable<ty::FloatVid>>, // For region variables. - region_vars: RegionVarBindings<'a, 'tcx>, + region_vars: RegionVarBindings<'a, 'gcx, 'tcx>, pub parameter_environment: ty::ParameterEnvironment<'gcx>, diff --git a/src/librustc/infer/region_inference/graphviz.rs b/src/librustc/infer/region_inference/graphviz.rs index 5c39e39bee0..c9037d6b12a 100644 --- a/src/librustc/infer/region_inference/graphviz.rs +++ b/src/librustc/infer/region_inference/graphviz.rs @@ -53,8 +53,10 @@ graphs will be printed. \n\ "); } -pub fn maybe_print_constraints_for<'a, 'tcx>(region_vars: &RegionVarBindings<'a, 'tcx>, - subject_node: ast::NodeId) { +pub fn maybe_print_constraints_for<'a, 'gcx, 'tcx>( + region_vars: &RegionVarBindings<'a, 'gcx, 'tcx>, + subject_node: ast::NodeId) +{ let tcx = region_vars.tcx; if !region_vars.tcx.sess.opts.debugging_opts.print_region_graph { @@ -118,8 +120,8 @@ pub fn maybe_print_constraints_for<'a, 'tcx>(region_vars: &RegionVarBindings<'a, } } -struct ConstraintGraph<'a, 'tcx: 'a> { - tcx: TyCtxt<'a, 'tcx, 'tcx>, +struct ConstraintGraph<'a, 'gcx: 'a+'tcx, 'tcx: 'a> { + tcx: TyCtxt<'a, 'gcx, 'tcx>, graph_name: String, map: &'a FnvHashMap<Constraint, SubregionOrigin<'tcx>>, node_ids: FnvHashMap<Node, usize>, @@ -138,11 +140,11 @@ enum Edge { EnclScope(CodeExtent, CodeExtent), } -impl<'a, 'tcx> ConstraintGraph<'a, 'tcx> { - fn new(tcx: TyCtxt<'a, 'tcx, 'tcx>, +impl<'a, 'gcx, 'tcx> ConstraintGraph<'a, 'gcx, 'tcx> { + fn new(tcx: TyCtxt<'a, 'gcx, 'tcx>, name: String, map: &'a ConstraintMap<'tcx>) - -> ConstraintGraph<'a, 'tcx> { + -> ConstraintGraph<'a, 'gcx, 'tcx> { let mut i = 0; let mut node_ids = FnvHashMap(); { @@ -173,7 +175,7 @@ impl<'a, 'tcx> ConstraintGraph<'a, 'tcx> { } } -impl<'a, 'tcx> dot::Labeller<'a> for ConstraintGraph<'a, 'tcx> { +impl<'a, 'gcx, 'tcx> dot::Labeller<'a> for ConstraintGraph<'a, 'gcx, 'tcx> { type Node = Node; type Edge = Edge; fn graph_id(&self) -> dot::Id { @@ -226,7 +228,7 @@ fn edge_to_nodes(e: &Edge) -> (Node, Node) { } } -impl<'a, 'tcx> dot::GraphWalk<'a> for ConstraintGraph<'a, 'tcx> { +impl<'a, 'gcx, 'tcx> dot::GraphWalk<'a> for ConstraintGraph<'a, 'gcx, 'tcx> { type Node = Node; type Edge = Edge; fn nodes(&self) -> dot::Nodes<Node> { @@ -258,10 +260,10 @@ impl<'a, 'tcx> dot::GraphWalk<'a> for ConstraintGraph<'a, 'tcx> { pub type ConstraintMap<'tcx> = FnvHashMap<Constraint, SubregionOrigin<'tcx>>; -fn dump_region_constraints_to<'a, 'tcx: 'a>(tcx: TyCtxt<'a, 'tcx, 'tcx>, - map: &ConstraintMap<'tcx>, - path: &str) - -> io::Result<()> { +fn dump_region_constraints_to<'a, 'gcx, 'tcx>(tcx: TyCtxt<'a, 'gcx, 'tcx>, + map: &ConstraintMap<'tcx>, + path: &str) + -> io::Result<()> { debug!("dump_region_constraints map (len: {}) path: {}", map.len(), path); diff --git a/src/librustc/infer/region_inference/mod.rs b/src/librustc/infer/region_inference/mod.rs index 3e231f8bb3e..b889d0a9daa 100644 --- a/src/librustc/infer/region_inference/mod.rs +++ b/src/librustc/infer/region_inference/mod.rs @@ -190,8 +190,8 @@ impl SameRegions { pub type CombineMap = FnvHashMap<TwoRegions, RegionVid>; -pub struct RegionVarBindings<'a, 'tcx: 'a> { - tcx: TyCtxt<'a, 'tcx, 'tcx>, +pub struct RegionVarBindings<'a, 'gcx: 'a+'tcx, 'tcx: 'a> { + tcx: TyCtxt<'a, 'gcx, 'tcx>, var_origins: RefCell<Vec<RegionVariableOrigin>>, // Constraints of the form `A <= B` introduced by the region @@ -253,8 +253,8 @@ pub struct RegionSnapshot { skolemization_count: u32, } -impl<'a, 'tcx> RegionVarBindings<'a, 'tcx> { - pub fn new(tcx: TyCtxt<'a, 'tcx, 'tcx>) -> RegionVarBindings<'a, 'tcx> { +impl<'a, 'gcx, 'tcx> RegionVarBindings<'a, 'gcx, 'tcx> { + pub fn new(tcx: TyCtxt<'a, 'gcx, 'tcx>) -> RegionVarBindings<'a, 'gcx, 'tcx> { RegionVarBindings { tcx: tcx, var_origins: RefCell::new(Vec::new()), @@ -600,7 +600,7 @@ impl<'a, 'tcx> RegionVarBindings<'a, 'tcx> { origin: SubregionOrigin<'tcx>, mut relate: F) -> Region - where F: FnMut(&RegionVarBindings<'a, 'tcx>, Region, Region) + where F: FnMut(&RegionVarBindings<'a, 'gcx, 'tcx>, Region, Region) { let vars = TwoRegions { a: a, b: b }; match self.combine_map(t).borrow().get(&vars) { @@ -816,7 +816,7 @@ struct RegionAndOrigin<'tcx> { type RegionGraph = graph::Graph<(), Constraint>; -impl<'a, 'tcx> RegionVarBindings<'a, 'tcx> { +impl<'a, 'gcx, 'tcx> RegionVarBindings<'a, 'gcx, 'tcx> { fn infer_variable_values(&self, free_regions: &FreeRegionMap, errors: &mut Vec<RegionResolutionError<'tcx>>, @@ -1249,11 +1249,11 @@ impl<'a, 'tcx> RegionVarBindings<'a, 'tcx> { let WalkState {result, dup_found, ..} = state; return (result, dup_found); - fn process_edges<'a, 'tcx>(this: &RegionVarBindings<'a, 'tcx>, - state: &mut WalkState<'tcx>, - graph: &RegionGraph, - source_vid: RegionVid, - dir: Direction) { + fn process_edges<'a, 'gcx, 'tcx>(this: &RegionVarBindings<'a, 'gcx, 'tcx>, + state: &mut WalkState<'tcx>, + graph: &RegionGraph, + source_vid: RegionVid, + dir: Direction) { debug!("process_edges(source_vid={:?}, dir={:?})", source_vid, dir); let source_node_index = NodeIndex(source_vid.index as usize); @@ -1362,8 +1362,8 @@ impl<'tcx> fmt::Display for GenericKind<'tcx> { } } -impl<'a, 'tcx> GenericKind<'tcx> { - pub fn to_ty(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>) -> Ty<'tcx> { +impl<'a, 'gcx, 'tcx> GenericKind<'tcx> { + pub fn to_ty(&self, tcx: TyCtxt<'a, 'gcx, 'tcx>) -> Ty<'tcx> { match *self { GenericKind::Param(ref p) => p.to_ty(tcx), GenericKind::Projection(ref p) => tcx.mk_projection(p.trait_ref.clone(), p.item_name), @@ -1371,7 +1371,7 @@ impl<'a, 'tcx> GenericKind<'tcx> { } } -impl<'a, 'tcx> VerifyBound { +impl<'a, 'gcx, 'tcx> VerifyBound { fn for_each_region(&self, f: &mut FnMut(ty::Region)) { match self { &VerifyBound::AnyRegion(ref rs) | @@ -1424,7 +1424,7 @@ impl<'a, 'tcx> VerifyBound { } } - fn is_met(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>, + fn is_met(&self, tcx: TyCtxt<'a, 'gcx, 'tcx>, free_regions: &FreeRegionMap, var_values: &Vec<VarValue>, min: ty::Region) |
