use crate::{own_var, pxs_addfunc, pxs_addmod, pxs_listget, pxs_listlen, pxs_newbool, pxs_newmod, pxs_objectget, shared::{PXS_PTR_NAME, PtrMagic, object::apply_ref_count_delete, utils::CStringSafe, var::{pxs_Var, pxs_VarT, pxs_VarType}}};
pub extern "C" fn pxs_mem_delete(args: pxs_VarT) -> pxs_VarT {
let len = pxs_listlen(args);
if len != 2 {
return pxs_Var::expected_n_args_ep(2, len as u32).into_raw();
}
let mut cstrgen = CStringSafe::new();
let obj_idx = own_var!(pxs_objectget(pxs_listget(args, 0), pxs_listget(args, 1), cstrgen.new_string(PXS_PTR_NAME)));
if !obj_idx.is_i64() {
return pxs_Var::incorrect_type_ep(pxs_VarType::pxs_Int64, obj_idx.tag).into_raw();
}
let idx = obj_idx.get_i64().unwrap();
apply_ref_count_delete(idx as i32);
pxs_newbool(true)
}
pub(crate) fn init() {
let mut cstrgen = CStringSafe::new();
let pxs_mem = pxs_newmod(cstrgen.new_string("pxs_mem"));
pxs_addfunc(pxs_mem, cstrgen.new_string("memdel"), pxs_mem_delete);
pxs_addmod(pxs_mem);
}