Skip to main content

oxilean_parse/pattern/
patterncompiler_collect_ctors_from_pattern_group.rs

1//! # PatternCompiler - collect_ctors_from_pattern_group Methods
2//!
3//! This module contains method implementations for `PatternCompiler`.
4//!
5//! 🤖 Generated with [SplitRS](https://github.com/cool-japan/splitrs)
6
7use crate::Pattern;
8
9use super::patterncompiler_type::PatternCompiler;
10
11impl PatternCompiler {
12    /// Recursively collect constructors from a single pattern.
13    pub(super) fn collect_ctors_from_pattern(
14        &self,
15        pattern: &Pattern,
16        seen: &mut Vec<(String, usize)>,
17    ) {
18        match pattern {
19            Pattern::Ctor(name, args) => {
20                if !seen.iter().any(|(n, _)| n == name) {
21                    seen.push((name.clone(), args.len()));
22                }
23            }
24            Pattern::Or(left, right) => {
25                self.collect_ctors_from_pattern(&left.value, seen);
26                self.collect_ctors_from_pattern(&right.value, seen);
27            }
28            Pattern::Wild | Pattern::Var(_) | Pattern::Lit(_) => {}
29        }
30    }
31}