mirror of
https://github.com/denoland/deno.git
synced 2024-11-28 16:20:57 -05:00
fix(cli/napi): correct name handling in napi property descriptor (#17716)
Fixes https://github.com/denoland/deno/issues/17712
This commit is contained in:
parent
46817a0e3d
commit
39f131cd76
3 changed files with 31 additions and 24 deletions
|
@ -1437,10 +1437,12 @@ fn napi_define_properties(
|
|||
for property in properties {
|
||||
let name = if !property.utf8name.is_null() {
|
||||
let name_str = CStr::from_ptr(property.utf8name).to_str().unwrap();
|
||||
v8::String::new(scope, name_str).ok_or(Error::GenericFailure)?
|
||||
v8::String::new(scope, name_str)
|
||||
.ok_or(Error::GenericFailure)?
|
||||
.into()
|
||||
} else {
|
||||
let property_value = napi_value_unchecked(property.name);
|
||||
v8::Local::<v8::String>::try_from(property_value)
|
||||
v8::Local::<v8::Name>::try_from(property_value)
|
||||
.map_err(|_| Error::NameExpected)?
|
||||
};
|
||||
|
||||
|
@ -1461,7 +1463,7 @@ fn napi_define_properties(
|
|||
desc.set_enumerable(property.attributes & napi_enumerable != 0);
|
||||
desc.set_configurable(property.attributes & napi_configurable != 0);
|
||||
|
||||
let define_maybe = object.define_property(scope, name.into(), &desc);
|
||||
let define_maybe = object.define_property(scope, name, &desc);
|
||||
return_status_if_false!(
|
||||
env_ptr,
|
||||
!define_maybe.unwrap_or(false),
|
||||
|
|
|
@ -15,4 +15,10 @@ Deno.test("napi properties", () => {
|
|||
assertEquals(properties.test_simple_property, {
|
||||
nice: 69,
|
||||
});
|
||||
|
||||
assertEquals(properties.key_v8_string, 1);
|
||||
const symbols = Object.getOwnPropertySymbols(properties);
|
||||
assertEquals(symbols.length, 1);
|
||||
assertEquals(symbols[0].description, "key_v8_symbol");
|
||||
assertEquals(properties[symbols[0]], 1);
|
||||
});
|
||||
|
|
|
@ -82,27 +82,26 @@ pub fn init(env: napi_env, exports: napi_value) {
|
|||
attributes: enumerable,
|
||||
value: number,
|
||||
},
|
||||
// TODO(@littledivy): Fix this.
|
||||
// napi_property_descriptor {
|
||||
// utf8name: ptr::null(),
|
||||
// name: name_value,
|
||||
// method: None,
|
||||
// getter: None,
|
||||
// setter: None,
|
||||
// data: ptr::null_mut(),
|
||||
// attributes: enumerable,
|
||||
// value: number,
|
||||
// },
|
||||
// napi_property_descriptor {
|
||||
// utf8name: ptr::null(),
|
||||
// name: name_symbol,
|
||||
// method: None,
|
||||
// getter: None,
|
||||
// setter: None,
|
||||
// data: ptr::null_mut(),
|
||||
// attributes: enumerable,
|
||||
// value: number,
|
||||
// },
|
||||
napi_property_descriptor {
|
||||
utf8name: ptr::null(),
|
||||
name: name_value,
|
||||
method: None,
|
||||
getter: None,
|
||||
setter: None,
|
||||
data: ptr::null_mut(),
|
||||
attributes: enumerable,
|
||||
value: number,
|
||||
},
|
||||
napi_property_descriptor {
|
||||
utf8name: ptr::null(),
|
||||
name: name_symbol,
|
||||
method: None,
|
||||
getter: None,
|
||||
setter: None,
|
||||
data: ptr::null_mut(),
|
||||
attributes: enumerable,
|
||||
value: number,
|
||||
},
|
||||
];
|
||||
|
||||
assert_napi_ok!(napi_define_properties(
|
||||
|
|
Loading…
Reference in a new issue