Use a slice for object_lifetime_defaults.
This commit is contained in:
parent
f72f15ca28
commit
e52131efad
4 changed files with 74 additions and 87 deletions
|
@ -1490,9 +1490,7 @@ rustc_queries! {
|
|||
/// for each parameter if a trait object were to be passed for that parameter.
|
||||
/// For example, for `struct Foo<'a, T, U>`, this would be `['static, 'static]`.
|
||||
/// For `struct Foo<'a, T: 'a, U>`, this would instead be `['a, 'static]`.
|
||||
query object_lifetime_defaults_map(_: LocalDefId)
|
||||
-> Option<Vec<ObjectLifetimeDefault>> {
|
||||
storage(ArenaCacheSelector<'tcx>)
|
||||
query object_lifetime_defaults(_: LocalDefId) -> Option<&'tcx [ObjectLifetimeDefault]> {
|
||||
desc { "looking up lifetime defaults for a region on an item" }
|
||||
}
|
||||
query late_bound_vars_map(_: LocalDefId)
|
||||
|
|
|
@ -5,7 +5,7 @@ use crate::dep_graph::{DepGraph, DepKind, DepKindStruct};
|
|||
use crate::hir::place::Place as HirPlace;
|
||||
use crate::infer::canonical::{Canonical, CanonicalVarInfo, CanonicalVarInfos};
|
||||
use crate::lint::{struct_lint_level, LintDiagnosticBuilder, LintLevelSource};
|
||||
use crate::middle::resolve_lifetime::{self, LifetimeScopeForPath, ObjectLifetimeDefault};
|
||||
use crate::middle::resolve_lifetime::{self, LifetimeScopeForPath};
|
||||
use crate::middle::stability;
|
||||
use crate::mir::interpret::{self, Allocation, ConstValue, Scalar};
|
||||
use crate::mir::{Body, Field, Local, Place, PlaceElem, ProjectionKind, Promoted};
|
||||
|
@ -2713,10 +2713,6 @@ impl<'tcx> TyCtxt<'tcx> {
|
|||
.map_or(false, |(owner, set)| owner == id.owner && set.contains(&id.local_id))
|
||||
}
|
||||
|
||||
pub fn object_lifetime_defaults(self, id: HirId) -> &'tcx Option<Vec<ObjectLifetimeDefault>> {
|
||||
self.object_lifetime_defaults_map(id.owner)
|
||||
}
|
||||
|
||||
pub fn late_bound_vars(self, id: HirId) -> &'tcx List<ty::BoundVariableKind> {
|
||||
self.mk_bound_variable_kinds(
|
||||
self.late_bound_vars_map(id.owner)
|
||||
|
|
|
@ -377,7 +377,7 @@ pub fn provide(providers: &mut ty::query::Providers) {
|
|||
|
||||
named_region_map: |tcx, id| resolve_lifetimes_for(tcx, id).defs.get(&id),
|
||||
is_late_bound_map,
|
||||
object_lifetime_defaults_map: |tcx, id| match tcx.hir().find_by_def_id(id) {
|
||||
object_lifetime_defaults: |tcx, id| match tcx.hir().find_by_def_id(id) {
|
||||
Some(Node::Item(item)) => compute_object_lifetime_defaults(tcx, item),
|
||||
_ => None,
|
||||
},
|
||||
|
@ -1673,10 +1673,10 @@ fn extract_labels(ctxt: &mut LifetimeContext<'_, '_>, body: &hir::Body<'_>) {
|
|||
}
|
||||
}
|
||||
|
||||
fn compute_object_lifetime_defaults(
|
||||
tcx: TyCtxt<'_>,
|
||||
fn compute_object_lifetime_defaults<'tcx>(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
item: &hir::Item<'_>,
|
||||
) -> Option<Vec<ObjectLifetimeDefault>> {
|
||||
) -> Option<&'tcx [ObjectLifetimeDefault]> {
|
||||
match item.kind {
|
||||
hir::ItemKind::Struct(_, ref generics)
|
||||
| hir::ItemKind::Union(_, ref generics)
|
||||
|
@ -1729,10 +1729,10 @@ fn compute_object_lifetime_defaults(
|
|||
/// Scan the bounds and where-clauses on parameters to extract bounds
|
||||
/// of the form `T:'a` so as to determine the `ObjectLifetimeDefault`
|
||||
/// for each type parameter.
|
||||
fn object_lifetime_defaults_for_item(
|
||||
tcx: TyCtxt<'_>,
|
||||
fn object_lifetime_defaults_for_item<'tcx>(
|
||||
tcx: TyCtxt<'tcx>,
|
||||
generics: &hir::Generics<'_>,
|
||||
) -> Vec<ObjectLifetimeDefault> {
|
||||
) -> &'tcx [ObjectLifetimeDefault] {
|
||||
fn add_bounds(set: &mut Set1<hir::LifetimeName>, bounds: &[hir::GenericBound<'_>]) {
|
||||
for bound in bounds {
|
||||
if let hir::GenericBound::Outlives(ref lifetime) = *bound {
|
||||
|
@ -1741,10 +1741,7 @@ fn object_lifetime_defaults_for_item(
|
|||
}
|
||||
}
|
||||
|
||||
generics
|
||||
.params
|
||||
.iter()
|
||||
.filter_map(|param| match param.kind {
|
||||
let process_param = |param: &hir::GenericParam<'_>| match param.kind {
|
||||
GenericParamKind::Lifetime { .. } => None,
|
||||
GenericParamKind::Type { .. } => {
|
||||
let mut set = Set1::Empty;
|
||||
|
@ -1796,11 +1793,7 @@ fn object_lifetime_defaults_for_item(
|
|||
.find(|&(_, (_, lt_name, _))| lt_name == name)
|
||||
.map_or(Set1::Many, |(i, (id, _, origin))| {
|
||||
let def_id = tcx.hir().local_def_id(id);
|
||||
Set1::One(Region::EarlyBound(
|
||||
i as u32,
|
||||
def_id.to_def_id(),
|
||||
origin,
|
||||
))
|
||||
Set1::One(Region::EarlyBound(i as u32, def_id.to_def_id(), origin))
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -1814,8 +1807,9 @@ fn object_lifetime_defaults_for_item(
|
|||
// in an arbitrary order.
|
||||
Some(Set1::Empty)
|
||||
}
|
||||
})
|
||||
.collect()
|
||||
};
|
||||
|
||||
tcx.arena.alloc_from_iter(generics.params.iter().filter_map(process_param))
|
||||
}
|
||||
|
||||
impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
|
||||
|
@ -2510,8 +2504,7 @@ impl<'a, 'tcx> LifetimeContext<'a, 'tcx> {
|
|||
if let Some(def_id) = def_id.as_local() {
|
||||
let id = self.tcx.hir().local_def_id_to_hir_id(def_id);
|
||||
self.tcx
|
||||
.object_lifetime_defaults(id)
|
||||
.as_ref()
|
||||
.object_lifetime_defaults(id.owner)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.map(set_to_region)
|
||||
|
|
|
@ -1695,7 +1695,7 @@ fn generics_of(tcx: TyCtxt<'_>, def_id: DefId) -> ty::Generics {
|
|||
kind: ty::GenericParamDefKind::Lifetime,
|
||||
}));
|
||||
|
||||
let object_lifetime_defaults = tcx.object_lifetime_defaults(hir_id);
|
||||
let object_lifetime_defaults = tcx.object_lifetime_defaults(hir_id.owner);
|
||||
|
||||
// Now create the real type and const parameters.
|
||||
let type_start = own_start - has_self as u32 + params.len() as u32;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue