11'use strict' ;
22const assert = require ( 'assert' ) ;
33
4- const isFakeDetached = Symbol ( 'is "detached" for our purposes' ) ;
4+ const ArrayBufferPrototypeTransferToFixedLength = ArrayBuffer . prototype . transferToFixedLength ;
5+ const ArrayBufferPrototypeDetachedGetter = Object . getOwnPropertyDescriptor ( ArrayBuffer . prototype , 'detached' ) . get ;
56
67exports . typeIsObject = x => ( typeof x === 'object' && x !== null ) || typeof x === 'function' ;
78
@@ -15,31 +16,17 @@ exports.CopyDataBlockBytes = (dest, destOffset, src, srcOffset, n) => {
1516 new Uint8Array ( dest ) . set ( new Uint8Array ( src , srcOffset , n ) , destOffset ) ;
1617} ;
1718
18- // Not implemented correctly
1919exports . TransferArrayBuffer = O => {
2020 assert ( ! exports . IsDetachedBuffer ( O ) ) ;
21- const transferredIshVersion = O . slice ( ) ;
22-
23- // This is specifically to fool tests that test "is transferred" by taking a non-zero-length
24- // ArrayBuffer and checking if its byteLength starts returning 0.
25- Object . defineProperty ( O , 'byteLength' , {
26- get ( ) {
27- return 0 ;
28- }
29- } ) ;
30- O [ isFakeDetached ] = true ;
31-
32- return transferredIshVersion ;
21+ return ArrayBufferPrototypeTransferToFixedLength . call ( O ) ;
3322} ;
3423
35- // Not implemented correctly
3624exports . CanTransferArrayBuffer = O => {
3725 return ! exports . IsDetachedBuffer ( O ) ;
3826} ;
3927
40- // Not implemented correctly
4128exports . IsDetachedBuffer = O => {
42- return isFakeDetached in O ;
29+ return ArrayBufferPrototypeDetachedGetter . call ( O ) === true ;
4330} ;
4431
4532exports . Call = ( F , V , args = [ ] ) => {
0 commit comments