Skip to content

Commit a79c80d

Browse files
Adds TyCtxt::require_lang_item(LangItem) to simplify lang item requires.
Replaces instances of tcx.lang_items.require(..) with fatal unwrap with this method.
1 parent 9b803ec commit a79c80d

File tree

14 files changed

+28
-40
lines changed

14 files changed

+28
-40
lines changed

src/librustc/infer/mod.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -1493,8 +1493,7 @@ impl<'a, 'gcx, 'tcx> InferCtxt<'a, 'gcx, 'tcx> {
14931493
}
14941494
}
14951495

1496-
let copy_def_id = self.tcx.lang_items.require(lang_items::CopyTraitLangItem)
1497-
.unwrap_or_else(|msg| self.tcx.sess.fatal(&msg[..]));
1496+
let copy_def_id = self.tcx.require_lang_item(lang_items::CopyTraitLangItem);
14981497

14991498
// this can get called from typeck (by euv), and moves_by_default
15001499
// rightly refuses to work with inference variables, but

src/librustc/middle/lang_items.rs

+8
Original file line numberDiff line numberDiff line change
@@ -356,3 +356,11 @@ language_item_table! {
356356

357357
DebugTraitLangItem, "debug_trait", debug_trait;
358358
}
359+
360+
impl<'a, 'tcx, 'gcx> ty::TyCtxt<'a, 'tcx, 'gcx> {
361+
pub fn require_lang_item(&self, lang_item: LangItem) -> DefId {
362+
self.lang_items.require(lang_item).unwrap_or_else(|msg| {
363+
self.sess.fatal(&msg)
364+
})
365+
}
366+
}

