Skip to main content

oxilean_parse/pattern/
patterncompiler_count_bindings_group.rs

1//! # PatternCompiler - count_bindings_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    /// Count the number of variable bindings in a pattern.
13    #[allow(dead_code)]
14    pub fn count_bindings(&self, pattern: &Pattern) -> usize {
15        match pattern {
16            Pattern::Wild => 0,
17            Pattern::Var(_) => 1,
18            Pattern::Ctor(_, args) => args.iter().map(|a| self.count_bindings(&a.value)).sum(),
19            Pattern::Lit(_) => 0,
20            Pattern::Or(left, right) => {
21                let left_count = self.count_bindings(&left.value);
22                let right_count = self.count_bindings(&right.value);
23                left_count.max(right_count)
24            }
25        }
26    }
27}