veri_engine_lib/
termname.rs1use cranelift_isle as isle;
2use isle::sema::{Pattern, TermEnv, TypeEnv};
3
4pub fn pattern_contains_termname(
7 pat: &Pattern,
8 name: &str,
9 termenv: &TermEnv,
10 typeenv: &TypeEnv,
11) -> bool {
12 match pat {
13 Pattern::BindPattern(..)
14 | Pattern::Var(..)
15 | Pattern::ConstInt(..)
16 | Pattern::ConstBool(..)
17 | Pattern::ConstPrim(..)
18 | Pattern::Wildcard(..) => false,
19 Pattern::Term(_, termid, arg_patterns) => {
20 let term = &termenv.terms[termid.index()];
21 let term_name = &typeenv.syms[term.name.index()];
22 (term_name == name)
23 || arg_patterns
24 .iter()
25 .any(|p| pattern_contains_termname(p, name, termenv, typeenv))
26 }
27 Pattern::And(_, children) => children
28 .iter()
29 .any(|p| pattern_contains_termname(p, name, termenv, typeenv)),
30 }
31}