oxilean_parse/pattern/
patterncompiler_patterns_equivalent_group.rs1use crate::Pattern;
8
9use super::patterncompiler_type::PatternCompiler;
10
11impl PatternCompiler {
12 pub fn patterns_equivalent(&self, p1: &Pattern, p2: &Pattern) -> bool {
14 match (p1, p2) {
15 (Pattern::Wild, Pattern::Wild) => true,
16 (Pattern::Var(v1), Pattern::Var(v2)) => v1 == v2,
17 (Pattern::Lit(l1), Pattern::Lit(l2)) => l1 == l2,
18 (Pattern::Ctor(n1, a1), Pattern::Ctor(n2, a2)) => {
19 n1 == n2
20 && a1.len() == a2.len()
21 && a1
22 .iter()
23 .zip(a2.iter())
24 .all(|(x, y)| self.patterns_equivalent(&x.value, &y.value))
25 }
26 (Pattern::Or(l1, r1), Pattern::Or(l2, r2)) => {
27 self.patterns_equivalent(&l1.value, &l2.value)
28 && self.patterns_equivalent(&r1.value, &r2.value)
29 }
30 _ => false,
31 }
32 }
33}