Skip to content

Commit 6621617

Browse files
committed
lib,src: use built-in array buffer detach, transfer
1 parent 8882a21 commit 6621617

File tree

5 files changed

+12
-55
lines changed

5 files changed

+12
-55
lines changed

lib/internal/util.js

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
'use strict';
22

33
const {
4-
ArrayBufferPrototypeGetByteLength,
54
ArrayFrom,
65
ArrayIsArray,
76
ArrayPrototypePush,
@@ -57,7 +56,6 @@ const {
5756
} = require('internal/errors');
5857
const { signals } = internalBinding('constants').os;
5958
const {
60-
isArrayBufferDetached: _isArrayBufferDetached,
6159
guessHandleType: _guessHandleType,
6260
privateSymbols: {
6361
arrow_message_private_symbol,
@@ -798,15 +796,6 @@ function SideEffectFreeRegExpPrototypeSymbolSplit(regex, string, limit = undefin
798796
return getCrossRelmRegex(regex)[SymbolSplit](string, limit);
799797
}
800798

801-
802-
function isArrayBufferDetached(value) {
803-
if (ArrayBufferPrototypeGetByteLength(value) === 0) {
804-
return _isArrayBufferDetached(value);
805-
}
806-
807-
return false;
808-
}
809-
810799
/**
811800
* Helper function to lazy-load an initialize-once value.
812801
* @template T Return value of initializer
@@ -917,7 +906,6 @@ module.exports = {
917906
getSystemErrorMap,
918907
getSystemErrorName,
919908
guessHandleType,
920-
isArrayBufferDetached,
921909
isError,
922910
isInsideNodeModules,
923911
isMacOS,

lib/internal/webstreams/readablestream.js

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22

33
const {
44
ArrayBuffer,
5+
ArrayBufferPrototypeDetached,
56
ArrayBufferPrototypeGetByteLength,
67
ArrayBufferPrototypeSlice,
8+
ArrayBufferPrototypeTransfer,
79
ArrayPrototypePush,
810
ArrayPrototypeShift,
911
DataView,
@@ -50,7 +52,6 @@ const {
5052
const {
5153
createDeferredPromise,
5254
customInspectSymbol: kInspect,
53-
isArrayBufferDetached,
5455
kEmptyObject,
5556
kEnumerableProperty,
5657
SideEffectFreeRegExpPrototypeSymbolReplace,
@@ -107,7 +108,6 @@ const {
107108
isBrandCheck,
108109
resetQueue,
109110
setPromiseHandled,
110-
transferArrayBuffer,
111111
nonOpCancel,
112112
nonOpPull,
113113
nonOpStart,
@@ -698,7 +698,7 @@ class ReadableStreamBYOBRequest {
698698
const viewBuffer = ArrayBufferViewGetBuffer(view);
699699
const viewBufferByteLength = ArrayBufferPrototypeGetByteLength(viewBuffer);
700700

701-
if (isArrayBufferDetached(viewBuffer)) {
701+
if (ArrayBufferPrototypeDetached(viewBuffer)) {
702702
throw new ERR_INVALID_STATE.TypeError('Viewed ArrayBuffer is detached');
703703
}
704704

@@ -1981,7 +1981,7 @@ function readableByteStreamControllerConvertPullIntoDescriptor(desc) {
19811981
if (bytesFilled > byteLength)
19821982
throw new ERR_INVALID_STATE.RangeError('The buffer size is invalid');
19831983
assert(!(bytesFilled % elementSize));
1984-
const transferredBuffer = transferArrayBuffer(buffer);
1984+
const transferredBuffer = ArrayBufferPrototypeTransfer(buffer);
19851985

19861986
if (ctor === Buffer) {
19871987
return Buffer.from(transferredBuffer, byteOffset, bytesFilled / elementSize);
@@ -2650,7 +2650,7 @@ function readableByteStreamControllerPullInto(
26502650

26512651
let transferredBuffer;
26522652
try {
2653-
transferredBuffer = transferArrayBuffer(buffer);
2653+
transferredBuffer = ArrayBufferPrototypeTransfer(buffer);
26542654
} catch (error) {
26552655
readIntoRequest[kError](error);
26562656
return;
@@ -2743,7 +2743,7 @@ function readableByteStreamControllerRespond(controller, bytesWritten) {
27432743
throw new ERR_INVALID_ARG_VALUE.RangeError('bytesWritten', bytesWritten);
27442744
}
27452745

2746-
desc.buffer = transferArrayBuffer(desc.buffer);
2746+
desc.buffer = ArrayBufferPrototypeTransfer(desc.buffer);
27472747

27482748
readableByteStreamControllerRespondInternal(controller, bytesWritten);
27492749
}
@@ -2793,20 +2793,20 @@ function readableByteStreamControllerEnqueue(controller, chunk) {
27932793
if (closeRequested || stream[kState].state !== 'readable')
27942794
return;
27952795

2796-
const transferredBuffer = transferArrayBuffer(buffer);
2796+
const transferredBuffer = ArrayBufferPrototypeTransfer(buffer);
27972797

27982798
if (pendingPullIntos.length) {
27992799
const firstPendingPullInto = pendingPullIntos[0];
28002800

2801-
if (isArrayBufferDetached(firstPendingPullInto.buffer)) {
2801+
if (ArrayBufferPrototypeDetached(firstPendingPullInto.buffer)) {
28022802
throw new ERR_INVALID_STATE.TypeError(
28032803
'Destination ArrayBuffer is detached',
28042804
);
28052805
}
28062806

28072807
readableByteStreamControllerInvalidateBYOBRequest(controller);
28082808

2809-
firstPendingPullInto.buffer = transferArrayBuffer(
2809+
firstPendingPullInto.buffer = ArrayBufferPrototypeTransfer(
28102810
firstPendingPullInto.buffer,
28112811
);
28122812

@@ -3104,7 +3104,7 @@ function readableByteStreamControllerRespondWithNewView(controller, view) {
31043104
if (bufferByteLength !== viewBufferByteLength)
31053105
throw new ERR_INVALID_ARG_VALUE.RangeError('view', view);
31063106

3107-
desc.buffer = transferArrayBuffer(viewBuffer);
3107+
desc.buffer = ArrayBufferPrototypeTransfer(viewBuffer);
31083108

31093109
readableByteStreamControllerRespondInternal(controller, viewByteLength);
31103110
}

lib/internal/webstreams/util.js

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,11 @@ const {
2121
ERR_ARG_NOT_ITERABLE,
2222
ERR_INVALID_ARG_VALUE,
2323
ERR_INVALID_STATE,
24-
ERR_OPERATION_FAILED,
2524
},
2625
} = require('internal/errors');
2726

2827
const {
2928
copyArrayBuffer,
30-
detachArrayBuffer,
3129
} = internalBinding('buffer');
3230

3331
const {
@@ -42,7 +40,6 @@ const {
4240
} = internalBinding('util');
4341

4442
const assert = require('internal/assert');
45-
const { isArrayBufferDetached } = require('internal/util');
4643

4744
const {
4845
validateFunction,
@@ -118,22 +115,6 @@ function isBrandCheck(brand) {
118115
};
119116
}
120117

121-
function transferArrayBuffer(buffer) {
122-
const res = detachArrayBuffer(buffer);
123-
if (res === undefined) {
124-
throw new ERR_OPERATION_FAILED.TypeError(
125-
'The ArrayBuffer could not be transferred');
126-
}
127-
return res;
128-
}
129-
130-
function isViewedArrayBufferDetached(view) {
131-
return (
132-
ArrayBufferViewGetByteLength(view) === 0 &&
133-
isArrayBufferDetached(ArrayBufferViewGetBuffer(view))
134-
);
135-
}
136-
137118
function dequeueValue(controller) {
138119
assert(controller[kState].queue !== undefined);
139120
assert(controller[kState].queueTotalSize !== undefined);
@@ -291,11 +272,9 @@ module.exports = {
291272
invokePromiseCallback,
292273
isBrandCheck,
293274
isPromisePending,
294-
isViewedArrayBufferDetached,
295275
peekQueueValue,
296276
resetQueue,
297277
setPromiseHandled,
298-
transferArrayBuffer,
299278
nonOpCancel,
300279
nonOpFlush,
301280
nonOpPull,

src/node_util.cc

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -162,15 +162,6 @@ static void GetCallerLocation(const FunctionCallbackInfo<Value>& args) {
162162
args.GetReturnValue().Set(Array::New(args.GetIsolate(), ret, arraysize(ret)));
163163
}
164164

165-
static void IsArrayBufferDetached(const FunctionCallbackInfo<Value>& args) {
166-
if (args[0]->IsArrayBuffer()) {
167-
auto buffer = args[0].As<v8::ArrayBuffer>();
168-
args.GetReturnValue().Set(buffer->WasDetached());
169-
return;
170-
}
171-
args.GetReturnValue().Set(false);
172-
}
173-
174165
static void PreviewEntries(const FunctionCallbackInfo<Value>& args) {
175166
if (!args[0]->IsObject())
176167
return;
@@ -306,7 +297,6 @@ void RegisterExternalReferences(ExternalReferenceRegistry* registry) {
306297
registry->Register(GetPromiseDetails);
307298
registry->Register(GetProxyDetails);
308299
registry->Register(GetCallerLocation);
309-
registry->Register(IsArrayBufferDetached);
310300
registry->Register(PreviewEntries);
311301
registry->Register(GetCallSite);
312302
registry->Register(GetOwnNonIndexProperties);
@@ -406,8 +396,6 @@ void Initialize(Local<Object> target,
406396
SetMethodNoSideEffect(context, target, "getProxyDetails", GetProxyDetails);
407397
SetMethodNoSideEffect(
408398
context, target, "getCallerLocation", GetCallerLocation);
409-
SetMethodNoSideEffect(
410-
context, target, "isArrayBufferDetached", IsArrayBufferDetached);
411399
SetMethodNoSideEffect(context, target, "previewEntries", PreviewEntries);
412400
SetMethodNoSideEffect(
413401
context, target, "getOwnNonIndexProperties", GetOwnNonIndexProperties);

typings/primordials.d.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,8 @@ declare namespace primordials {
151151
export const ArrayBufferPrototype: typeof ArrayBuffer.prototype
152152
export const ArrayBufferIsView: typeof ArrayBuffer.isView
153153
export const ArrayBufferPrototypeSlice: UncurryThis<typeof ArrayBuffer.prototype.slice>
154+
export const ArrayBufferPrototypeDetached: UncurryThis<typeof ArrayBuffer.prototype.detached>
155+
export const ArrayBufferPrototypeTransfer: UncurryThis<typeof ArrayBuffer.prototype.transfer>
154156
export const AsyncIteratorPrototype: AsyncIterable<any>;
155157
export import BigInt = globalThis.BigInt;
156158
export const BigIntPrototype: typeof BigInt.prototype

0 commit comments

Comments
 (0)