Skip to content

Commit a1a9f8e

Browse files
committed
refactor: avoid calling internal functions in predicates_of() and explicit_predicates_of()
1 parent 1fd3df0 commit a1a9f8e

File tree

9 files changed

+82
-54
lines changed

9 files changed

+82
-54
lines changed

compiler/rustc_smir/src/rustc_smir/context/impls.rs

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ use rustc_middle::mir::{BinOp, Body, Const as MirConst, ConstValue, UnOp};
1515
use rustc_middle::ty::layout::{FnAbiOf, LayoutOf};
1616
use rustc_middle::ty::print::{with_forced_trimmed_paths, with_no_trimmed_paths};
1717
use rustc_middle::ty::{
18-
AdtDef, AdtKind, AssocItem, ClosureKind, GenericArgsRef, GenericPredicates, Instance,
19-
InstanceKind, IntrinsicDef, List, PolyFnSig, ScalarInt, TraitDef, Ty, TyCtxt, TyKind,
20-
TypeVisitableExt, UintTy, ValTree, VariantDef,
18+
AdtDef, AdtKind, AssocItem, ClosureKind, GenericArgsRef, Instance, InstanceKind, IntrinsicDef,
19+
List, PolyFnSig, ScalarInt, TraitDef, Ty, TyCtxt, TyKind, TypeVisitableExt, UintTy, ValTree,
20+
VariantDef,
2121
};
2222
use rustc_middle::{mir, ty};
2323
use rustc_session::cstore::ForeignModule;
@@ -197,12 +197,32 @@ impl<'tcx, B: Bridge> SmirCtxt<'tcx, B> {
197197
self.tcx.generics_of(def_id)
198198
}
199199

