remainder_scope,
init_scope,
pattern,
- ty,
initializer,
lint_level
} => {
opt_destruction_scope.map(|de|(de, source_info)), block, |this| {
let scope = (init_scope, source_info);
this.in_scope(scope, lint_level, block, |this| {
- this.expr_into_pattern(block, ty, pattern, init)
+ this.expr_into_pattern(block, pattern, init)
})
}));
} else {
None, remainder_span, lint_level, slice::from_ref(&pattern),
ArmHasGuard(false), None);
- // FIXME(#47184): We currently only insert `UserAssertTy` statements for
- // patterns that are bindings, this is as we do not want to deconstruct
- // the type being assertion to match the pattern.
- if let PatternKind::Binding { var, .. } = *pattern.kind {
- if let Some(ty) = ty {
- this.user_assert_ty(block, ty, var, span);
- }
- }
-
this.visit_bindings(&pattern, &mut |this, _, _, _, node, span, _| {
this.storage_live_binding(block, node, span, OutsideGuard);
this.schedule_drop_for_binding(node, span, OutsideGuard);
end_block.unit()
}
- pub fn user_assert_ty(&mut self, block: BasicBlock, hir_id: hir::HirId,
- var: NodeId, span: Span) {
- if self.hir.tcx().sess.opts.debugging_opts.disable_nll_user_type_assert { return; }
-
- let local_id = self.var_local_id(var, OutsideGuard);
- let source_info = self.source_info(span);
-
- debug!("user_assert_ty: local_id={:?}", hir_id.local_id);
- if let Some(c_ty) = self.hir.tables.user_provided_tys().get(hir_id) {
- debug!("user_assert_ty: c_ty={:?}", c_ty);
- self.cfg.push(block, Statement {
- source_info,
- kind: StatementKind::UserAssertTy(*c_ty, local_id),
- });
- }
- }
-
pub fn expr_into_pattern(&mut self,
mut block: BasicBlock,
- ty: Option<hir::HirId>,
irrefutable_pat: Pattern<'tcx>,
initializer: ExprRef<'tcx>)
-> BlockAnd<()> {
subpattern: None, .. } => {
let place = self.storage_live_binding(block, var, irrefutable_pat.span,
OutsideGuard);
-
- if let Some(ty) = ty {
- self.user_assert_ty(block, ty, var, irrefutable_pat.span);
- }
-
unpack!(block = self.into(&place, block, initializer));
self.schedule_drop_for_binding(var, irrefutable_pat.span, OutsideGuard);
block.unit()
/// lifetime of temporaries
init_scope: region::Scope,
- /// let <PAT>: ty = ...
+ /// `let <PAT> = ...`
pattern: Pattern<'tcx>,
- /// let pat: <TY> = init ...
- ty: Option<hir::HirId>,
-
/// let pat: ty = <INIT> ...
initializer: Option<ExprRef<'tcx>>,