Skip to content

Commit 8f5585a

Browse files
committed
remove big match
1 parent 48f5f01 commit 8f5585a

File tree

1 file changed

+48
-63
lines changed

1 file changed

+48
-63
lines changed

compiler/rustc_mir/src/borrow_check/diagnostics/mutability_errors.rs

+48-63
Original file line numberDiff line numberDiff line change
@@ -524,74 +524,59 @@ impl<'a, 'tcx> MirBorrowckCtxt<'a, 'tcx> {
524524
return (false, None);
525525
}
526526
let hir_map = self.infcx.tcx.hir();
527-
let my_hir = hir_map.local_def_id_to_hir_id(
528-
self.body.source.def_id().as_local().unwrap(),
529-
);
530-
match hir_map.find(hir_map.get_parent_node(my_hir)) {
531-
Some(Node::Item(hir::Item {
532-
kind:
533-
hir::ItemKind::Impl(hir::Impl {
534-
of_trait:
535-
Some(hir::TraitRef {
536-
path:
537-
hir::Path {
538-
res:
539-
hir::def::Res::Def(_, td),
527+
let my_def = self.body.source.def_id();
528+
let my_hir = hir_map.local_def_id_to_hir_id(my_def.as_local().unwrap());
529+
let td = if let Some(a) = self.infcx.tcx.impl_of_method(my_def).and_then(|x| {
530+
self.infcx.tcx.trait_id_of_impl(x)
531+
}) {
532+
a
533+
} else {
534+
return (false, None);
535+
};
536+
(true, td.as_local().and_then(|tld| {
537+
let h = hir_map.local_def_id_to_hir_id(tld);
538+
match hir_map.find(h) {
539+
Some(Node::Item(hir::Item {
540+
kind: hir::ItemKind::Trait(
541+
_, _, _, _,
542+
items
543+
),
544+
..
545+
})) => {
546+
let mut f_in_trait_opt = None;
547+
for hir::TraitItemRef { id: fi, kind: k, .. } in *items {
548+
let hi = fi.hir_id();
549+
if !matches!(k, hir::AssocItemKind::Fn { .. }) {
550+
continue;
551+
}
552+
if hir_map.name(hi) != hir_map.name(my_hir) {
553+
continue;
554+
}
555+
f_in_trait_opt = Some(hi);
556+
break;
557+
}
558+
f_in_trait_opt.and_then(|f_in_trait| {
559+
match hir_map.find(f_in_trait) {
560+
Some(Node::TraitItem(hir::TraitItem {
561+
kind: hir::TraitItemKind::Fn(hir::FnSig {
562+
decl: hir::FnDecl {
563+
inputs,
540564
..
541565
},
566+
..
567+
}, _),
542568
..
543-
}),
544-
..
545-
}),
546-
..
547-
})) => {
548-
(true, td.as_local().and_then(|tld| {
549-
let h = hir_map.local_def_id_to_hir_id(tld);
550-
match hir_map.find(h) {
551-
Some(Node::Item(hir::Item {
552-
kind: hir::ItemKind::Trait(
553-
_, _, _, _,
554-
items
555-
),
556-
..
557-
})) => {
558-
let mut f_in_trait_opt = None;
559-
for hir::TraitItemRef { id: fi, kind: k, .. } in *items {
560-
let hi = fi.hir_id();
561-
if !matches!(k, hir::AssocItemKind::Fn { .. }) {
562-
continue;
563-
}
564-
if hir_map.name(hi) != hir_map.name(my_hir) {
565-
continue;
566-
}
567-
f_in_trait_opt = Some(hi);
568-
break;
569-
}
570-
f_in_trait_opt.and_then(|f_in_trait| {
571-
match hir_map.find(f_in_trait) {
572-
Some(Node::TraitItem(hir::TraitItem {
573-
kind: hir::TraitItemKind::Fn(hir::FnSig {
574-
decl: hir::FnDecl {
575-
inputs,
576-
..
577-
},
578-
..
579-
}, _),
580-
..
581-
})) => {
582-
let hir::Ty { span, .. } = inputs[local.index() - 1];
583-
Some(span)
584-
},
585-
_ => None,
586-
}
587-
})
569+
})) => {
570+
let hir::Ty { span, .. } = inputs[local.index() - 1];
571+
Some(span)
572+
},
573+
_ => None,
588574
}
589-
_ => None
590-
}
591-
}))
575+
})
576+
}
577+
_ => None
592578
}
593-
_ => (false, None),
594-
}
579+
}))
595580
}
596581

597582
// point to span of upvar making closure call require mutable borrow

0 commit comments

Comments
 (0)