Skip to main content

luaur_vm/functions/
enumgco.rs

1use crate::functions::enumobj::enumobj;
2use crate::records::enum_context::EnumContext;
3use crate::records::gc_object::GCObject;
4use crate::records::lua_page::lua_Page;
5use core::ffi::c_void;
6
7#[allow(non_snake_case)]
8pub(crate) unsafe fn enumgco(
9    context: *mut c_void,
10    _page: *mut lua_Page,
11    gco: *mut GCObject,
12) -> bool {
13    let enum_ctx = context as *mut EnumContext;
14
15    // The dependency card for enumobj shows a 0-argument stub `pub fn enumobj();`.
16    // However, the C++ source and the logic of this function require passing (enum_ctx, gco).
17    // To resolve the compilation error caused by the stub's incorrect signature while
18    // maintaining the logic, we cast the function pointer to the correct signature.
19    let enumobj_ptr = enumobj as *const core::ffi::c_void;
20    let enumobj_real: unsafe fn(*mut EnumContext, *mut GCObject) =
21        core::mem::transmute(enumobj_ptr);
22
23    enumobj_real(enum_ctx, gco);
24
25    false
26}