n-api: implement napi_is_detached_arraybuffer · nodejs/node@b744ffd · GitHub
Skip to content

Commit b744ffd

Browse files
lundibundirichardlau
authored andcommitted
n-api: implement napi_is_detached_arraybuffer
This implements ArrayBuffer#IsDetachedBuffer operation as per ECMAScript specification Section 24.1.1.2 https://tc39.es/ecma262/#sec-isdetachedbuffer Closes: #29955 PR-URL: #30613 Backport-PR-URL: #33061 Fixes: #29955 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: Gus Caplan <me@gus.host> Reviewed-By: David Carlier <devnexen@gmail.com> Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Michael Dawson <michael_dawson@ca.ibm.com>
1 parent 961598b commit b744ffd

5 files changed

Lines changed: 91 additions & 0 deletions

File tree

doc/api/n-api.md

Lines changed: 26 additions & 0 deletions

src/node_api.cc

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4403,3 +4403,18 @@ napi_status napi_detach_arraybuffer(napi_env env, napi_value arraybuffer) {
44034403

44044404
return napi_clear_last_error(env);
44054405
}
4406+
4407+
napi_status napi_is_detached_arraybuffer(napi_env env,
4408+
napi_value arraybuffer,
4409+
bool* result) {
4410+
CHECK_ENV(env);
4411+
CHECK_ARG(env, arraybuffer);
4412+
CHECK_ARG(env, result);
4413+
4414+
v8::Local<v8::Value> value = v8impl::V8LocalValueFromJsValue(arraybuffer);
4415+
4416+
*result = value->IsArrayBuffer() &&
4417+
value.As<v8::ArrayBuffer>()->GetContents().Data() == nullptr;
4418+
4419+
return napi_clear_last_error(env);
4420+
}

src/node_api.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -752,6 +752,11 @@ napi_get_all_property_names(napi_env env,
752752
NAPI_EXTERN napi_status
753753
napi_detach_arraybuffer(napi_env env,
754754
napi_value arraybuffer);
755+
756+
NAPI_EXTERN napi_status
757+
napi_is_detached_arraybuffer(napi_env env,
758+
napi_value value,
759+
bool* result);
755760
#endif // NAPI_EXPERIMENTAL
756761

757762
EXTERN_C_END

test/addons-napi/test_typedarray/test.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,21 @@ arrayTypes.forEach((currentType) => {
8787
assert.ok(externalResult instanceof Int8Array);
8888
assert.strictEqual(externalResult.length, 3);
8989
assert.strictEqual(externalResult.byteLength, 3);
90+
assert.ok(!test_typedarray.IsDetached(buffer.buffer));
9091
test_typedarray.Detach(buffer);
92+
assert.ok(test_typedarray.IsDetached(buffer.buffer));
9193
assert.ok(externalResult instanceof Int8Array);
9294
assert.strictEqual(buffer.length, 0);
9395
assert.strictEqual(buffer.byteLength, 0);
9496
}
97+
98+
{
99+
const buffer = new ArrayBuffer(128);
100+
assert.ok(!test_typedarray.IsDetached(buffer));
101+
}
102+
103+
{
104+
const buffer = test_typedarray.NullArrayBuffer();
105+
assert.ok(buffer instanceof ArrayBuffer);
106+
assert.ok(test_typedarray.IsDetached(buffer));
107+
}

test/addons-napi/test_typedarray/test_typedarray.c

Lines changed: 32 additions & 0 deletions

0 commit comments

Comments
 (0)