src/librustc/traits/select.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -2521,8 +2521,7 @@ impl<'cx, 'gcx, 'tcx> SelectionContext<'cx, 'gcx, 'tcx> {
25212521

25222522
// We can only make objects from sized types.
25232523
let tr = ty::TraitRef {
2524-
def_id: tcx.lang_items.require(lang_items::SizedTraitLangItem)
2525-
.unwrap_or_else(|msg| tcx.sess.fatal(&msg[..])),
2524+
def_id: tcx.require_lang_item(lang_items::SizedTraitLangItem),
25262525
substs: tcx.mk_substs_trait(source, &[]),
25272526
};
25282527
push(tr.to_predicate());

src/librustc/ty/fast_reject.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use hir::def_id::DefId;
1212
use ty::{self, Ty, TyCtxt};
1313
use syntax::ast;
14+
use middle::lang_items::OwnedBoxLangItem;
1415

1516
use self::SimplifiedType::*;
1617

@@ -70,10 +71,7 @@ pub fn simplify_type<'a, 'gcx, 'tcx>(tcx: TyCtxt<'a, 'gcx, 'tcx>,
7071
}
7172
ty::TyBox(_) => {
7273
// treat like we would treat `Box`
73-
match tcx.lang_items.require_owned_box() {
74-
Ok(def_id) => Some(AdtSimplifiedType(def_id)),
75-
Err(msg) => tcx.sess.fatal(&msg),
76-
}
74+
Some(AdtSimplifiedType(tcx.require_lang_item(OwnedBoxLangItem)))
7775
}
7876
ty::TyClosure(def_id, _) => {
7977
Some(ClosureSimplifiedType(def_id))

src/librustc/ty/mod.rs

+4-8
Original file line numberDiff line numberDiff line change
@@ -1878,18 +1878,14 @@ pub enum ClosureKind {
18781878

18791879
impl<'a, 'tcx> ClosureKind {
18801880
pub fn trait_did(&self, tcx: TyCtxt<'a, 'tcx, 'tcx>) -> DefId {
1881-
let result = match *self {
1882-
ClosureKind::Fn => tcx.lang_items.require(FnTraitLangItem),
1881+
match *self {
1882+
ClosureKind::Fn => tcx.require_lang_item(FnTraitLangItem),
18831883
ClosureKind::FnMut => {
1884-
tcx.lang_items.require(FnMutTraitLangItem)
1884+
tcx.require_lang_item(FnMutTraitLangItem)
18851885
}
18861886
ClosureKind::FnOnce => {
1887-
tcx.lang_items.require(FnOnceTraitLangItem)
1887+
tcx.require_lang_item(FnOnceTraitLangItem)
18881888
}
1889-
};
1890-
match result {
1891-
Ok(trait_did) => trait_did,
1892-
Err(err) => tcx.sess.fatal(&err[..]),
18931889
}
18941890
}
18951891

src/librustc/ty/util.rs

+3-5
Original file line numberDiff line numberDiff line change
@@ -646,8 +646,7 @@ impl<'a, 'tcx> ty::TyS<'tcx> {
646646
TyProjection(..) | TyParam(..) | TyInfer(..) | TyError => None
647647
}.unwrap_or_else(|| {
648648
!self.impls_bound(tcx, param_env,
649-
tcx.lang_items.require(lang_items::CopyTraitLangItem)
650-
.unwrap_or_else(|msg| tcx.sess.fatal(&msg[..])),
649+
tcx.require_lang_item(lang_items::CopyTraitLangItem),
651650
&param_env.is_copy_cache, span) });
652651

653652
if !self.has_param_types() && !self.has_self_ty() {
@@ -689,9 +688,8 @@ impl<'a, 'tcx> ty::TyS<'tcx> {
689688
TyAdt(..) | TyProjection(..) | TyParam(..) |
690689
TyInfer(..) | TyAnon(..) | TyError => None
691690
}.unwrap_or_else(|| {
692-
self.impls_bound(tcx, param_env, tcx.lang_items.require(lang_items::SizedTraitLangItem)
693-
.unwrap_or_else(|msg| tcx.sess.fatal(&msg[..])),
694-
&param_env.is_copy_cache, span) });
691+
self.impls_bound(tcx, param_env, tcx.require_lang_item(lang_items::SizedTraitLangItem),
692+
&param_env.is_sized_cache, span) });
695693

696694
if !self.has_param_types() && !self.has_self_ty() {
697695
self.flags.set(self.flags.get() | if result {

src/librustc/ty/wf.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -283,8 +283,7 @@ impl<'a, 'gcx, 'tcx> WfPredicates<'a, 'gcx, 'tcx> {
283283
if !subty.has_escaping_regions() {
284284
let cause = self.cause(cause);
285285
let trait_ref = ty::TraitRef {
286-
def_id: self.infcx.tcx.lang_items.require(lang_items::SizedTraitLangItem)
287-
.unwrap_or_else(|msg| self.infcx.tcx.sess.fatal(&msg[..])),
286+
def_id: self.infcx.tcx.require_lang_item(lang_items::SizedTraitLangItem),
288287
substs: self.infcx.tcx.mk_substs_trait(subty, &[]),
289288
};
290289
self.out.push(traits::Obligation::new(cause, trait_ref.to_predicate()));

src/librustc_borrowck/borrowck/mir/elaborate_drops.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -857,8 +857,7 @@ impl<'b, 'tcx> ElaborateDropsCtxt<'b, 'tcx> {
857857

858858
let tcx = self.tcx;
859859
let unit_temp = Lvalue::Local(self.patch.new_temp(tcx.mk_nil()));
860-
let free_func = tcx.lang_items.require(lang_items::BoxFreeFnLangItem)
861-
.unwrap_or_else(|e| tcx.sess.fatal(&e));
860+
let free_func = tcx.require_lang_item(lang_items::BoxFreeFnLangItem);
862861
let substs = tcx.mk_substs(iter::once(Kind::from(ty)));
863862
let fty = tcx.item_type(free_func).subst(tcx, substs);
864863

src/librustc_mir/build/scope.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -783,8 +783,7 @@ fn build_free<'a, 'gcx, 'tcx>(tcx: TyCtxt<'a, 'gcx, 'tcx>,
783783
data: &FreeData<'tcx>,
784784
target: BasicBlock)
785785
-> TerminatorKind<'tcx> {
786-
let free_func = tcx.lang_items.require(lang_items::BoxFreeFnLangItem)
787-
.unwrap_or_else(|e| tcx.sess.fatal(&e));
786+
let free_func = tcx.require_lang_item(lang_items::BoxFreeFnLangItem);
788787
let substs = tcx.intern_substs(&[Kind::from(data.item_ty)]);
789788
TerminatorKind::Call {
790789
func: Operand::Constant(Constant {

src/librustc_mir/transform/qualify_consts.rs

+1-3
Original file line numberDiff line numberDiff line change
@@ -1048,9 +1048,7 @@ impl<'tcx> MirPass<'tcx> for QualifyAndPromoteConstants {
10481048
let cause = traits::ObligationCause::new(mir.span, id, traits::SharedStatic);
10491049
let mut fulfillment_cx = traits::FulfillmentContext::new();
10501050
fulfillment_cx.register_bound(&infcx, ty,
1051-
tcx.lang_items
1052-
.require(lang_items::SyncTraitLangItem)
1053-
.unwrap_or_else(|msg| tcx.sess.fatal(&msg[..])),
1051+
tcx.require_lang_item(lang_items::SyncTraitLangItem),
10541052
cause);
10551053
if let Err(err) = fulfillment_cx.select_all_or_error(&infcx) {
10561054
infcx.report_fulfillment_errors(&err);

src/librustc_typeck/check/cast.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -545,8 +545,7 @@ impl<'a, 'gcx, 'tcx> CastCheck<'tcx> {
545545

546546
impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
547547
fn type_is_known_to_be_sized(&self, ty: Ty<'tcx>, span: Span) -> bool {
548-
let lang_item = self.tcx.lang_items.require(lang_items::SizedTraitLangItem)
549-
.unwrap_or_else(|msg| self.tcx.sess.fatal(&msg[..]));
548+
let lang_item = self.tcx.require_lang_item(lang_items::SizedTraitLangItem);
550549
traits::type_known_to_meet_bound(self, ty, lang_item, span)
551550
}
552551
}

src/librustc_typeck/check/mod.rs

+2-4
Original file line numberDiff line numberDiff line change
@@ -1819,8 +1819,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
18191819
span: Span,
18201820
code: traits::ObligationCauseCode<'tcx>)
18211821
{
1822-
let lang_item = self.tcx.lang_items.require(lang_items::SizedTraitLangItem)
1823-
.unwrap_or_else(|msg| self.tcx.sess.fatal(&msg[..]));
1822+
let lang_item = self.tcx.require_lang_item(lang_items::SizedTraitLangItem);
18241823
self.require_type_meets(ty, span, code, lang_item);
18251824
}
18261825

@@ -3902,8 +3901,7 @@ impl<'a, 'gcx, 'tcx> FnCtxt<'a, 'gcx, 'tcx> {
39023901
if count > 1 {
39033902
// For [foo, ..n] where n > 1, `foo` must have
39043903
// Copy type:
3905-
let lang_item = self.tcx.lang_items.require(lang_items::CopyTraitLangItem)
3906-
.unwrap_or_else(|msg| self.tcx.sess.fatal(&msg[..]));
3904+
let lang_item = self.tcx.require_lang_item(lang_items::CopyTraitLangItem);
39073905
self.require_type_meets(t, expr.span, traits::RepeatVec, lang_item);
39083906
}
39093907

src/librustc_typeck/check/wfcheck.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -238,8 +238,7 @@ impl<'ccx, 'gcx> CheckTypeWellFormedVisitor<'ccx, 'gcx> {
238238
for field in &variant.fields[..variant.fields.len() - unsized_len] {
239239
fcx.register_bound(
240240
field.ty,
241-
fcx.tcx.lang_items.require(lang_items::SizedTraitLangItem)
242-
.unwrap_or_else(|msg| fcx.tcx.sess.fatal(&msg[..])),
241+
fcx.tcx.require_lang_item(lang_items::SizedTraitLangItem),
243242
traits::ObligationCause::new(field.span,
244243
fcx.body_id,
245244
traits::FieldSized));

src/librustdoc/clean/mod.rs

+1-2
Original file line numberDiff line numberDiff line change
@@ -594,8 +594,7 @@ pub enum TyParamBound {
594594

595595
impl TyParamBound {
596596
fn maybe_sized(cx: &DocContext) -> TyParamBound {
597-
let did = cx.tcx.lang_items.require(lang_items::SizedTraitLangItem)
598-
.unwrap_or_else(|msg| cx.tcx.sess.fatal(&msg[..]));
597+
let did = cx.tcx.require_lang_item(lang_items::SizedTraitLangItem);
599598
let empty = cx.tcx.intern_substs(&[]);
600599
let path = external_path(cx, &cx.tcx.item_name(did).as_str(),
601600
Some(did), false, vec![], empty);

0 commit comments

Comments
 (0)