luaur_vm/functions/
luaopen_coroutine.rs1use crate::functions::coclose::coclose;
2use crate::functions::cocreate::cocreate;
3use crate::functions::coresumecont::coresumecont;
4use crate::functions::coresumey::coresumey;
5use crate::functions::corunning::corunning;
6use crate::functions::costatus::costatus;
7use crate::functions::cowrap::cowrap;
8use crate::functions::coyield::coyield;
9use crate::functions::coyieldable::coyieldable;
10use crate::functions::lua_l_register::lua_l_register;
11use crate::functions::lua_pushcclosurek::lua_pushcclosurek;
12use crate::functions::lua_setfield::lua_setfield;
13use crate::records::lua_l_reg::LuaLReg;
14use crate::type_aliases::lua_state::lua_State;
15use core::ffi::c_int;
16
17pub unsafe fn luaopen_coroutine(l: *mut lua_State) -> c_int {
18 lua_l_register(l, c"coroutine".as_ptr(), CO_FUNCS.0.as_ptr());
19
20 lua_pushcclosurek(
21 l,
22 Some(coresumey),
23 c"resume".as_ptr(),
24 0,
25 Some(coresumecont),
26 );
27 lua_setfield(l, -2, c"resume".as_ptr());
28
29 1
30}
31
32struct SyncLuaLReg([LuaLReg; 8]);
33unsafe impl Sync for SyncLuaLReg {}
34
35static CO_FUNCS: SyncLuaLReg = SyncLuaLReg([
36 LuaLReg {
37 name: c"create".as_ptr(),
38 func: Some(cocreate),
39 },
40 LuaLReg {
41 name: c"running".as_ptr(),
42 func: Some(corunning),
43 },
44 LuaLReg {
45 name: c"status".as_ptr(),
46 func: Some(costatus),
47 },
48 LuaLReg {
49 name: c"wrap".as_ptr(),
50 func: Some(cowrap),
51 },
52 LuaLReg {
53 name: c"yield".as_ptr(),
54 func: Some(coyield),
55 },
56 LuaLReg {
57 name: c"isyieldable".as_ptr(),
58 func: Some(coyieldable),
59 },
60 LuaLReg {
61 name: c"close".as_ptr(),
62 func: Some(coclose),
63 },
64 LuaLReg {
65 name: core::ptr::null(),
66 func: None,
67 },
68]);
69
70impl core::ops::Deref for SyncLuaLReg {
71 type Target = [LuaLReg; 8];
72 fn deref(&self) -> &Self::Target {
73 &self.0
74 }
75}