doughlang: "fix" semi elision, add "fully qualified" paths, add proper pattern prec parsing.
This actually gets some old code parsing!
This commit is contained in:
@@ -260,28 +260,24 @@ impl<A: Annotation> Match<A> for Pat {
|
||||
(Pat::Ignore, _) => false,
|
||||
(Pat::Name(pat), Pat::Name(expr)) => pat == expr,
|
||||
(Pat::Name(_), _) => false,
|
||||
(Pat::Path(_), Pat::Path(_)) => true,
|
||||
(Pat::Path(_), _) => false,
|
||||
(Pat::Struct(_, pat), Pat::Struct(_, expr)) => Match::recurse(sub, pat, expr),
|
||||
(Pat::Struct(..), _) => false,
|
||||
(Pat::TupStruct(_, pat), Pat::TupStruct(_, expr)) => Match::recurse(sub, pat, expr),
|
||||
(Pat::TupStruct(..), _) => false,
|
||||
(Pat::Rest(pat), Pat::Rest(expr)) => Match::recurse(sub, pat, expr),
|
||||
(Pat::Rest(_), _) => false,
|
||||
(Pat::Lit(pat), Pat::Lit(expr)) => pat == expr,
|
||||
(Pat::Lit(_), _) => false,
|
||||
(Pat::Tuple(pat), Pat::Tuple(expr)) => Match::recurse(sub, pat, expr),
|
||||
(Pat::Tuple(_), _) => false,
|
||||
(Pat::Slice(pat), Pat::Slice(expr)) => Match::recurse(sub, pat, expr),
|
||||
(Pat::Slice(_), _) => false,
|
||||
(Pat::Alt(pat), Pat::Alt(expr)) => Match::recurse(sub, pat, expr),
|
||||
(Pat::Alt(_), _) => false,
|
||||
(Pat::Typed(pat, _), Pat::Typed(expr, _)) => Match::recurse(sub, pat, expr),
|
||||
(Pat::Typed(..), _) => false,
|
||||
(Pat::Op(_, pat), Pat::Op(_, expr)) => Match::recurse(sub, pat, expr),
|
||||
(Pat::Op(..), _) => false,
|
||||
}
|
||||
}
|
||||
|
||||
fn apply(&mut self, sub: &Subst<A>) {
|
||||
match self {
|
||||
Pat::Ignore | Pat::Name(_) | Pat::Lit(_) => {}
|
||||
Pat::Ignore | Pat::Name(_) | Pat::Path(_) | Pat::Lit(_) => {}
|
||||
Pat::MetId(id) => {
|
||||
if let Some(expr) = sub.pat.get(id) {
|
||||
*self = expr.clone()
|
||||
@@ -289,14 +285,11 @@ impl<A: Annotation> Match<A> for Pat {
|
||||
}
|
||||
Pat::Struct(_, expr) => expr.apply(sub),
|
||||
Pat::TupStruct(_, expr) => expr.apply(sub),
|
||||
Pat::Rest(pat) => pat.apply(sub),
|
||||
Pat::Tuple(pats) => pats.apply(sub),
|
||||
Pat::Slice(pats) => pats.apply(sub),
|
||||
Pat::Alt(pats) => pats.apply(sub),
|
||||
Pat::Typed(pat, ty) => {
|
||||
pat.apply(sub);
|
||||
ty.apply(sub);
|
||||
}
|
||||
Pat::Op(_, pats) => pats.apply(sub),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user