From ec4f957ca1b0c24e912b39cd3c17503f921c963e Mon Sep 17 00:00:00 2001 From: Tyler Rockwood Date: Wed, 28 Feb 2024 05:17:18 -0600 Subject: [PATCH] Add methods to detect arrays (#282) I have a use case where a user can hand me many different kinds of types, array buffer, uint8array, or a string, and I need to be able to distingush between them. Signed-off-by: Tyler Rockwood --- quickjs.c | 7 +++++++ quickjs.h | 2 ++ 2 files changed, 9 insertions(+) diff --git a/quickjs.c b/quickjs.c index bce0fd6..7700b63 100644 --- a/quickjs.c +++ b/quickjs.c @@ -48224,6 +48224,10 @@ JSValue JS_NewArrayBuffer(JSContext *ctx, uint8_t *buf, size_t len, buf, free_func, opaque, FALSE); } +JS_BOOL JS_IsArrayBuffer(JSValue obj) { + return JS_GetClassID(obj) == JS_CLASS_ARRAY_BUFFER; +} + /* create a new ArrayBuffer of length 'len' and copy 'buf' to it */ JSValue JS_NewArrayBufferCopy(JSContext *ctx, const uint8_t *buf, size_t len) { @@ -50720,6 +50724,9 @@ JSValue JS_NewUint8ArrayCopy(JSContext *ctx, const uint8_t *buf, size_t len) return js_new_uint8array(ctx, buffer); } +JS_BOOL JS_IsUint8Array(JSValue obj) { + return JS_GetClassID(obj) == JS_CLASS_UINT8_ARRAY; +} /* Atomics */ #ifdef CONFIG_ATOMICS diff --git a/quickjs.h b/quickjs.h index eed30dd..1d086aa 100644 --- a/quickjs.h +++ b/quickjs.h @@ -748,6 +748,7 @@ JS_EXTERN JSValue JS_NewArrayBuffer(JSContext *ctx, uint8_t *buf, size_t len, JS_EXTERN JSValue JS_NewArrayBufferCopy(JSContext *ctx, const uint8_t *buf, size_t len); JS_EXTERN void JS_DetachArrayBuffer(JSContext *ctx, JSValue obj); JS_EXTERN uint8_t *JS_GetArrayBuffer(JSContext *ctx, size_t *psize, JSValue obj); +JS_EXTERN JS_BOOL JS_IsArrayBuffer(JSValue obj); JS_EXTERN uint8_t *JS_GetUint8Array(JSContext *ctx, size_t *psize, JSValue obj); JS_EXTERN JSValue JS_GetTypedArrayBuffer(JSContext *ctx, JSValue obj, size_t *pbyte_offset, @@ -756,6 +757,7 @@ JS_EXTERN JSValue JS_GetTypedArrayBuffer(JSContext *ctx, JSValue obj, JS_EXTERN JSValue JS_NewUint8Array(JSContext *ctx, uint8_t *buf, size_t len, JSFreeArrayBufferDataFunc *free_func, void *opaque, JS_BOOL is_shared); +JS_EXTERN JS_BOOL JS_IsUint8Array(JSValue obj); JS_EXTERN JSValue JS_NewUint8ArrayCopy(JSContext *ctx, const uint8_t *buf, size_t len); typedef struct { void *(*sab_alloc)(void *opaque, size_t size);