mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 07:14:28 +00:00
supplement for the missing or incomplete comments
This commit is contained in:
parent
af591ebe4d
commit
34f0c4502f
@ -119,10 +119,13 @@ impl<'a, 'tcx> Builder<'a, 'tcx> {
|
||||
} => {
|
||||
let ignores_expr_result = matches!(pattern.kind, PatKind::Wild);
|
||||
this.block_context.push(BlockFrame::Statement { ignores_expr_result });
|
||||
|
||||
// Lower the `else` block first because its parent scope is actually
|
||||
// enclosing the rest of the `let .. else ..` parts.
|
||||
let else_block_span = this.thir[*else_block].span;
|
||||
// This place is not really used because this destination place
|
||||
// should never be used to take values at the end of the failure
|
||||
// block.
|
||||
let else_block_span = this.thir[*else_block].span;
|
||||
let dummy_place = this.temp(this.tcx.types.never, else_block_span);
|
||||
let failure_entry = this.cfg.start_new_block();
|
||||
let failure_block;
|
||||
|
@ -128,16 +128,24 @@ fn resolve_block<'tcx>(visitor: &mut RegionResolutionVisitor<'tcx>, blk: &'tcx h
|
||||
match statement.kind {
|
||||
hir::StmtKind::Local(hir::Local { els: Some(els), .. }) => {
|
||||
// Let-else has a special lexical structure for variables.
|
||||
// First we take a checkpoint of the current scope context here.
|
||||
let mut prev_cx = visitor.cx;
|
||||
|
||||
visitor.enter_scope(Scope {
|
||||
id: blk.hir_id.local_id,
|
||||
data: ScopeData::Remainder(FirstStatementIndex::new(i)),
|
||||
});
|
||||
visitor.cx.var_parent = visitor.cx.parent;
|
||||
visitor.visit_stmt(statement);
|
||||
// We need to back out temporarily to the last enclosing scope
|
||||
// for the `else` block, so that even the temporaries receiving
|
||||
// extended lifetime will be dropped inside this block.
|
||||
// We are visiting the `else` block in this order so that
|
||||
// the sequence of visits agree with the order in the default
|
||||
// `hir::intravisit` visitor.
|
||||
mem::swap(&mut prev_cx, &mut visitor.cx);
|
||||
// We need to back out temporarily and
|
||||
visitor.visit_block(els);
|
||||
// From now on, we continue normally.
|
||||
visitor.cx = prev_cx;
|
||||
}
|
||||
hir::StmtKind::Local(..) | hir::StmtKind::Item(..) => {
|
||||
|
Loading…
Reference in New Issue
Block a user