MCPcopy Create free account
hub / github.com/Snapchat/Valdi / newTypedArrayFromArrayBuffer

Method newTypedArrayFromArrayBuffer

valdi/src/valdi/v8/V8JavaScriptContext.cpp:438–489  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

436};
437
438JSValueRef V8JavaScriptContext::newTypedArrayFromArrayBuffer(const TypedArrayType& type,
439 const JSValue& arrayBuffer,
440 JSExceptionTracker& exceptionTracker) {
441 v8::HandleScope handleScope(_isolate);
442
443 v8::Local<v8::TypedArray> retval;
444 auto local = fromValdiJSValue(_isolate, arrayBuffer, exceptionTracker);
445 if (!exceptionTracker) {
446 return JSValueRef();
447 }
448
449 if (!local->IsArrayBuffer() && !local->IsSharedArrayBuffer()) {
450 exceptionTracker.onError("Cannot create typed array since provided object is not arraybuffer");
451 return JSValueRef();
452 }
453
454 auto arrayBufferUnpacked = v8::Local<v8::ArrayBuffer>::Cast(local);
455 const auto byteLength = arrayBufferUnpacked->ByteLength();
456 switch (type) {
457 case Int8Array: {
458 retval = v8::Int8Array::New(arrayBufferUnpacked, 0, byteLength / sizeof(int8_t));
459 } break;
460 case Int16Array: {
461 retval = v8::Int16Array::New(arrayBufferUnpacked, 0, byteLength / sizeof(int16_t));
462 } break;
463 case Int32Array: {
464 retval = v8::Int32Array::New(arrayBufferUnpacked, 0, byteLength / sizeof(int32_t));
465 } break;
466 case Uint8Array: {
467 retval = v8::Uint8Array::New(arrayBufferUnpacked, 0, byteLength / sizeof(uint8_t));
468 } break;
469 case Uint8ClampedArray: {
470 retval = v8::Uint8ClampedArray::New(arrayBufferUnpacked, 0, byteLength / sizeof(uint8_t));
471 } break;
472 case Uint16Array: {
473 retval = v8::Uint16Array::New(arrayBufferUnpacked, 0, byteLength / sizeof(uint16_t));
474 } break;
475 case Uint32Array: {
476 retval = v8::Uint32Array::New(arrayBufferUnpacked, 0, byteLength / sizeof(uint32_t));
477 } break;
478 case Float32Array: {
479 retval = v8::Float32Array::New(arrayBufferUnpacked, 0, byteLength / sizeof(float));
480 } break;
481 case Float64Array: {
482 retval = v8::Float64Array::New(arrayBufferUnpacked, 0, byteLength / sizeof(double));
483 } break;
484 case ArrayBuffer:
485 return JSValueRef::makeRetained(*this, arrayBuffer);
486 }
487
488 return toRetainedJSValueRef(IndirectV8Persistent::make(_isolate, retval));
489}
490
491JSValueRef V8JavaScriptContext::newWrappedObject(const Ref<RefCountable>& wrappedObject,
492 JSExceptionTracker& exceptionTracker) {

Callers 1

Calls 4

fromValdiJSValueFunction · 0.70
onErrorMethod · 0.65
CastFunction · 0.50
NewFunction · 0.50

Tested by

no test coverage detected