mirror of
https://github.com/rust-lang/rust.git
synced 2024-12-12 08:36:03 +00:00
Lower Pat::Path
This commit is contained in:
parent
e50ce67631
commit
e711abc290
@ -99,6 +99,10 @@ impl<'a> PatCtxt<'a> {
|
||||
let kind = match self.body[pat] {
|
||||
hir_def::expr::Pat::Wild => PatKind::Wild,
|
||||
|
||||
hir_def::expr::Pat::Path(ref path) => {
|
||||
return self.lower_path(pat, path);
|
||||
}
|
||||
|
||||
hir_def::expr::Pat::Tuple { ref args, ellipsis } => {
|
||||
let arity = match *ty.kind(&Interner) {
|
||||
TyKind::Tuple(arity, _) => arity,
|
||||
@ -193,6 +197,20 @@ impl<'a> PatCtxt<'a> {
|
||||
// TODO: do we need PatKind::AscribeUserType ?
|
||||
kind
|
||||
}
|
||||
|
||||
fn lower_path(&mut self, pat: hir_def::expr::PatId, path: &hir_def::path::Path) -> Pat {
|
||||
let ty = &self.infer[pat];
|
||||
|
||||
let pat_from_kind = |kind| Pat { ty: ty.clone(), kind: Box::new(kind) };
|
||||
|
||||
match self.infer.variant_resolution_for_pat(pat) {
|
||||
Some(_) => pat_from_kind(self.lower_variant_or_leaf(pat, ty, Vec::new())),
|
||||
None => {
|
||||
self.errors.push(PatternError::Unimplemented);
|
||||
pat_from_kind(PatKind::Wild)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
Loading…
Reference in New Issue
Block a user