mirror of
https://github.com/pjh456/OxideJS.git
synced 2026-10-23 18:21:13 +08:00
refactor: 消息值跨 realm 传递改经 VmHost 能力方法
This commit is contained in:
Generated
+19
-19
@@ -1160,7 +1160,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_builtins"
|
name = "oxide_builtins"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"fast-float",
|
"fast-float",
|
||||||
@@ -1185,7 +1185,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_bytecode"
|
name = "oxide_bytecode"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num-bigint",
|
"num-bigint",
|
||||||
"oxide_log",
|
"oxide_log",
|
||||||
@@ -1193,7 +1193,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_cfg"
|
name = "oxide_cfg"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
"oxide_emit",
|
"oxide_emit",
|
||||||
@@ -1204,7 +1204,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_cli"
|
name = "oxide_cli"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ansi_term",
|
"ansi_term",
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
@@ -1226,7 +1226,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_code_cache"
|
name = "oxide_code_cache"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"lru",
|
"lru",
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
@@ -1235,7 +1235,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_compiler"
|
name = "oxide_compiler"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
"oxide_cfg",
|
"oxide_cfg",
|
||||||
@@ -1255,7 +1255,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_dce"
|
name = "oxide_dce"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
"oxide_cfg",
|
"oxide_cfg",
|
||||||
@@ -1269,7 +1269,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_emit"
|
name = "oxide_emit"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num-bigint",
|
"num-bigint",
|
||||||
"oxc_allocator",
|
"oxc_allocator",
|
||||||
@@ -1284,7 +1284,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_engine"
|
name = "oxide_engine"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
"oxide_compiler",
|
"oxide_compiler",
|
||||||
@@ -1296,7 +1296,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_ir"
|
name = "oxide_ir"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
"oxide_log",
|
"oxide_log",
|
||||||
@@ -1305,7 +1305,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_kernel"
|
name = "oxide_kernel"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"dashmap",
|
"dashmap",
|
||||||
@@ -1319,7 +1319,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_liveness"
|
name = "oxide_liveness"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
"oxide_cfg",
|
"oxide_cfg",
|
||||||
@@ -1331,7 +1331,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_log"
|
name = "oxide_log"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"tracing",
|
"tracing",
|
||||||
"tracing-appender",
|
"tracing-appender",
|
||||||
@@ -1340,7 +1340,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_parser"
|
name = "oxide_parser"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxc_allocator",
|
"oxc_allocator",
|
||||||
"oxc_ast",
|
"oxc_ast",
|
||||||
@@ -1355,7 +1355,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_regalloc"
|
name = "oxide_regalloc"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
"oxide_cfg",
|
"oxide_cfg",
|
||||||
@@ -1371,7 +1371,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_runtime_api"
|
name = "oxide_runtime_api"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num-bigint",
|
"num-bigint",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
@@ -1384,7 +1384,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_test262"
|
name = "oxide_test262"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"oxide_bytecode",
|
"oxide_bytecode",
|
||||||
"oxide_compiler",
|
"oxide_compiler",
|
||||||
@@ -1402,7 +1402,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_types"
|
name = "oxide_types"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"dashmap",
|
"dashmap",
|
||||||
@@ -1415,7 +1415,7 @@ dependencies = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "oxide_vm"
|
name = "oxide_vm"
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bumpalo",
|
"bumpalo",
|
||||||
"chrono",
|
"chrono",
|
||||||
|
|||||||
+1
-1
@@ -23,7 +23,7 @@ members = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
[workspace.package]
|
[workspace.package]
|
||||||
version = "0.8.76"
|
version = "0.8.77"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
rust-version = "1.80"
|
rust-version = "1.80"
|
||||||
|
|||||||
@@ -20,12 +20,11 @@ use std::collections::HashSet;
|
|||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use oxide_kernel::shape_forge::EMPTY_SHAPE_ID;
|
use oxide_kernel::shape_forge::EMPTY_SHAPE_ID;
|
||||||
use oxide_types::mem::P;
|
|
||||||
use oxide_types::object::{JsObject, NativeFnPtr, PropAttributes};
|
use oxide_types::object::{JsObject, NativeFnPtr, PropAttributes};
|
||||||
use oxide_types::private_key::{decode_symbol_key, int_key_value, is_int_key, WELL_KNOWN_SYMBOL_COUNT};
|
use oxide_types::private_key::{decode_symbol_key, int_key_value, is_int_key, WELL_KNOWN_SYMBOL_COUNT};
|
||||||
use oxide_types::value::JsValue;
|
use oxide_types::value::JsValue;
|
||||||
|
|
||||||
use oxide_runtime_api::{to_string_full, VmHost};
|
use oxide_runtime_api::{to_string_full, ProtoKind, VmHost};
|
||||||
|
|
||||||
use crate::array::create_new_array;
|
use crate::array::create_new_array;
|
||||||
use crate::map::MapInner;
|
use crate::map::MapInner;
|
||||||
@@ -330,7 +329,7 @@ fn detach_error<H: VmHost>(
|
|||||||
vm: &mut H, state: &mut DetachState, src: &JsObject, transfer: &HashSet<*const JsObject>,
|
vm: &mut H, state: &mut DetachState, src: &JsObject, transfer: &HashSet<*const JsObject>,
|
||||||
) -> Result<MessageValue, JsValue> {
|
) -> Result<MessageValue, JsValue> {
|
||||||
let src_val = JsValue::from_js_object(src as *const JsObject as *mut JsObject);
|
let src_val = JsValue::from_js_object(src as *const JsObject as *mut JsObject);
|
||||||
let si_name = vm.kernel_core().perm_interner().intern("name").0;
|
let si_name = vm.perm_intern("name");
|
||||||
let name_val = match vm.ordinary_get(src, si_name, src_val) {
|
let name_val = match vm.ordinary_get(src, si_name, src_val) {
|
||||||
Ok(v) => v,
|
Ok(v) => v,
|
||||||
Err(e) => {
|
Err(e) => {
|
||||||
@@ -341,7 +340,7 @@ fn detach_error<H: VmHost>(
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
let name = vm.lookup_str(name_val).unwrap_or_else(|| "Error".to_string());
|
let name = vm.lookup_str(name_val).unwrap_or_else(|| "Error".to_string());
|
||||||
let si_msg = vm.kernel_core().perm_interner().intern("message").0;
|
let si_msg = vm.perm_intern("message");
|
||||||
let message = if let Some(store) = vm.get_own_property_slot(src, si_msg) {
|
let message = if let Some(store) = vm.get_own_property_slot(src, si_msg) {
|
||||||
let is_accessor = src.prop_meta_at(store).is_some_and(|m| m.is_accessor);
|
let is_accessor = src.prop_meta_at(store).is_some_and(|m| m.is_accessor);
|
||||||
if !is_accessor {
|
if !is_accessor {
|
||||||
@@ -353,7 +352,7 @@ fn detach_error<H: VmHost>(
|
|||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
};
|
};
|
||||||
let si_cause = vm.kernel_core().perm_interner().intern("cause").0;
|
let si_cause = vm.perm_intern("cause");
|
||||||
let cause = if let Some(store) = vm.get_own_property_slot(src, si_cause) {
|
let cause = if let Some(store) = vm.get_own_property_slot(src, si_cause) {
|
||||||
let val = read_own_value(vm, src, src_val, si_cause, store)?;
|
let val = read_own_value(vm, src, src_val, si_cause, store)?;
|
||||||
Some(Box::new(detach_value(vm, state, val, transfer)?))
|
Some(Box::new(detach_value(vm, state, val, transfer)?))
|
||||||
@@ -430,7 +429,7 @@ fn key_si_to_message_value<H: VmHost>(vm: &mut H, si: u32) -> Result<MessageValu
|
|||||||
let text = if is_int_key(si) {
|
let text = if is_int_key(si) {
|
||||||
int_key_value(si).to_string()
|
int_key_value(si).to_string()
|
||||||
} else {
|
} else {
|
||||||
vm.kernel_core().perm_interner().lookup(si).unwrap_or_default().to_string()
|
vm.perm_lookup(si).unwrap_or_default().to_string()
|
||||||
};
|
};
|
||||||
let units = text.encode_utf16().collect::<Vec<u16>>();
|
let units = text.encode_utf16().collect::<Vec<u16>>();
|
||||||
Ok(MessageValue::String(units.into_boxed_slice()))
|
Ok(MessageValue::String(units.into_boxed_slice()))
|
||||||
@@ -497,7 +496,7 @@ fn rehydrate_value<H: VmHost>(vm: &mut H, value: &MessageValue) -> JsValue {
|
|||||||
JsValue::from_js_object(ptr)
|
JsValue::from_js_object(ptr)
|
||||||
}
|
}
|
||||||
MessageValue::Object(props) => {
|
MessageValue::Object(props) => {
|
||||||
let proto = vm.session().builtin_world().object_proto.as_ptr() as *mut JsObject;
|
let proto = vm.builtin_proto(ProtoKind::ObjectProto);
|
||||||
let ptr = vm.alloc_object(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::from_js_object(proto)));
|
let ptr = vm.alloc_object(JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::from_js_object(proto)));
|
||||||
// SAFETY: ptr 是本函数新分配的对象,存活且本段无别名。
|
// SAFETY: ptr 是本函数新分配的对象,存活且本段无别名。
|
||||||
let obj = unsafe { &mut *ptr };
|
let obj = unsafe { &mut *ptr };
|
||||||
@@ -510,7 +509,7 @@ fn rehydrate_value<H: VmHost>(vm: &mut H, value: &MessageValue) -> JsValue {
|
|||||||
JsValue::from_js_object(ptr)
|
JsValue::from_js_object(ptr)
|
||||||
}
|
}
|
||||||
MessageValue::Map(entries) => {
|
MessageValue::Map(entries) => {
|
||||||
let map_proto = vm.session().builtin_world().map_proto.as_ptr() as *mut JsObject;
|
let map_proto = vm.builtin_proto(ProtoKind::MapProto);
|
||||||
let mut obj = JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::from_js_object(map_proto));
|
let mut obj = JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::from_js_object(map_proto));
|
||||||
obj.set_map(true);
|
obj.set_map(true);
|
||||||
let inner = Box::into_raw(Box::new(MapInner::new()));
|
let inner = Box::into_raw(Box::new(MapInner::new()));
|
||||||
@@ -527,7 +526,7 @@ fn rehydrate_value<H: VmHost>(vm: &mut H, value: &MessageValue) -> JsValue {
|
|||||||
JsValue::from_js_object(ptr)
|
JsValue::from_js_object(ptr)
|
||||||
}
|
}
|
||||||
MessageValue::Set(elems) => {
|
MessageValue::Set(elems) => {
|
||||||
let set_proto = vm.session().builtin_world().set_proto.as_ptr() as *mut JsObject;
|
let set_proto = vm.builtin_proto(ProtoKind::SetProto);
|
||||||
let mut obj = JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::from_js_object(set_proto));
|
let mut obj = JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::from_js_object(set_proto));
|
||||||
obj.set_set(true);
|
obj.set_set(true);
|
||||||
let inner = Box::into_raw(Box::new(SetInner::new()));
|
let inner = Box::into_raw(Box::new(SetInner::new()));
|
||||||
@@ -543,7 +542,7 @@ fn rehydrate_value<H: VmHost>(vm: &mut H, value: &MessageValue) -> JsValue {
|
|||||||
JsValue::from_js_object(ptr)
|
JsValue::from_js_object(ptr)
|
||||||
}
|
}
|
||||||
MessageValue::Date(ts) => {
|
MessageValue::Date(ts) => {
|
||||||
let proto = vm.session().builtin_world().date_proto.as_ptr() as *mut JsObject;
|
let proto = vm.builtin_proto(ProtoKind::DateProto);
|
||||||
let mut obj = JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::from_js_object(proto));
|
let mut obj = JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::from_js_object(proto));
|
||||||
obj.type_tag = JsObject::OBJ_TYPE_DATE;
|
obj.type_tag = JsObject::OBJ_TYPE_DATE;
|
||||||
obj.set_prop_at(0, JsValue::float(*ts));
|
obj.set_prop_at(0, JsValue::float(*ts));
|
||||||
@@ -575,7 +574,7 @@ fn rehydrate_array_buffer<H: VmHost>(vm: &mut H, bytes: &Arc<Vec<u8>>) -> JsValu
|
|||||||
|
|
||||||
/// RegExp 臂 rehydrate:按源与标志重编译,建 RegExp 对象(lastIndex 初始 0)。
|
/// RegExp 臂 rehydrate:按源与标志重编译,建 RegExp 对象(lastIndex 初始 0)。
|
||||||
fn rehydrate_regexp<H: VmHost>(vm: &mut H, source: &str, flags: &str) -> JsValue {
|
fn rehydrate_regexp<H: VmHost>(vm: &mut H, source: &str, flags: &str) -> JsValue {
|
||||||
let proto = vm.session().builtin_world().regexp_proto.as_ptr() as *mut JsObject;
|
let proto = vm.builtin_proto(ProtoKind::RegExpProto);
|
||||||
let mut obj = JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::from_js_object(proto));
|
let mut obj = JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::from_js_object(proto));
|
||||||
let source_val = vm.new_string(source);
|
let source_val = vm.new_string(source);
|
||||||
let flags_val = vm.new_string(flags);
|
let flags_val = vm.new_string(flags);
|
||||||
@@ -589,7 +588,7 @@ fn rehydrate_regexp<H: VmHost>(vm: &mut H, source: &str, flags: &str) -> JsValue
|
|||||||
obj.type_tag = JsObject::OBJ_TYPE_REGEXP;
|
obj.type_tag = JsObject::OBJ_TYPE_REGEXP;
|
||||||
obj.set_regexp_source(source_val);
|
obj.set_regexp_source(source_val);
|
||||||
obj.set_regexp_flags(flags_val);
|
obj.set_regexp_flags(flags_val);
|
||||||
let si_lastindex = vm.kernel_core().perm_interner().intern("lastIndex").0;
|
let si_lastindex = vm.perm_intern("lastIndex");
|
||||||
let _ = vm.define_data_property(&mut obj, si_lastindex, JsValue::int(0), PropAttributes::new(true, false, false));
|
let _ = vm.define_data_property(&mut obj, si_lastindex, JsValue::int(0), PropAttributes::new(true, false, false));
|
||||||
let ptr = vm.alloc_object(obj);
|
let ptr = vm.alloc_object(obj);
|
||||||
JsValue::from_js_object(ptr)
|
JsValue::from_js_object(ptr)
|
||||||
@@ -601,13 +600,13 @@ fn rehydrate_error<H: VmHost>(
|
|||||||
vm: &mut H, name: &str, message: &Option<String>, cause: &Option<Box<MessageValue>>,
|
vm: &mut H, name: &str, message: &Option<String>, cause: &Option<Box<MessageValue>>,
|
||||||
) -> JsValue {
|
) -> JsValue {
|
||||||
let proto = match name {
|
let proto = match name {
|
||||||
"EvalError" => P::as_ptr(&vm.session().builtin_world().eval_error_proto) as *mut JsObject,
|
"EvalError" => vm.builtin_proto(ProtoKind::EvalErrorProto),
|
||||||
"RangeError" => P::as_ptr(&vm.session().builtin_world().range_error_proto) as *mut JsObject,
|
"RangeError" => vm.builtin_proto(ProtoKind::RangeErrorProto),
|
||||||
"ReferenceError" => P::as_ptr(&vm.session().builtin_world().reference_error_proto) as *mut JsObject,
|
"ReferenceError" => vm.builtin_proto(ProtoKind::ReferenceErrorProto),
|
||||||
"SyntaxError" => P::as_ptr(&vm.session().builtin_world().syntax_error_proto) as *mut JsObject,
|
"SyntaxError" => vm.builtin_proto(ProtoKind::SyntaxErrorProto),
|
||||||
"TypeError" => P::as_ptr(&vm.session().builtin_world().type_error_proto) as *mut JsObject,
|
"TypeError" => vm.builtin_proto(ProtoKind::TypeErrorProto),
|
||||||
"URIError" => P::as_ptr(&vm.session().builtin_world().uri_error_proto) as *mut JsObject,
|
"URIError" => vm.builtin_proto(ProtoKind::UriErrorProto),
|
||||||
_ => P::as_ptr(&vm.session().builtin_world().error_proto) as *mut JsObject,
|
_ => vm.builtin_proto(ProtoKind::ErrorProto),
|
||||||
};
|
};
|
||||||
let mut obj = JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::from_js_object(proto));
|
let mut obj = JsObject::new_empty(EMPTY_SHAPE_ID, JsValue::from_js_object(proto));
|
||||||
obj.type_tag = JsObject::OBJ_TYPE_ERROR;
|
obj.type_tag = JsObject::OBJ_TYPE_ERROR;
|
||||||
@@ -615,12 +614,12 @@ fn rehydrate_error<H: VmHost>(
|
|||||||
// SAFETY: ptr 是本函数新分配的 Error 对象,存活且本段无别名。
|
// SAFETY: ptr 是本函数新分配的 Error 对象,存活且本段无别名。
|
||||||
let err = unsafe { &mut *ptr };
|
let err = unsafe { &mut *ptr };
|
||||||
if let Some(msg) = message {
|
if let Some(msg) = message {
|
||||||
let si_msg = vm.kernel_core().perm_interner().intern("message").0;
|
let si_msg = vm.perm_intern("message");
|
||||||
let msg_val = vm.new_string(msg);
|
let msg_val = vm.new_string(msg);
|
||||||
let _ = vm.define_data_property(err, si_msg, msg_val, PropAttributes::new(true, false, true));
|
let _ = vm.define_data_property(err, si_msg, msg_val, PropAttributes::new(true, false, true));
|
||||||
}
|
}
|
||||||
if let Some(cause_val) = cause {
|
if let Some(cause_val) = cause {
|
||||||
let si_cause = vm.kernel_core().perm_interner().intern("cause").0;
|
let si_cause = vm.perm_intern("cause");
|
||||||
let cause_js = rehydrate_value(vm, cause_val);
|
let cause_js = rehydrate_value(vm, cause_val);
|
||||||
let _ = vm.define_data_property(err, si_cause, cause_js, PropAttributes::DEFAULT_DATA);
|
let _ = vm.define_data_property(err, si_cause, cause_js, PropAttributes::DEFAULT_DATA);
|
||||||
}
|
}
|
||||||
@@ -672,7 +671,7 @@ mod tests {
|
|||||||
|
|
||||||
/// 读对象自身属性值(按名称),无则 undefined。
|
/// 读对象自身属性值(按名称),无则 undefined。
|
||||||
fn obj_prop(vm: &Vm, obj: &JsObject, name: &str) -> JsValue {
|
fn obj_prop(vm: &Vm, obj: &JsObject, name: &str) -> JsValue {
|
||||||
let si = vm.kernel_core().perm_interner().intern(name).0;
|
let si = vm.perm_intern(name);
|
||||||
match vm.get_own_property_slot(obj, si) {
|
match vm.get_own_property_slot(obj, si) {
|
||||||
Some(idx) => obj.get_prop_at(idx),
|
Some(idx) => obj.get_prop_at(idx),
|
||||||
None => JsValue::undefined(),
|
None => JsValue::undefined(),
|
||||||
|
|||||||
Reference in New Issue
Block a user