mirror of
https://github.com/denoland/deno.git
synced 2024-12-22 07:14:47 -05:00
fix(napi): improve napi_is_detached_arraybuffer (#17498)
This commit is contained in:
parent
2e1df62380
commit
b96bbc32c8
3 changed files with 45 additions and 5 deletions
|
@ -2106,13 +2106,22 @@ fn napi_is_date(
|
||||||
|
|
||||||
#[napi_sym::napi_sym]
|
#[napi_sym::napi_sym]
|
||||||
fn napi_is_detached_arraybuffer(
|
fn napi_is_detached_arraybuffer(
|
||||||
_env: *mut Env,
|
env: *mut Env,
|
||||||
value: napi_value,
|
value: napi_value,
|
||||||
result: *mut bool,
|
result: *mut bool,
|
||||||
) -> Result {
|
) -> Result {
|
||||||
|
check_env!(env);
|
||||||
|
check_arg!(env, result);
|
||||||
|
|
||||||
let value = napi_value_unchecked(value);
|
let value = napi_value_unchecked(value);
|
||||||
let _ab = v8::Local::<v8::ArrayBuffer>::try_from(value).unwrap();
|
|
||||||
*result = _ab.was_detached();
|
*result = match v8::Local::<v8::ArrayBuffer>::try_from(value) {
|
||||||
|
Ok(array_buffer) => array_buffer.was_detached(),
|
||||||
|
Err(_) => false,
|
||||||
|
};
|
||||||
|
|
||||||
|
napi_clear_last_error(env);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
|
||||||
|
|
||||||
import { assertEquals, loadTestLibrary } from "./common.js";
|
import { assert, assertEquals, loadTestLibrary } from "./common.js";
|
||||||
|
|
||||||
const typedarray = loadTestLibrary();
|
const typedarray = loadTestLibrary();
|
||||||
|
|
||||||
|
@ -10,3 +10,15 @@ Deno.test("napi arraybuffer detach", function () {
|
||||||
typedarray.test_detached(buf);
|
typedarray.test_detached(buf);
|
||||||
assertEquals(buf.byteLength, 0);
|
assertEquals(buf.byteLength, 0);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Deno.test("napi arraybuffer is detached", function () {
|
||||||
|
const buf = new ArrayBuffer(5);
|
||||||
|
assertEquals(buf.byteLength, 5);
|
||||||
|
assert(!typedarray.is_detached(buf));
|
||||||
|
typedarray.test_detached(buf);
|
||||||
|
assert(typedarray.is_detached(buf));
|
||||||
|
|
||||||
|
[2, {}, "foo", null, undefined, new Uint8Array(10)].forEach((value) => {
|
||||||
|
assert(!typedarray.is_detached(value));
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
|
@ -21,8 +21,27 @@ extern "C" fn test_detached(
|
||||||
args[0]
|
args[0]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" fn is_detached(
|
||||||
|
env: napi_env,
|
||||||
|
info: napi_callback_info,
|
||||||
|
) -> napi_value {
|
||||||
|
let (args, argc, _) = napi_get_callback_info!(env, info, 1);
|
||||||
|
assert_eq!(argc, 1);
|
||||||
|
|
||||||
|
let mut value = false;
|
||||||
|
assert_napi_ok!(napi_is_detached_arraybuffer(env, args[0], &mut value));
|
||||||
|
|
||||||
|
let mut result = std::ptr::null_mut();
|
||||||
|
assert_napi_ok!(napi_get_boolean(env, value, &mut result));
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
pub fn init(env: napi_env, exports: napi_value) {
|
pub fn init(env: napi_env, exports: napi_value) {
|
||||||
let properties = &[napi_new_property!(env, "test_detached", test_detached)];
|
let properties = &[
|
||||||
|
napi_new_property!(env, "test_detached", test_detached),
|
||||||
|
napi_new_property!(env, "is_detached", is_detached),
|
||||||
|
];
|
||||||
|
|
||||||
assert_napi_ok!(napi_define_properties(
|
assert_napi_ok!(napi_define_properties(
|
||||||
env,
|
env,
|
||||||
|
|
Loading…
Reference in a new issue