feat: 实现错误内置对象模型

This commit is contained in:
2026-06-07 10:20:14 +08:00
parent b9e889a8aa
commit b384c23741
5 changed files with 342 additions and 1 deletions
+27 -1
View File
@@ -8,7 +8,7 @@ use oxide_compiler::opcode::{self, OpCode};
use crate::coercion;
use crate::native::NativeFn;
use oxide_kernel::builtin::{ArrayMethods, ObjectMethods};
use oxide_kernel::builtin::{ArrayMethods, ErrorMethods, ObjectMethods};
use oxide_kernel::kernel::{KernelConfig, OxideKernel};
use oxide_kernel::prop_forge::PropTemplate;
use oxide_kernel::shape_forge::EMPTY_SHAPE_ID;
@@ -105,6 +105,32 @@ pub fn init_kernel_builtins(kernel: &Arc<OxideKernel>) {
let bump2 = bumpalo::Bump::new();
global.set_prop_expand(cur_count, arr_val, &bump2);
global.bump_generation();
let error_methods = ErrorMethods {
error: crate::builtins::error::error_constructor as *const (),
type_error: crate::builtins::error::type_error_constructor as *const (),
reference_error: crate::builtins::error::reference_error_constructor as *const (),
range_error: crate::builtins::error::range_error_constructor as *const (),
syntax_error: crate::builtins::error::syntax_error_constructor as *const (),
uri_error: crate::builtins::error::uri_error_constructor as *const (),
eval_error: crate::builtins::error::eval_error_constructor as *const (),
};
kernel.builtin_world().bind_error_methods(
&error_methods,
kernel.string_forge().as_ref(),
kernel.shape_forge().as_ref(),
);
let si_err = kernel.string_forge().intern("Error").0;
let err_shape = kernel.shape_forge().make_shape(global.shape_id(), si_err);
let err_val =
JsValue::from_js_object(kernel.builtin_world().error_constructor.as_ptr() as *mut JsObject);
let cur_count = global.prop_count();
global.set_shape_id(err_shape);
global.set_prop_count(cur_count + 1);
let bump3 = bumpalo::Bump::new();
global.set_prop_expand(cur_count, err_val, &bump3);
global.bump_generation();
}
impl Vm {