Skip to main content

luaur_vm/functions/
enumobj.rs

1use crate::enums::lua_type::lua_Type;
2use crate::functions::enumbuffer::enumbuffer;
3use crate::functions::enumclass::enumclass;
4use crate::functions::enumclosure::enumclosure;
5use crate::functions::enumobject::enumobject;
6use crate::functions::enumproto::enumproto;
7use crate::functions::enumstring::enumstring;
8use crate::functions::enumtable::enumtable;
9use crate::functions::enumthread::enumthread;
10use crate::functions::enumudata::enumudata;
11use crate::functions::enumupval::enumupval;
12use crate::macros::gco_2_buf::gco2buf;
13use crate::macros::gco_2_cl::gco2cl;
14use crate::macros::gco_2_class::gco2class;
15use crate::macros::gco_2_h::gco2h;
16use crate::macros::gco_2_object::gco2object;
17use crate::macros::gco_2_p::gco2p;
18use crate::macros::gco_2_th::gco2th;
19use crate::macros::gco_2_ts::gco2ts;
20use crate::macros::gco_2_u::gco2u;
21use crate::macros::gco_2_uv::gco2uv;
22use crate::records::enum_context::EnumContext;
23use crate::records::gc_object::GCObject;
24use luaur_common::macros::luau_assert::LUAU_ASSERT;
25
26#[allow(non_snake_case)]
27pub(crate) unsafe fn enumobj(ctx: *mut EnumContext, o: *mut GCObject) {
28    match (*o).gch.tt as i32 {
29        t if t == lua_Type::LUA_TSTRING as i32 => {
30            enumstring(ctx, gco2ts!(o) as *const _ as *mut _);
31        }
32        t if t == lua_Type::LUA_TTABLE as i32 => {
33            enumtable(ctx, gco2h!(o) as *const _ as *mut _);
34        }
35        t if t == lua_Type::LUA_TFUNCTION as i32 => {
36            enumclosure(ctx, gco2cl!(o) as *const _ as *mut _);
37        }
38        t if t == lua_Type::LUA_TUSERDATA as i32 => {
39            enumudata(ctx, gco2u!(o) as *const _ as *mut _);
40        }
41        t if t == lua_Type::LUA_TTHREAD as i32 => {
42            enumthread(ctx, gco2th!(o) as *const _ as *mut _);
43        }
44        t if t == lua_Type::LUA_TBUFFER as i32 => {
45            enumbuffer(ctx, gco2buf!(o) as *const _ as *mut _);
46        }
47        t if t == lua_Type::LUA_TCLASS as i32 => {
48            enumclass(ctx, gco2class!(o) as *const _ as *mut _);
49        }
50        t if t == lua_Type::LUA_TOBJECT as i32 => {
51            enumobject(ctx, gco2object!(o) as *const _ as *mut _);
52        }
53        t if t == lua_Type::LUA_TPROTO as i32 => {
54            enumproto(ctx, gco2p!(o) as *const _ as *mut _);
55        }
56        t if t == lua_Type::LUA_TUPVAL as i32 => {
57            enumupval(ctx, gco2uv!(o) as *const _ as *mut _);
58        }
59        _ => {
60            LUAU_ASSERT!(false);
61        }
62    }
63}