Skip to main content

oxilean_parse/pattern/
patterncompiler_max_pattern_depth_group.rs

1//! # PatternCompiler - max_pattern_depth_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    /// Check if pattern depth is reasonable (prevent stack overflow).
13    pub fn max_pattern_depth(&self, pattern: &Pattern) -> usize {
14        match pattern {
15            Pattern::Wild | Pattern::Var(_) | Pattern::Lit(_) => 0,
16            Pattern::Ctor(_, args) => {
17                1 + args
18                    .iter()
19                    .map(|a| self.max_pattern_depth(&a.value))
20                    .max()
21                    .unwrap_or(0)
22            }
23            Pattern::Or(left, right) => {
24                1 + std::cmp::max(
25                    self.max_pattern_depth(&left.value),
26                    self.max_pattern_depth(&right.value),
27                )
28            }
29        }
30    }
31}