1
Fork 0

Add new pattern_complexity attribute to add possibility to limit and check recursion in pattern matching

This commit is contained in:
Guillaume Gomez 2024-03-02 22:48:41 +01:00
parent 5257aee7dd
commit be31b6b6cd
8 changed files with 56 additions and 6 deletions

View file

@ -40,6 +40,13 @@ pub fn get_recursion_limit(krate_attrs: &[Attribute], sess: &Session) -> Limit {
}
fn get_limit(krate_attrs: &[Attribute], sess: &Session, name: Symbol, default: usize) -> Limit {
match get_limit_size(krate_attrs, sess, name) {
Some(size) => Limit::new(size),
None => Limit::new(default),
}
}
pub fn get_limit_size(krate_attrs: &[Attribute], sess: &Session, name: Symbol) -> Option<usize> {
for attr in krate_attrs {
if !attr.has_name(name) {
continue;
@ -47,7 +54,7 @@ fn get_limit(krate_attrs: &[Attribute], sess: &Session, name: Symbol, default: u
if let Some(s) = attr.value_str() {
match s.as_str().parse() {
Ok(n) => return Limit::new(n),
Ok(n) => return Some(n),
Err(e) => {
let value_span = attr
.meta()
@ -69,5 +76,5 @@ fn get_limit(krate_attrs: &[Attribute], sess: &Session, name: Symbol, default: u
}
}
}
return Limit::new(default);
None
}