Skip to content

Commit ae5fbaa

Browse files
Meta: implement TransferArrayBuffer correctly in reference implementation
1 parent 4f2a2c1 commit ae5fbaa

File tree

3 files changed

+9
-20
lines changed

3 files changed

+9
-20
lines changed

reference-implementation/lib/abstract-ops/ecmascript.js

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
'use strict';
22
const 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

67
exports.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
1919
exports.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
3624
exports.CanTransferArrayBuffer = O => {
3725
return !exports.IsDetachedBuffer(O);
3826
};
3927

40-
// Not implemented correctly
4128
exports.IsDetachedBuffer = O => {
42-
return isFakeDetached in O;
29+
return ArrayBufferPrototypeDetachedGetter.call(O) === true;
4330
};
4431

4532
exports.Call = (F, V, args = []) => {

reference-implementation/lib/abstract-ops/readable-streams.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1584,6 +1584,8 @@ function ReadableByteStreamControllerPullInto(controller, view, min, readIntoReq
15841584
assert(minimumFill >= elementSize && minimumFill <= view.byteLength);
15851585
assert(minimumFill % elementSize === 0);
15861586

1587+
const byteOffset = view.byteOffset;
1588+
const byteLength = view.byteLength;
15871589
const ctor = view.constructor;
15881590

15891591
let buffer;
@@ -1597,8 +1599,8 @@ function ReadableByteStreamControllerPullInto(controller, view, min, readIntoReq
15971599
const pullIntoDescriptor = {
15981600
buffer,
15991601
bufferByteLength: buffer.byteLength,
1600-
byteOffset: view.byteOffset,
1601-
byteLength: view.byteLength,
1602+
byteOffset,
1603+
byteLength,
16021604
bytesFilled: 0,
16031605
minimumFill,
16041606
elementSize,
Submodule web-platform-tests updated 6549 files

0 commit comments

Comments
 (0)