feat: 实现错误内置对象模型
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user