1
Fork 0

Remove Scope::Elision.

This commit is contained in:
Camille GILLOT 2023-07-22 07:59:14 +00:00
parent c06b2b9117
commit b8701ff9d3

View file

@ -137,12 +137,6 @@ enum Scope<'a> {
s: ScopeRef<'a>, s: ScopeRef<'a>,
}, },
/// A scope which either determines unspecified lifetimes or errors
/// on them (e.g., due to ambiguity).
Elision {
s: ScopeRef<'a>,
},
/// Use a specific lifetime (if `Some`) or leave it unset (to be /// Use a specific lifetime (if `Some`) or leave it unset (to be
/// inferred in a function body or potentially error outside one), /// inferred in a function body or potentially error outside one),
/// for the default choice of lifetime in a trait object type. /// for the default choice of lifetime in a trait object type.
@ -211,7 +205,6 @@ impl<'a> fmt::Debug for TruncatedScopeDebug<'a> {
Scope::Body { id, s: _ } => { Scope::Body { id, s: _ } => {
f.debug_struct("Body").field("id", id).field("s", &"..").finish() f.debug_struct("Body").field("id", id).field("s", &"..").finish()
} }
Scope::Elision { s: _ } => f.debug_struct("Elision").field("s", &"..").finish(),
Scope::ObjectLifetimeDefault { lifetime, s: _ } => f Scope::ObjectLifetimeDefault { lifetime, s: _ } => f
.debug_struct("ObjectLifetimeDefault") .debug_struct("ObjectLifetimeDefault")
.field("lifetime", lifetime) .field("lifetime", lifetime)
@ -325,9 +318,7 @@ impl<'a, 'tcx> BoundVarContext<'a, 'tcx> {
break (vec![], BinderScopeType::Normal); break (vec![], BinderScopeType::Normal);
} }
Scope::Elision { s, .. } Scope::ObjectLifetimeDefault { s, .. } | Scope::AnonConstBoundary { s } => {
| Scope::ObjectLifetimeDefault { s, .. }
| Scope::AnonConstBoundary { s } => {
scope = s; scope = s;
} }
@ -526,16 +517,12 @@ impl<'a, 'tcx> Visitor<'tcx> for BoundVarContext<'a, 'tcx> {
| hir::ItemKind::Macro(..) | hir::ItemKind::Macro(..)
| hir::ItemKind::Mod(..) | hir::ItemKind::Mod(..)
| hir::ItemKind::ForeignMod { .. } | hir::ItemKind::ForeignMod { .. }
| hir::ItemKind::Static(..)
| hir::ItemKind::Const(..)
| hir::ItemKind::GlobalAsm(..) => { | hir::ItemKind::GlobalAsm(..) => {
// These sorts of items have no lifetime parameters at all. // These sorts of items have no lifetime parameters at all.
intravisit::walk_item(self, item); intravisit::walk_item(self, item);
} }
hir::ItemKind::Static(..) | hir::ItemKind::Const(..) => {
// No lifetime parameters, but implied 'static.
self.with(Scope::Elision { s: self.scope }, |this| {
intravisit::walk_item(this, item)
});
}
hir::ItemKind::OpaqueTy(hir::OpaqueTy { hir::ItemKind::OpaqueTy(hir::OpaqueTy {
origin: hir::OpaqueTyOrigin::TyAlias { .. }, origin: hir::OpaqueTyOrigin::TyAlias { .. },
.. ..
@ -727,12 +714,7 @@ impl<'a, 'tcx> Visitor<'tcx> for BoundVarContext<'a, 'tcx> {
// Elided lifetimes are not allowed in non-return // Elided lifetimes are not allowed in non-return
// position impl Trait // position impl Trait
let scope = Scope::TraitRefBoundary { s: self.scope }; let scope = Scope::TraitRefBoundary { s: self.scope };
self.with(scope, |this| { self.with(scope, |this| intravisit::walk_item(this, opaque_ty));
let scope = Scope::Elision { s: this.scope };
this.with(scope, |this| {
intravisit::walk_item(this, opaque_ty);
})
});
return; return;
} }
@ -1293,8 +1275,7 @@ impl<'a, 'tcx> BoundVarContext<'a, 'tcx> {
scope = s; scope = s;
} }
Scope::Elision { s, .. } Scope::ObjectLifetimeDefault { s, .. }
| Scope::ObjectLifetimeDefault { s, .. }
| Scope::Supertrait { s, .. } | Scope::Supertrait { s, .. }
| Scope::TraitRefBoundary { s, .. } | Scope::TraitRefBoundary { s, .. }
| Scope::AnonConstBoundary { s } => { | Scope::AnonConstBoundary { s } => {
@ -1357,7 +1338,6 @@ impl<'a, 'tcx> BoundVarContext<'a, 'tcx> {
Scope::Root { .. } => break, Scope::Root { .. } => break,
Scope::Binder { s, .. } Scope::Binder { s, .. }
| Scope::Body { s, .. } | Scope::Body { s, .. }
| Scope::Elision { s, .. }
| Scope::ObjectLifetimeDefault { s, .. } | Scope::ObjectLifetimeDefault { s, .. }
| Scope::Supertrait { s, .. } | Scope::Supertrait { s, .. }
| Scope::TraitRefBoundary { s, .. } | Scope::TraitRefBoundary { s, .. }
@ -1409,8 +1389,7 @@ impl<'a, 'tcx> BoundVarContext<'a, 'tcx> {
scope = s; scope = s;
} }
Scope::Elision { s, .. } Scope::ObjectLifetimeDefault { s, .. }
| Scope::ObjectLifetimeDefault { s, .. }
| Scope::Supertrait { s, .. } | Scope::Supertrait { s, .. }
| Scope::TraitRefBoundary { s, .. } => { | Scope::TraitRefBoundary { s, .. } => {
scope = s; scope = s;
@ -1483,7 +1462,6 @@ impl<'a, 'tcx> BoundVarContext<'a, 'tcx> {
Scope::Root { .. } => break, Scope::Root { .. } => break,
Scope::Binder { s, .. } Scope::Binder { s, .. }
| Scope::Body { s, .. } | Scope::Body { s, .. }
| Scope::Elision { s, .. }
| Scope::ObjectLifetimeDefault { s, .. } | Scope::ObjectLifetimeDefault { s, .. }
| Scope::Supertrait { s, .. } | Scope::Supertrait { s, .. }
| Scope::TraitRefBoundary { s, .. } | Scope::TraitRefBoundary { s, .. }
@ -1564,7 +1542,6 @@ impl<'a, 'tcx> BoundVarContext<'a, 'tcx> {
Scope::Body { .. } => break true, Scope::Body { .. } => break true,
Scope::Binder { s, .. } Scope::Binder { s, .. }
| Scope::Elision { s, .. }
| Scope::ObjectLifetimeDefault { s, .. } | Scope::ObjectLifetimeDefault { s, .. }
| Scope::Supertrait { s, .. } | Scope::Supertrait { s, .. }
| Scope::TraitRefBoundary { s, .. } | Scope::TraitRefBoundary { s, .. }
@ -1832,14 +1809,20 @@ impl<'a, 'tcx> BoundVarContext<'a, 'tcx> {
output: Option<&'tcx hir::Ty<'tcx>>, output: Option<&'tcx hir::Ty<'tcx>>,
in_closure: bool, in_closure: bool,
) { ) {
self.with(Scope::Elision { s: self.scope }, |this| { self.with(
for input in inputs { Scope::ObjectLifetimeDefault {
this.visit_ty(input); lifetime: Some(ResolvedArg::StaticLifetime),
} s: self.scope,
if !in_closure && let Some(output) = output { },
this.visit_ty(output); |this| {
} for input in inputs {
}); this.visit_ty(input);
}
if !in_closure && let Some(output) = output {
this.visit_ty(output);
}
},
);
if in_closure && let Some(output) = output { if in_closure && let Some(output) = output {
self.visit_ty(output); self.visit_ty(output);
} }
@ -1859,7 +1842,7 @@ impl<'a, 'tcx> BoundVarContext<'a, 'tcx> {
scope = s; scope = s;
} }
Scope::Root { .. } | Scope::Elision { .. } => break ResolvedArg::StaticLifetime, Scope::Root { .. } => break ResolvedArg::StaticLifetime,
Scope::Body { .. } | Scope::ObjectLifetimeDefault { lifetime: None, .. } => return, Scope::Body { .. } | Scope::ObjectLifetimeDefault { lifetime: None, .. } => return,