#[cfg(all(feature = "jit", any(target_arch = "x86_64", target_arch = "aarch64")))]
pub mod calling_convention;
#[cfg(all(feature = "jit", target_arch = "x86_64"))]
mod codegen;
#[cfg(all(feature = "jit", target_arch = "x86_64"))]
mod x86_64;
#[cfg(all(feature = "jit", target_arch = "aarch64"))]
mod codegen_aarch64;
#[cfg(all(feature = "jit", target_arch = "aarch64"))]
mod aarch64;
#[cfg(all(feature = "jit", target_arch = "x86_64"))]
pub use codegen::{CompiledRegex, JitCompiler, MaterializedDfa, MaterializedState};
#[cfg(all(feature = "jit", target_arch = "aarch64"))]
pub use codegen_aarch64::{CompiledRegex, JitCompiler, MaterializedDfa, MaterializedState};
#[cfg(all(feature = "jit", any(target_arch = "x86_64", target_arch = "aarch64")))]
pub use crate::nfa::tagged::liveness::{
analyze_liveness, CaptureBitSet, NfaLiveness, StateLiveness,
};
#[cfg(all(feature = "jit", any(target_arch = "x86_64", target_arch = "aarch64")))]
pub use crate::nfa::tagged::jit::{compile_tagged_nfa, TaggedNfaJit};
#[cfg(all(feature = "jit", any(target_arch = "x86_64", target_arch = "aarch64")))]
pub use crate::vm::backtracking::jit::{compile_backtracking, BacktrackingJit};
#[cfg(all(feature = "jit", any(target_arch = "x86_64", target_arch = "aarch64")))]
pub use crate::vm::shift_or::jit::JitShiftOr;
#[cfg(all(feature = "jit", any(target_arch = "x86_64", target_arch = "aarch64")))]
use crate::dfa::LazyDfa;
#[cfg(all(feature = "jit", any(target_arch = "x86_64", target_arch = "aarch64")))]
use crate::error::Result;
#[cfg(all(feature = "jit", any(target_arch = "x86_64", target_arch = "aarch64")))]
pub fn compile_dfa(dfa: &mut LazyDfa) -> Result<CompiledRegex> {
let compiler = JitCompiler::new();
compiler.compile_dfa(dfa)
}
pub const fn is_available() -> bool {
cfg!(all(
feature = "jit",
any(target_arch = "x86_64", target_arch = "aarch64")
))
}
pub const fn target_arch() -> Option<&'static str> {
if cfg!(all(feature = "jit", target_arch = "x86_64")) {
Some("x86_64")
} else if cfg!(all(feature = "jit", target_arch = "aarch64")) {
Some("aarch64")
} else {
None
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_availability() {
let available = is_available();
#[cfg(all(feature = "jit", any(target_arch = "x86_64", target_arch = "aarch64")))]
assert!(available);
#[cfg(not(all(feature = "jit", any(target_arch = "x86_64", target_arch = "aarch64"))))]
assert!(!available);
}
#[test]
fn test_target_arch() {
let arch = target_arch();
#[cfg(all(feature = "jit", target_arch = "x86_64"))]
assert_eq!(arch, Some("x86_64"));
#[cfg(all(feature = "jit", target_arch = "aarch64"))]
assert_eq!(arch, Some("aarch64"));
#[cfg(not(all(feature = "jit", any(target_arch = "x86_64", target_arch = "aarch64"))))]
assert_eq!(arch, None);
}
}