mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-24 18:51:13 +08:00
feat: 实现 console 全局对象 (log/warn/error/info/debug/trace)
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
use std::sync::Arc;
|
||||
|
||||
use crate::bindings::bind_global_value;
|
||||
use oxide_kernel::kernel::{KernelCore, KernelSession};
|
||||
use oxide_types::object::JsObject;
|
||||
use oxide_types::value::JsValue;
|
||||
|
||||
/// 把 Console 单例对象及其方法(log/warn/error/info/debug/trace)绑定到 global。
|
||||
pub fn bind_console(core: &Arc<KernelCore>, session: &KernelSession, global: &mut JsObject) {
|
||||
let console_ptr = session.builtin_world().console_object.as_ptr() as *mut JsObject;
|
||||
let console = unsafe { &mut *console_ptr };
|
||||
|
||||
let bw = session.builtin_world();
|
||||
let sf = core.perm_interner().as_ref();
|
||||
let sh = core.shape_forge().as_ref();
|
||||
|
||||
oxide_kernel::bind_methods!(
|
||||
bw,
|
||||
console,
|
||||
sf,
|
||||
sh,
|
||||
("log", oxide_builtins::console::log::<crate::vm::Vm>, 1),
|
||||
("warn", oxide_builtins::console::warn::<crate::vm::Vm>, 1),
|
||||
("error", oxide_builtins::console::error::<crate::vm::Vm>, 1),
|
||||
("info", oxide_builtins::console::info::<crate::vm::Vm>, 1),
|
||||
("debug", oxide_builtins::console::debug::<crate::vm::Vm>, 1),
|
||||
("trace", oxide_builtins::console::trace::<crate::vm::Vm>, 1),
|
||||
);
|
||||
|
||||
bind_global_value(
|
||||
core,
|
||||
global,
|
||||
"console",
|
||||
JsValue::from_js_object(session.builtin_world().console_object.as_ptr() as *mut JsObject),
|
||||
);
|
||||
}
|
||||
@@ -52,6 +52,8 @@ pub mod bind_symbol;
|
||||
pub mod bind_temporal;
|
||||
/// 各 TypedArray 构造器与共享原型的 native 方法绑定。
|
||||
pub mod bind_typed_array;
|
||||
/// Console 单例对象及其方法绑定。
|
||||
pub mod bind_console;
|
||||
|
||||
use std::sync::Arc;
|
||||
|
||||
@@ -1064,6 +1066,9 @@ pub fn rebind_dirty_builtins(core: &Arc<KernelCore>, session: &mut KernelSession
|
||||
if dirty.map_or(true, |d| d.stubs) {
|
||||
bind_bigint::bind_bigint(core, session, global);
|
||||
}
|
||||
if dirty.map_or(true, |d| d.console) {
|
||||
bind_console::bind_console(core, session, global);
|
||||
}
|
||||
}
|
||||
|
||||
/// 完整初始化一个 session 的内置对象(全量绑定 + `globalThis` + 快照记录)。
|
||||
@@ -1077,6 +1082,7 @@ pub fn init_kernel_builtins(core: &Arc<KernelCore>, session: &mut KernelSession)
|
||||
bind_reflect::bind_reflect(core, session, global);
|
||||
bind_global::bind_global(core, session, global);
|
||||
bind_global_value(core, global, "globalThis", JsValue::from_js_object(global_ptr));
|
||||
bind_console::bind_console(core, session, global);
|
||||
crate::test262_host::bind_test262_host(core, session, global);
|
||||
session.record_snapshot();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user