diff options
Diffstat (limited to 'src/javascript/jsc/bindings/bindings.cpp')
-rw-r--r-- | src/javascript/jsc/bindings/bindings.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/src/javascript/jsc/bindings/bindings.cpp b/src/javascript/jsc/bindings/bindings.cpp index 7af7d3a25..c73cb8099 100644 --- a/src/javascript/jsc/bindings/bindings.cpp +++ b/src/javascript/jsc/bindings/bindings.cpp @@ -14,6 +14,7 @@ #include <JavaScriptCore/Identifier.h> #include <JavaScriptCore/IteratorOperations.h> #include <JavaScriptCore/JSArray.h> +#include <JavaScriptCore/JSArrayBuffer.h> #include <JavaScriptCore/JSArrayInlines.h> #include <JavaScriptCore/JSCInlines.h> #include <JavaScriptCore/JSCallbackObject.h> @@ -540,6 +541,41 @@ JSC__JSValue JSC__JSValue__fromEntries(JSC__JSGlobalObject *globalObject, ZigStr return JSC::JSValue::encode(object); } + +bool JSC__JSValue__asArrayBuffer_(JSC__JSValue JSValue0, JSC__JSGlobalObject *arg1, + Bun__ArrayBuffer *arg2) { + JSC::VM &vm = arg1->vm(); + + JSC::JSValue value = JSC::JSValue::decode(JSValue0); + if (!value.isObject()) { return false; } + + JSC::JSObject *object = value.getObject(); + + if (JSC::JSArrayBufferView *typedArray = + JSC::jsDynamicCast<JSC::JSArrayBufferView *>(vm, object)) { + if (JSC::ArrayBuffer *buffer = typedArray->possiblySharedBuffer()) { + buffer->pinAndLock(); + arg2->ptr = reinterpret_cast<char *>(buffer->data()); + arg2->len = typedArray->length(); + arg2->byte_len = buffer->byteLength(); + arg2->offset = typedArray->byteOffset(); + arg2->cell_type = typedArray->type(); + return true; + } + } + + if (JSC::ArrayBuffer *buffer = JSC::toPossiblySharedArrayBuffer(vm, value)) { + buffer->pinAndLock(); + arg2->ptr = reinterpret_cast<char *>(buffer->data()); + arg2->len = buffer->byteLength(); + arg2->byte_len = buffer->byteLength(); + arg2->offset = 0; + arg2->cell_type = 40; + return true; + } + + return false; +} JSC__JSValue JSC__JSValue__createStringArray(JSC__JSGlobalObject *globalObject, ZigString *arg1, size_t arg2, bool clone) { JSC::VM &vm = globalObject->vm(); |