use std::sync::Arc; use oxide_kernel::bind_method; use oxide_kernel::kernel::OxideKernel; use oxide_types::object::JsObject; use oxide_types::value::JsValue; pub fn bind_date(kernel: &Arc, global: &mut JsObject) { let ctor_ptr = kernel.builtin_world().date_constructor.as_ptr() as *mut JsObject; let ctor = unsafe { &mut *ctor_ptr }; let proto_ptr = kernel.builtin_world().date_proto.as_ptr() as *mut JsObject; let proto = unsafe { &mut *proto_ptr }; let sf = kernel.string_forge().as_ref(); let sh = kernel.shape_forge().as_ref(); ctor.set_native_fn(Some(crate::builtins::date::date_constructor as *const ())); ctor.set_native_arg_count(7); bind_method!( kernel.builtin_world(), ctor, sf, sh, "now", crate::builtins::date::date_now, 0 ); bind_method!( kernel.builtin_world(), ctor, sf, sh, "parse", crate::builtins::date::date_parse, 1 ); bind_method!( kernel.builtin_world(), ctor, sf, sh, "UTC", crate::builtins::date::date_utc, 7 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getTime", crate::builtins::date::date_get_time, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getFullYear", crate::builtins::date::date_get_full_year, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getMonth", crate::builtins::date::date_get_month, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getDate", crate::builtins::date::date_get_date, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getDay", crate::builtins::date::date_get_day, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getHours", crate::builtins::date::date_get_hours, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getMinutes", crate::builtins::date::date_get_minutes, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getSeconds", crate::builtins::date::date_get_seconds, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getMilliseconds", crate::builtins::date::date_get_milliseconds, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getUTCFullYear", crate::builtins::date::date_get_utc_full_year, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getUTCMonth", crate::builtins::date::date_get_utc_month, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getUTCDate", crate::builtins::date::date_get_utc_date, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getUTCDay", crate::builtins::date::date_get_utc_day, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getUTCHours", crate::builtins::date::date_get_utc_hours, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getUTCMinutes", crate::builtins::date::date_get_utc_minutes, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getUTCSeconds", crate::builtins::date::date_get_utc_seconds, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getUTCMilliseconds", crate::builtins::date::date_get_utc_milliseconds, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "getTimezoneOffset", crate::builtins::date::date_get_timezone_offset, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "setTime", crate::builtins::date::date_set_time, 1 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "setFullYear", crate::builtins::date::date_set_full_year, 3 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "setMonth", crate::builtins::date::date_set_month, 2 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "setDate", crate::builtins::date::date_set_date, 1 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "setHours", crate::builtins::date::date_set_hours, 4 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "setMinutes", crate::builtins::date::date_set_minutes, 3 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "setSeconds", crate::builtins::date::date_set_seconds, 2 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "setMilliseconds", crate::builtins::date::date_set_milliseconds, 1 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "toISOString", crate::builtins::date::date_to_iso_string, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "toJSON", crate::builtins::date::date_to_json, 1 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "toString", crate::builtins::date::date_to_string, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "toDateString", crate::builtins::date::date_to_date_string, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "toTimeString", crate::builtins::date::date_to_time_string, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "toUTCString", crate::builtins::date::date_to_utc_string, 0 ); bind_method!( kernel.builtin_world(), proto, sf, sh, "valueOf", crate::builtins::date::date_value_of, 0 ); let si_d = kernel.string_forge().intern("Date").0; let d_shape = kernel.shape_forge().make_shape(global.shape_id(), si_d); let d_val = JsValue::from_js_object(ctor_ptr); global.set_shape_id(d_shape); global.ensure_hash_props().push(Box::new(d_val)); global.bump_generation(); }