Path: blob/main/cranelift/isle/veri/veri_engine/src/termname.rs
1693 views
use cranelift_isle as isle;1use isle::sema::{Pattern, TermEnv, TypeEnv};23/// Check whether the pattern (the LHS term) contains a given term name,4/// including in any subterms.5pub fn pattern_contains_termname(6pat: &Pattern,7name: &str,8termenv: &TermEnv,9typeenv: &TypeEnv,10) -> bool {11match pat {12Pattern::BindPattern(..)13| Pattern::Var(..)14| Pattern::ConstInt(..)15| Pattern::ConstBool(..)16| Pattern::ConstPrim(..)17| Pattern::Wildcard(..) => false,18Pattern::Term(_, termid, arg_patterns) => {19let term = &termenv.terms[termid.index()];20let term_name = &typeenv.syms[term.name.index()];21(term_name == name)22|| arg_patterns23.iter()24.any(|p| pattern_contains_termname(p, name, termenv, typeenv))25}26Pattern::And(_, children) => children27.iter()28.any(|p| pattern_contains_termname(p, name, termenv, typeenv)),29}30}313233