use std::collections::HashMap;
use crate::ffi::jit_kinds::*;
use crate::ffi::value_ffi::*;
#[inline(always)]
pub extern "C" fn jit_pattern_check_constructor(obj_bits: u64, mode: u64) -> u64 {
unsafe {
if !is_heap_kind(obj_bits, HK_JIT_OBJECT) {
return TAG_BOOL_FALSE;
}
let obj = unified_unbox::<HashMap<String, u64>>(obj_bits);
let (primary, fallback) = if mode == 0 {
("Ok", "value")
} else {
("Err", "error")
};
if obj.contains_key(primary) || obj.contains_key(fallback) {
TAG_BOOL_TRUE
} else {
TAG_BOOL_FALSE
}
}
}
#[inline(always)]
pub extern "C" fn jit_pattern_extract_constructor(obj_bits: u64, mode: u64) -> u64 {
unsafe {
if !is_heap_kind(obj_bits, HK_JIT_OBJECT) {
return TAG_NULL;
}
let obj = unified_unbox::<HashMap<String, u64>>(obj_bits);
let (primary, fallback) = if mode == 0 {
("Ok", "value")
} else {
("Err", "error")
};
if let Some(&val) = obj.get(primary) {
val
} else if let Some(&val) = obj.get(fallback) {
val
} else {
TAG_NULL
}
}
}