This repository has been archived on 2026-09-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
OxideJS/crates/oxide_vm/src/bindings/bind_date.rs
T
2026-08-05 21:46:47 +08:00

140 lines
6.8 KiB
Rust

use std::sync::Arc;
use crate::bindings::{apply_binding_table, bind_global_value, configure_native_constructor};
use oxide_kernel::kernel::{KernelCore, KernelSession};
use oxide_types::object::JsObject;
use oxide_types::value::JsValue;
/// 把 Date 构造器与原型方法绑定到 global。
pub fn bind_date(core: &Arc<KernelCore>, session: &KernelSession, global: &mut JsObject) {
let ctor_ptr = session.builtin_world().date_constructor.as_ptr() as *mut JsObject;
let ctor = unsafe { &mut *ctor_ptr };
let proto_ptr = session.builtin_world().date_proto.as_ptr() as *mut JsObject;
let proto = unsafe { &mut *proto_ptr };
configure_native_constructor(ctor, oxide_builtins::date::date_constructor::<crate::vm::Vm> as *const (), 7);
apply_binding_table(
session.builtin_world(),
ctor,
core,
&[
("now", oxide_builtins::date::date_now::<crate::vm::Vm> as *const (), 0),
("parse", oxide_builtins::date::date_parse::<crate::vm::Vm> as *const (), 1),
("UTC", oxide_builtins::date::date_utc::<crate::vm::Vm> as *const (), 7),
],
);
apply_binding_table(
session.builtin_world(),
proto,
core,
&[
("getTime", oxide_builtins::date::date_get_time::<crate::vm::Vm> as *const (), 0),
("getFullYear", oxide_builtins::date::date_get_full_year::<crate::vm::Vm> as *const (), 0),
("getMonth", oxide_builtins::date::date_get_month::<crate::vm::Vm> as *const (), 0),
("getDate", oxide_builtins::date::date_get_date::<crate::vm::Vm> as *const (), 0),
("getDay", oxide_builtins::date::date_get_day::<crate::vm::Vm> as *const (), 0),
("getHours", oxide_builtins::date::date_get_hours::<crate::vm::Vm> as *const (), 0),
("getMinutes", oxide_builtins::date::date_get_minutes::<crate::vm::Vm> as *const (), 0),
("getSeconds", oxide_builtins::date::date_get_seconds::<crate::vm::Vm> as *const (), 0),
(
"getMilliseconds",
oxide_builtins::date::date_get_milliseconds::<crate::vm::Vm> as *const (),
0,
),
(
"getUTCFullYear",
oxide_builtins::date::date_get_utc_full_year::<crate::vm::Vm> as *const (),
0,
),
("getUTCMonth", oxide_builtins::date::date_get_utc_month::<crate::vm::Vm> as *const (), 0),
("getUTCDate", oxide_builtins::date::date_get_utc_date::<crate::vm::Vm> as *const (), 0),
("getUTCDay", oxide_builtins::date::date_get_utc_day::<crate::vm::Vm> as *const (), 0),
("getUTCHours", oxide_builtins::date::date_get_utc_hours::<crate::vm::Vm> as *const (), 0),
(
"getUTCMinutes",
oxide_builtins::date::date_get_utc_minutes::<crate::vm::Vm> as *const (),
0,
),
(
"getUTCSeconds",
oxide_builtins::date::date_get_utc_seconds::<crate::vm::Vm> as *const (),
0,
),
(
"getUTCMilliseconds",
oxide_builtins::date::date_get_utc_milliseconds::<crate::vm::Vm> as *const (),
0,
),
(
"getTimezoneOffset",
oxide_builtins::date::date_get_timezone_offset::<crate::vm::Vm> as *const (),
0,
),
("setTime", oxide_builtins::date::date_set_time::<crate::vm::Vm> as *const (), 1),
("setFullYear", oxide_builtins::date::date_set_full_year::<crate::vm::Vm> as *const (), 3),
("setMonth", oxide_builtins::date::date_set_month::<crate::vm::Vm> as *const (), 2),
("setDate", oxide_builtins::date::date_set_date::<crate::vm::Vm> as *const (), 1),
("setHours", oxide_builtins::date::date_set_hours::<crate::vm::Vm> as *const (), 4),
("setMinutes", oxide_builtins::date::date_set_minutes::<crate::vm::Vm> as *const (), 3),
("setSeconds", oxide_builtins::date::date_set_seconds::<crate::vm::Vm> as *const (), 2),
(
"setMilliseconds",
oxide_builtins::date::date_set_milliseconds::<crate::vm::Vm> as *const (),
1,
),
(
"setUTCFullYear",
oxide_builtins::date::date_set_utc_full_year::<crate::vm::Vm> as *const (),
3,
),
("setUTCMonth", oxide_builtins::date::date_set_utc_month::<crate::vm::Vm> as *const (), 2),
("setUTCDate", oxide_builtins::date::date_set_utc_date::<crate::vm::Vm> as *const (), 1),
("setUTCHours", oxide_builtins::date::date_set_utc_hours::<crate::vm::Vm> as *const (), 4),
(
"setUTCMinutes",
oxide_builtins::date::date_set_utc_minutes::<crate::vm::Vm> as *const (),
3,
),
(
"setUTCSeconds",
oxide_builtins::date::date_set_utc_seconds::<crate::vm::Vm> as *const (),
2,
),
(
"setUTCMilliseconds",
oxide_builtins::date::date_set_utc_milliseconds::<crate::vm::Vm> as *const (),
1,
),
("getYear", oxide_builtins::date::date_get_year::<crate::vm::Vm> as *const (), 0),
("setYear", oxide_builtins::date::date_set_year::<crate::vm::Vm> as *const (), 1),
("toISOString", oxide_builtins::date::date_to_iso_string::<crate::vm::Vm> as *const (), 0),
("toJSON", oxide_builtins::date::date_to_json::<crate::vm::Vm> as *const (), 1),
("toString", oxide_builtins::date::date_to_string::<crate::vm::Vm> as *const (), 0),
("toDateString", oxide_builtins::date::date_to_date_string::<crate::vm::Vm> as *const (), 0),
("toTimeString", oxide_builtins::date::date_to_time_string::<crate::vm::Vm> as *const (), 0),
("toUTCString", oxide_builtins::date::date_to_utc_string::<crate::vm::Vm> as *const (), 0),
("toGMTString", oxide_builtins::date::date_to_gmt_string::<crate::vm::Vm> as *const (), 0),
(
"toLocaleDateString",
oxide_builtins::date::date_to_locale_date_string::<crate::vm::Vm> as *const (),
0,
),
(
"toLocaleString",
oxide_builtins::date::date_to_locale_string::<crate::vm::Vm> as *const (),
0,
),
(
"toLocaleTimeString",
oxide_builtins::date::date_to_locale_time_string::<crate::vm::Vm> as *const (),
0,
),
("valueOf", oxide_builtins::date::date_value_of::<crate::vm::Vm> as *const (), 0),
],
);
bind_global_value(core, global, "Date", JsValue::from_js_object(ctor_ptr));
}