X-Git-Url: https://git.lizzy.rs/?a=blobdiff_plain;f=src%2Flibrustc_typeck%2Fcheck%2Fmod.rs;h=0b0233103ef7bdf1cef214de6bb6de0cca969db4;hb=9eae6ba7fad883300c83d77782ae78b0db6f3bb7;hp=f8020794b98a3ae15955f2985c7422f23ca4b7dc;hpb=a65ced5d161d31e7e5b097b36bff0f51ec0843bc;p=rust.git diff --git a/src/librustc_typeck/check/mod.rs b/src/librustc_typeck/check/mod.rs index f8020794b98..0b0233103ef 100644 --- a/src/librustc_typeck/check/mod.rs +++ b/src/librustc_typeck/check/mod.rs @@ -52,7 +52,7 @@ While type checking a function, the intermediate types for the expressions, blocks, and so forth contained within the function are -stored in `fcx.node_types` and `fcx.item_substs`. These types +stored in `fcx.node_types` and `fcx.node_substs`. These types may contain unresolved type variables. After type checking is complete, the functions in the writeback module are used to take the types from this table, resolve them, and then write them into their @@ -1758,14 +1758,14 @@ pub fn write_ty(&self, node_id: ast::NodeId, ty: Ty<'tcx>) { } } - pub fn write_substs(&self, node_id: ast::NodeId, substs: ty::ItemSubsts<'tcx>) { - if !substs.substs.is_noop() { + pub fn write_substs(&self, node_id: ast::NodeId, substs: &'tcx Substs<'tcx>) { + if !substs.is_noop() { debug!("write_substs({}, {:?}) in fcx {}", node_id, substs, self.tag()); - self.tables.borrow_mut().item_substs.insert(node_id, substs); + self.tables.borrow_mut().node_substs.insert(node_id, substs); } } @@ -1959,16 +1959,6 @@ pub fn node_ty(&self, id: ast::NodeId) -> Ty<'tcx> { } } - pub fn opt_node_ty_substs(&self, - id: ast::NodeId, - f: F) where - F: FnOnce(&ty::ItemSubsts<'tcx>), - { - if let Some(s) = self.tables.borrow().item_substs.get(&id) { - f(s); - } - } - /// Registers an obligation for checking later, during regionck, that the type `ty` must /// outlive the region `r`. pub fn register_region_obligation(&self, @@ -3550,9 +3540,8 @@ fn check_expr_kind(&self, // We always require that the type provided as the value for // a type parameter outlives the moment of instantiation. - self.opt_node_ty_substs(expr.id, |item_substs| { - self.add_wf_bounds(&item_substs.substs, expr); - }); + let substs = self.tables.borrow().node_substs(expr.id); + self.add_wf_bounds(substs, expr); ty } @@ -4375,9 +4364,6 @@ pub fn instantiate_value_path(&self, let ty = self.local_ty(span, nid); let ty = self.normalize_associated_types_in(span, &ty); self.write_ty(node_id, ty); - self.write_substs(node_id, ty::ItemSubsts { - substs: self.tcx.intern_substs(&[]) - }); return ty; } _ => {} @@ -4509,9 +4495,7 @@ pub fn instantiate_value_path(&self, debug!("instantiate_value_path: type of {:?} is {:?}", node_id, ty_substituted); - self.write_substs(node_id, ty::ItemSubsts { - substs: substs - }); + self.write_substs(node_id, substs); ty_substituted }