use std::sync::Arc;
use crate::{js::{SmartJSValue, func::create_object_callback, get_js_state, quickjs}, shared::{PXS_PTR_NAME, object::{ObjectFlags, pxs_PixelObject}}};
pub(super) fn create_object(ctx: *mut quickjs::JSContext, idx: i32, source: Arc<pxs_PixelObject>) -> SmartJSValue {
let state = get_js_state();
let type_name = &source.type_name;
let object = SmartJSValue::new_object(ctx);
let mut defined_objects = state.defined_objects.borrow_mut();
if defined_objects.contains_key(type_name) {
let dobj = defined_objects.get(type_name).unwrap();
object.set_prop(PXS_PTR_NAME, &mut SmartJSValue::new_i32(ctx, idx));
object.set_proto(dobj);
return object;
}
for object_cbk in source.callbacks.iter() {
let module_cbk = &object_cbk.cbk;
let flags = object_cbk.flags;
let mut func = create_object_callback(ctx, module_cbk.idx, flags);
if flags & (ObjectFlags::IsProp as u8) != 0 {
object.add_getter_setter(&module_cbk.name, &func);
} else {
object.set_prop(&module_cbk.name, &mut func);
}
}
defined_objects.insert(type_name.clone(), object);
drop(defined_objects);
drop(state);
create_object(ctx, idx, source)
}