200-
pub fn predicates_of(&self, def_id: DefId) -> GenericPredicates<'tcx> {
201-
self.tcx.predicates_of(def_id)
200+
pub fn predicates_of(
201+
&self,
202+
def_id: DefId,
203+
) -> (Option<DefId>, Vec<(ty::PredicateKind<'tcx>, Span)>) {
204+
let ty::GenericPredicates { parent, predicates } = self.tcx.predicates_of(def_id);
205+
(
206+
parent,
207+
predicates
208+
.iter()
209+
.map(|(clause, span)| (clause.as_predicate().kind().skip_binder(), *span))
210+
.collect(),
211+
)
202212
}
203213

204-
pub fn explicit_predicates_of(&self, def_id: DefId) -> GenericPredicates<'tcx> {
205-
self.tcx.explicit_predicates_of(def_id)
214+
pub fn explicit_predicates_of(
215+
&self,
216+
def_id: DefId,
217+
) -> (Option<DefId>, Vec<(ty::PredicateKind<'tcx>, Span)>) {
218+
let ty::GenericPredicates { parent, predicates } = self.tcx.explicit_predicates_of(def_id);
219+
(
220+
parent,
221+
predicates
222+
.iter()
223+
.map(|(clause, span)| (clause.as_predicate().kind().skip_binder(), *span))
224+
.collect(),
225+
)
206226
}
207227

208228
pub fn crate_name(&self, crate_num: CrateNum) -> String {

compiler/rustc_smir/src/stable_mir/compiler_interface.rs

Lines changed: 6 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -423,17 +423,12 @@ impl<'tcx> SmirInterface for SmirContainer<'tcx, BridgeTys> {
423423
let mut tables = self.tables.borrow_mut();
424424
let cx = &*self.cx.borrow();
425425
let did = tables[def_id];
426-
let rustc_middle::ty::GenericPredicates { parent, predicates } = cx.predicates_of(did);
426+
let (parent, kinds) = cx.predicates_of(did);
427427
stable_mir::ty::GenericPredicates {
428428
parent: parent.map(|did| tables.trait_def(did)),
429-
predicates: predicates
429+
predicates: kinds
430430
.iter()
431-
.map(|(clause, span)| {
432-
(
433-
clause.as_predicate().kind().skip_binder().stable(&mut *tables, cx),
434-
span.stable(&mut *tables, cx),
435-
)
436-
})
431+
.map(|(kind, span)| (kind.stable(&mut *tables, cx), span.stable(&mut *tables, cx)))
437432
.collect(),
438433
}
439434
}
@@ -442,18 +437,12 @@ impl<'tcx> SmirInterface for SmirContainer<'tcx, BridgeTys> {
442437
let mut tables = self.tables.borrow_mut();
443438
let cx = &*self.cx.borrow();
444439
let did = tables[def_id];
445-
let rustc_middle::ty::GenericPredicates { parent, predicates } =
446-
cx.explicit_predicates_of(did);
440+
let (parent, kinds) = cx.explicit_predicates_of(did);
447441
stable_mir::ty::GenericPredicates {
448442
parent: parent.map(|did| tables.trait_def(did)),
449-
predicates: predicates
443+
predicates: kinds
450444
.iter()
451-
.map(|(clause, span)| {
452-
(
453-
clause.as_predicate().kind().skip_binder().stable(&mut *tables, cx),
454-
span.stable(&mut *tables, cx),
455-
)
456-
})
445+
.map(|(kind, span)| (kind.stable(&mut *tables, cx), span.stable(&mut *tables, cx)))
457446
.collect(),
458447
}
459448
}

compiler/rustc_smir/src/stable_mir/unstable/convert/internal.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ use rustc_smir::Tables;
1010
use rustc_span::Symbol;
1111
use stable_mir::abi::Layout;
1212
use stable_mir::compiler_interface::BridgeTys;
13-
use stable_mir::unstable::{RustcInternal, InternalCx};
1413
use stable_mir::mir::alloc::AllocId;
1514
use stable_mir::mir::mono::{Instance, MonoItem, StaticDef};
1615
use stable_mir::mir::{BinOp, Mutability, Place, ProjectionElem, RawPtrKind, Safety, UnOp};
@@ -20,11 +19,11 @@ use stable_mir::ty::{
2019
GenericArgKind, GenericArgs, IntTy, MirConst, Movability, Pattern, Region, RigidTy, Span,
2120
TermKind, TraitRef, Ty, TyConst, UintTy, VariantDef, VariantIdx,
2221
};
22+
use stable_mir::unstable::{InternalCx, RustcInternal};
2323
use stable_mir::{CrateItem, CrateNum, DefId, IndexedVal};
2424

2525
use crate::{rustc_smir, stable_mir};
2626

27-
2827
impl RustcInternal for CrateItem {
2928
type T<'tcx> = rustc_span::def_id::DefId;
3029
fn internal<'tcx>(
@@ -447,9 +446,10 @@ impl RustcInternal for BoundVariableKind {
447446
match self {
448447
BoundVariableKind::Ty(kind) => rustc_ty::BoundVariableKind::Ty(match kind {
449448
BoundTyKind::Anon => rustc_ty::BoundTyKind::Anon,
450-
BoundTyKind::Param(def, symbol) => {
451-
rustc_ty::BoundTyKind::Param(def.0.internal(tables, tcx), Symbol::intern(symbol))
452-
}
449+
BoundTyKind::Param(def, symbol) => rustc_ty::BoundTyKind::Param(
450+
def.0.internal(tables, tcx),
451+
Symbol::intern(symbol),
452+
),
453453
}),
454454
BoundVariableKind::Region(kind) => rustc_ty::BoundVariableKind::Region(match kind {
455455
BoundRegionKind::BrAnon => rustc_ty::BoundRegionKind::Anon,
@@ -541,7 +541,10 @@ impl RustcInternal for ExistentialTraitRef {
541541
tcx: impl InternalCx<'tcx>,
542542
) -> Self::T<'tcx> {
543543
use rustc_smir::context::SmirExistentialTraitRef;
544-
tcx.new_from_args(self.def_id.0.internal(tables, tcx), self.generic_args.internal(tables, tcx))
544+
tcx.new_from_args(
545+
self.def_id.0.internal(tables, tcx),
546+
self.generic_args.internal(tables, tcx),
547+
)
545548
}
546549
}
547550

compiler/rustc_smir/src/stable_mir/unstable/convert/mod.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,12 @@
88
99
use std::ops::RangeInclusive;
1010

11-
1211
use rustc_smir::Tables;
1312
use rustc_smir::context::SmirCtxt;
14-
1513
use stable_mir::compiler_interface::BridgeTys;
1614

17-
use crate::{rustc_smir, stable_mir};
18-
1915
use super::Stable;
20-
16+
use crate::{rustc_smir, stable_mir};
2117

2218
mod internal;
2319
mod stable;

compiler/rustc_smir/src/stable_mir/unstable/convert/stable/abi.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ use stable_mir::abi::{
1313
TagEncoding, TyAndLayout, ValueAbi, VariantsShape, WrappingRange,
1414
};
1515
use stable_mir::compiler_interface::BridgeTys;
16-
use stable_mir::unstable::Stable;
1716
use stable_mir::target::MachineSize as Size;
1817
use stable_mir::ty::{Align, VariantIdx};
18+
use stable_mir::unstable::Stable;
1919
use stable_mir::{IndexedVal, opaque};
2020

2121
use crate::{rustc_smir, stable_mir};
@@ -212,7 +212,7 @@ impl<'tcx> Stable<'tcx> for rustc_abi::Variants<rustc_abi::FieldIdx, rustc_abi::
212212
VariantsShape::Multiple {
213213
tag: tag.stable(tables, cx),
214214
tag_encoding: tag_encoding.stable(tables, cx),
215-
tag_field: tag_field.stable(tables,cx),
215+
tag_field: tag_field.stable(tables, cx),
216216
variants: variants.iter().as_slice().stable(tables, cx),
217217
}
218218
}

compiler/rustc_smir/src/stable_mir/unstable/convert/stable/mir.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ use rustc_smir::Tables;
66
use rustc_smir::bridge::SmirError;
77
use rustc_smir::context::SmirCtxt;
88
use stable_mir::compiler_interface::BridgeTys;
9-
use stable_mir::unstable::Stable;
109
use stable_mir::mir::alloc::GlobalAlloc;
1110
use stable_mir::mir::{ConstOperand, Statement, UserTypeProjection, VarDebugInfoFragment};
1211
use stable_mir::ty::{Allocation, ConstantKind, MirConst};
12+
use stable_mir::unstable::Stable;
1313
use stable_mir::{Error, alloc, opaque};
1414

1515
use crate::{rustc_smir, stable_mir};
@@ -847,7 +847,11 @@ impl<'tcx> Stable<'tcx> for mir::interpret::Allocation {
847847

848848
impl<'tcx> Stable<'tcx> for mir::interpret::AllocId {
849849
type T = stable_mir::mir::alloc::AllocId;
850-
fn stable<'cx>(&self, tables: &mut Tables<'cx, BridgeTys>, _: &SmirCtxt<'cx, BridgeTys>) -> Self::T {
850+
fn stable<'cx>(
851+
&self,
852+
tables: &mut Tables<'cx, BridgeTys>,
853+
_: &SmirCtxt<'cx, BridgeTys>,
854+
) -> Self::T {
851855
tables.create_alloc_id(*self)
852856
}
853857
}

compiler/rustc_smir/src/stable_mir/unstable/convert/stable/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,11 @@ impl<'tcx> Stable<'tcx> for rustc_span::Symbol {
8686
impl<'tcx> Stable<'tcx> for rustc_span::Span {
8787
type T = stable_mir::ty::Span;
8888

89-
fn stable<'cx>(&self, tables: &mut Tables<'cx, BridgeTys>, _: &SmirCtxt<'cx, BridgeTys>) -> Self::T {
89+
fn stable<'cx>(
90+
&self,
91+
tables: &mut Tables<'cx, BridgeTys>,
92+
_: &SmirCtxt<'cx, BridgeTys>,
93+
) -> Self::T {
9094
tables.create_span(*self)
9195
}
9296
}

compiler/rustc_smir/src/stable_mir/unstable/convert/stable/ty.rs

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ use rustc_smir::Tables;
66
use rustc_smir::context::SmirCtxt;
77
use stable_mir::alloc;
88
use stable_mir::compiler_interface::BridgeTys;
9-
use stable_mir::unstable::Stable;
109
use stable_mir::ty::{
1110
AdtKind, FloatTy, GenericArgs, GenericParamDef, IntTy, Region, RigidTy, TyKind, UintTy,
1211
};
12+
use stable_mir::unstable::Stable;
1313

1414
use crate::{rustc_smir, stable_mir};
1515

@@ -288,7 +288,11 @@ impl<'tcx> Stable<'tcx> for ty::FnSig<'tcx> {
288288
impl<'tcx> Stable<'tcx> for ty::BoundTyKind {
289289
type T = stable_mir::ty::BoundTyKind;
290290

291-
fn stable<'cx>(&self, tables: &mut Tables<'cx, BridgeTys>, _: &SmirCtxt<'cx, BridgeTys>) -> Self::T {
291+
fn stable<'cx>(
292+
&self,
293+
tables: &mut Tables<'cx, BridgeTys>,
294+
_: &SmirCtxt<'cx, BridgeTys>,
295+
) -> Self::T {
292296
use stable_mir::ty::BoundTyKind;
293297

294298
match self {
@@ -303,7 +307,11 @@ impl<'tcx> Stable<'tcx> for ty::BoundTyKind {
303307
impl<'tcx> Stable<'tcx> for ty::BoundRegionKind {
304308
type T = stable_mir::ty::BoundRegionKind;
305309

306-
fn stable<'cx>(&self, tables: &mut Tables<'cx, BridgeTys>, _: &SmirCtxt<'cx, BridgeTys>) -> Self::T {
310+
fn stable<'cx>(
311+
&self,
312+
tables: &mut Tables<'cx, BridgeTys>,
313+
_: &SmirCtxt<'cx, BridgeTys>,
314+
) -> Self::T {
307315
use stable_mir::ty::BoundRegionKind;
308316

309317
match self {
@@ -1108,7 +1116,11 @@ impl<'tcx> Stable<'tcx> for ty::AssocItem {
11081116
impl<'tcx> Stable<'tcx> for ty::ImplTraitInTraitData {
11091117
type T = stable_mir::ty::ImplTraitInTraitData;
11101118

1111-
fn stable<'cx>(&self, tables: &mut Tables<'cx, BridgeTys>, _: &SmirCtxt<'cx, BridgeTys>) -> Self::T {
1119+
fn stable<'cx>(
1120+
&self,
1121+
tables: &mut Tables<'cx, BridgeTys>,
1122+
_: &SmirCtxt<'cx, BridgeTys>,
1123+
) -> Self::T {
11121124
use stable_mir::ty::ImplTraitInTraitData;
11131125
match self {
11141126
ty::ImplTraitInTraitData::Trait { fn_def_id, opaque_def_id } => {

compiler/rustc_smir/src/stable_mir/unstable/mod.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
//! Module that collects the things that have no stability guarantees.
22
//!
3-
//! We want to keep StableMIR definitions and logic separate from
4-
//! any sort of conversion and usage of internal rustc code. So we
3+
//! We want to keep StableMIR definitions and logic separate from
4+
//! any sort of conversion and usage of internal rustc code. So we
55
//! restrict the usage of internal items to be inside this module.
66
77
use std::marker::PointeeSized;
@@ -10,13 +10,13 @@ use rustc_hir::def::DefKind;
1010
use rustc_middle::ty::{List, Ty, TyCtxt};
1111
use rustc_middle::{mir, ty};
1212
use rustc_smir::Tables;
13-
use rustc_smir::context::{SmirCtxt, SmirExistentialProjection, SmirExistentialTraitRef, SmirTraitRef};
14-
13+
use rustc_smir::context::{
14+
SmirCtxt, SmirExistentialProjection, SmirExistentialTraitRef, SmirTraitRef,
15+
};
1516
use stable_mir::{CtorKind, ItemKind};
1617

17-
use crate::{rustc_smir, stable_mir};
18-
1918
use super::compiler_interface::BridgeTys;
19+
use crate::{rustc_smir, stable_mir};
2020

2121
pub(crate) mod convert;
2222

@@ -86,15 +86,15 @@ impl<'tcx> InternalCx<'tcx> for TyCtxt<'tcx> {
8686
fn lifetimes_re_erased(self) -> ty::Region<'tcx> {
8787
self.lifetimes.re_erased
8888
}
89-
89+
9090
fn mk_bound_variable_kinds_from_iter<I, T>(self, iter: I) -> T::Output
9191
where
9292
I: Iterator<Item = T>,
9393
T: ty::CollectAndApply<ty::BoundVariableKind, &'tcx List<ty::BoundVariableKind>>,
9494
{
9595
TyCtxt::mk_bound_variable_kinds_from_iter(self, iter)
9696
}
97-
97+
9898
fn mk_place_elems(self, v: &[mir::PlaceElem<'tcx>]) -> &'tcx List<mir::PlaceElem<'tcx>> {
9999
TyCtxt::mk_place_elems(self, v)
100100
}
@@ -105,10 +105,10 @@ impl<'tcx> InternalCx<'tcx> for TyCtxt<'tcx> {
105105
}
106106

107107
/// Trait that defines the methods that are fine to call from [`RustcInternal`].
108-
///
108+
///
109109
/// This trait is only for [`RustcInternal`]. Any other other access to rustc's internals
110110
/// should go through [`crate::rustc_smir::context::SmirCtxt`].
111-
pub trait InternalCx<'tcx> : Copy + Clone {
111+
pub trait InternalCx<'tcx>: Copy + Clone {
112112
fn tcx(self) -> TyCtxt<'tcx>;
113113

114114
fn lift<T: ty::Lift<TyCtxt<'tcx>>>(self, value: T) -> Option<T::Lifted>;

0 commit comments

Comments
 (0)