Simplify for loop desugar
This commit is contained in:
parent
3bfde2f1f4
commit
9c83f8c4d1
26 changed files with 181 additions and 256 deletions
|
@ -1821,8 +1821,6 @@ impl<'hir> QPath<'hir> {
|
|||
pub enum LocalSource {
|
||||
/// A `match _ { .. }`.
|
||||
Normal,
|
||||
/// A desugared `for _ in _ { .. }` loop.
|
||||
ForLoopDesugar,
|
||||
/// When lowering async functions, we create locals within the `async move` so that
|
||||
/// all parameters are dropped after the future is polled.
|
||||
///
|
||||
|
|
|
@ -2,6 +2,7 @@ use crate::def::{CtorOf, DefKind, Res};
|
|||
use crate::def_id::DefId;
|
||||
use crate::hir::{self, HirId, PatKind};
|
||||
use rustc_data_structures::stable_set::FxHashSet;
|
||||
use rustc_span::hygiene::DesugaringKind;
|
||||
use rustc_span::symbol::Ident;
|
||||
use rustc_span::Span;
|
||||
|
||||
|
@ -143,4 +144,14 @@ impl hir::Pat<'_> {
|
|||
});
|
||||
result
|
||||
}
|
||||
|
||||
/// If the pattern is `Some(<pat>)` from a desugared for loop, returns the inner pattern
|
||||
pub fn for_loop_some(&self) -> Option<&Self> {
|
||||
if self.span.desugaring_kind() == Some(DesugaringKind::ForLoop) {
|
||||
if let hir::PatKind::Struct(_, [pat_field], _) = self.kind {
|
||||
return Some(pat_field.pat);
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue