@@ -361,15 +361,12 @@ export function napi_create_typedarray (
361361 $CHECK_ARG ! ( envObject , result )
362362
363363 const handle = emnapiCtx . handleStore . get ( arraybuffer ) !
364- if ( ! handle . isArrayBuffer ( ) ) {
365- return envObject . setLastError ( napi_status . napi_invalid_arg )
366- }
367364 const buffer = handle . value
368365
369366 from64 ( 'byte_offset' )
370367 from64 ( 'length' )
371368
372- const createTypedArray = function ( envObject : Env , Type : { new ( ...args : any [ ] ) : ArrayBufferView ; name ?: string } , size_of_element : number , buffer : ArrayBuffer , byte_offset : size_t , length : size_t ) : napi_status {
369+ const createTypedArray = function ( envObject : Env , Type : { new ( ...args : any [ ] ) : ArrayBufferView ; name ?: string } , size_of_element : number , buffer : ArrayBuffer | SharedArrayBuffer , byte_offset : size_t , length : size_t ) : napi_status {
373370 byte_offset = byte_offset >>> 0
374371 length = length >>> 0
375372 if ( size_of_element > 1 ) {
@@ -408,36 +405,40 @@ export function napi_create_typedarray (
408405 return envObject . getReturnStatus ( )
409406 }
410407
411- switch ( type ) {
412- case napi_typedarray_type . napi_int8_array :
413- return createTypedArray ( envObject , Int8Array , 1 , buffer , byte_offset , length )
414- case napi_typedarray_type . napi_uint8_array :
415- return createTypedArray ( envObject , Uint8Array , 1 , buffer , byte_offset , length )
416- case napi_typedarray_type . napi_uint8_clamped_array :
417- return createTypedArray ( envObject , Uint8ClampedArray , 1 , buffer , byte_offset , length )
418- case napi_typedarray_type . napi_int16_array :
419- return createTypedArray ( envObject , Int16Array , 2 , buffer , byte_offset , length )
420- case napi_typedarray_type . napi_uint16_array :
421- return createTypedArray ( envObject , Uint16Array , 2 , buffer , byte_offset , length )
422- case napi_typedarray_type . napi_int32_array :
423- return createTypedArray ( envObject , Int32Array , 4 , buffer , byte_offset , length )
424- case napi_typedarray_type . napi_uint32_array :
425- return createTypedArray ( envObject , Uint32Array , 4 , buffer , byte_offset , length )
426- case napi_typedarray_type . napi_float32_array :
427- return createTypedArray ( envObject , Float32Array , 4 , buffer , byte_offset , length )
428- case napi_typedarray_type . napi_float64_array :
429- return createTypedArray ( envObject , Float64Array , 8 , buffer , byte_offset , length )
430- case napi_typedarray_type . napi_bigint64_array :
431- return createTypedArray ( envObject , BigInt64Array , 8 , buffer , byte_offset , length )
432- case napi_typedarray_type . napi_biguint64_array :
433- return createTypedArray ( envObject , BigUint64Array , 8 , buffer , byte_offset , length )
434- case napi_typedarray_type . napi_float16_array :
435- if ( typeof Float16Array !== 'function' ) {
408+ if ( buffer instanceof ArrayBuffer || emnapiExternalMemory . isSharedArrayBuffer ( buffer ) ) {
409+ switch ( type ) {
410+ case napi_typedarray_type . napi_int8_array :
411+ return createTypedArray ( envObject , Int8Array , 1 , buffer , byte_offset , length )
412+ case napi_typedarray_type . napi_uint8_array :
413+ return createTypedArray ( envObject , Uint8Array , 1 , buffer , byte_offset , length )
414+ case napi_typedarray_type . napi_uint8_clamped_array :
415+ return createTypedArray ( envObject , Uint8ClampedArray , 1 , buffer , byte_offset , length )
416+ case napi_typedarray_type . napi_int16_array :
417+ return createTypedArray ( envObject , Int16Array , 2 , buffer , byte_offset , length )
418+ case napi_typedarray_type . napi_uint16_array :
419+ return createTypedArray ( envObject , Uint16Array , 2 , buffer , byte_offset , length )
420+ case napi_typedarray_type . napi_int32_array :
421+ return createTypedArray ( envObject , Int32Array , 4 , buffer , byte_offset , length )
422+ case napi_typedarray_type . napi_uint32_array :
423+ return createTypedArray ( envObject , Uint32Array , 4 , buffer , byte_offset , length )
424+ case napi_typedarray_type . napi_float32_array :
425+ return createTypedArray ( envObject , Float32Array , 4 , buffer , byte_offset , length )
426+ case napi_typedarray_type . napi_float64_array :
427+ return createTypedArray ( envObject , Float64Array , 8 , buffer , byte_offset , length )
428+ case napi_typedarray_type . napi_bigint64_array :
429+ return createTypedArray ( envObject , BigInt64Array , 8 , buffer , byte_offset , length )
430+ case napi_typedarray_type . napi_biguint64_array :
431+ return createTypedArray ( envObject , BigUint64Array , 8 , buffer , byte_offset , length )
432+ case napi_typedarray_type . napi_float16_array :
433+ if ( typeof Float16Array !== 'function' ) {
434+ return envObject . setLastError ( napi_status . napi_invalid_arg )
435+ }
436+ return createTypedArray ( envObject , Float16Array , 2 , buffer , byte_offset , length )
437+ default :
436438 return envObject . setLastError ( napi_status . napi_invalid_arg )
437- }
438- return createTypedArray ( envObject , Float16Array , 2 , buffer , byte_offset , length )
439- default :
440- return envObject . setLastError ( napi_status . napi_invalid_arg )
439+ }
440+ } else {
441+ return envObject . setLastError ( napi_status . napi_invalid_arg )
441442 }
442443 } )
443444}
0 commit comments