Remove Scope::Elision.
This commit is contained in:
parent
c06b2b9117
commit
b8701ff9d3
1 changed files with 21 additions and 38 deletions
|
@ -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,
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue