Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
bytecodealliance
GitHub Repository: bytecodealliance/wasmtime
Path: blob/main/cranelift/isle/veri/veri_engine/src/termname.rs
1693 views
1
use cranelift_isle as isle;
2
use isle::sema::{Pattern, TermEnv, TypeEnv};
3
4
/// Check whether the pattern (the LHS term) contains a given term name,
5
/// including in any subterms.
6
pub 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
}
32
33