Skip to content

Commit ec2ff8f

Browse files
committed
Add TyCtxt::is_closure
1 parent c3ec175 commit ec2ff8f

File tree

3 files changed

+11
-9
lines changed

3 files changed

+11
-9
lines changed

src/librustc/ty/util.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -621,9 +621,13 @@ impl<'a, 'gcx, 'tcx> TyCtxt<'a, 'gcx, 'tcx> {
621621
result
622622
}
623623

624+
pub fn is_closure(self, def_id: DefId) -> bool {
625+
self.def_key(def_id).disambiguated_data.data == DefPathData::ClosureExpr
626+
}
627+
624628
pub fn closure_base_def_id(self, def_id: DefId) -> DefId {
625629
let mut def_id = def_id;
626-
while self.def_key(def_id).disambiguated_data.data == DefPathData::ClosureExpr {
630+
while self.is_closure(def_id) {
627631
def_id = self.parent_def_id(def_id).unwrap_or_else(|| {
628632
bug!("closure {:?} has no parent", def_id);
629633
});

src/librustc_mir/transform/check_unsafety.rs

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ use rustc::ty::maps::Providers;
1515
use rustc::ty::{self, TyCtxt};
1616
use rustc::hir;
1717
use rustc::hir::def_id::DefId;
18-
use rustc::hir::map::DefPathData;
1918
use rustc::lint::builtin::{SAFE_EXTERN_STATICS, UNUSED_UNSAFE};
2019
use rustc::mir::*;
2120
use rustc::mir::visit::{LvalueContext, Visitor};
@@ -362,11 +361,11 @@ fn report_unused_unsafe(tcx: TyCtxt, used_unsafe: &FxHashSet<ast::NodeId>, id: a
362361

363362
pub fn check_unsafety<'a, 'tcx>(tcx: TyCtxt<'a, 'tcx, 'tcx>, def_id: DefId) {
364363
debug!("check_unsafety({:?})", def_id);
365-
match tcx.def_key(def_id).disambiguated_data.data {
366-
// closures are handled by their parent fn.
367-
DefPathData::ClosureExpr => return,
368-
_ => {}
369-
};
364+
365+
// closures are handled by their parent fn.
366+
if tcx.is_closure(def_id) {
367+
return;
368+
}
370369

371370
let UnsafetyCheckResult {
372371
violations,

src/librustc_mir/transform/inline.rs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ use rustc::mir::transform::{MirPass, MirSource};
2020
use rustc::mir::visit::*;
2121
use rustc::ty::{self, Instance, Ty, TyCtxt, TypeFoldable};
2222
use rustc::ty::subst::{Subst,Substs};
23-
use rustc::hir::map::definitions::DefPathData;
2423

2524
use std::collections::VecDeque;
2625
use super::simplify::{remove_dead_blocks, CfgSimplifier};
@@ -561,7 +560,7 @@ impl<'a, 'tcx> Inliner<'a, 'tcx> {
561560

562561
// A closure is passed its self-type and a tuple like `(arg1, arg2, ...)`,
563562
// hence mappings to tuple fields are needed.
564-
if tcx.def_key(callsite.callee).disambiguated_data.data == DefPathData::ClosureExpr {
563+
if tcx.is_closure(callsite.callee) {
565564
let mut args = args.into_iter();
566565
let self_ = self.create_temp_if_necessary(args.next().unwrap(), callsite, caller_mir);
567566
let tuple = self.create_temp_if_necessary(args.next().unwrap(), callsite, caller_mir);

0 commit comments

Comments
 (0)