mirror of
https://github.com/nodejs/node.git
synced 2026-10-14 10:26:26 -04:00
buffer: move initialization of buffer prototype into node.js
Instead of exposing it in `lib/internal/buffer.js` after deleting it from the binding and then do the initialization in `lib/buffer.js`, which results in an implicit dependency on the order in which these modules are loaded. PR-URL: https://github.com/nodejs/node/pull/25292 Reviewed-By: Anna Henningsen <anna@addaleax.net> Reviewed-By: James M Snell <jasnell@gmail.com> Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
This commit is contained in:
5 files changed
+70
-47
No files matched your search
+32
-8
@@ -35,7 +35,22 @@ const {
|
||||
swap32: _swap32,
|
||||
swap64: _swap64,
|
||||
kMaxLength,
|
||||
kStringMaxLength
|
||||
kStringMaxLength,
|
||||
zeroFill: bindingZeroFill,
|
||||
|
||||
// Additional Buffer methods
|
||||
asciiSlice,
|
||||
base64Slice,
|
||||
latin1Slice,
|
||||
hexSlice,
|
||||
ucs2Slice,
|
||||
utf8Slice,
|
||||
asciiWrite,
|
||||
base64Write,
|
||||
latin1Write,
|
||||
hexWrite,
|
||||
ucs2Write,
|
||||
utf8Write
|
||||
} = internalBinding('buffer');
|
||||
const {
|
||||
getOwnNonIndexProperties,
|
||||
@@ -74,10 +89,6 @@ const { validateString } = require('internal/validators');
|
||||
|
||||
const internalBuffer = require('internal/buffer');
|
||||
|
||||
const { setupBufferJS } = internalBuffer;
|
||||
|
||||
const bindingObj = {};
|
||||
|
||||
class FastBuffer extends Uint8Array {}
|
||||
FastBuffer.prototype.constructor = Buffer;
|
||||
internalBuffer.FastBuffer = FastBuffer;
|
||||
@@ -88,6 +99,19 @@ for (const [name, method] of Object.entries(internalBuffer.readWrites)) {
|
||||
Buffer.prototype[name] = method;
|
||||
}
|
||||
|
||||
Buffer.prototype.asciiSlice = asciiSlice;
|
||||
Buffer.prototype.base64Slice = base64Slice;
|
||||
Buffer.prototype.latin1Slice = latin1Slice;
|
||||
Buffer.prototype.hexSlice = hexSlice;
|
||||
Buffer.prototype.ucs2Slice = ucs2Slice;
|
||||
Buffer.prototype.utf8Slice = utf8Slice;
|
||||
Buffer.prototype.asciiWrite = asciiWrite;
|
||||
Buffer.prototype.base64Write = base64Write;
|
||||
Buffer.prototype.latin1Write = latin1Write;
|
||||
Buffer.prototype.hexWrite = hexWrite;
|
||||
Buffer.prototype.ucs2Write = ucs2Write;
|
||||
Buffer.prototype.utf8Write = utf8Write;
|
||||
|
||||
const constants = Object.defineProperties({}, {
|
||||
MAX_LENGTH: {
|
||||
value: kMaxLength,
|
||||
@@ -104,11 +128,11 @@ const constants = Object.defineProperties({}, {
|
||||
Buffer.poolSize = 8 * 1024;
|
||||
let poolSize, poolOffset, allocPool;
|
||||
|
||||
setupBufferJS(Buffer.prototype, bindingObj);
|
||||
|
||||
// A toggle used to access the zero fill setting of the array buffer allocator
|
||||
// in C++.
|
||||
// |zeroFill| can be undefined when running inside an isolate where we
|
||||
// do not own the ArrayBuffer allocator. Zero fill is always on in that case.
|
||||
const zeroFill = bindingObj.zeroFill || [0];
|
||||
const zeroFill = bindingZeroFill || [0];
|
||||
|
||||
function createUnsafeBuffer(size) {
|
||||
return new FastBuffer(createUnsafeArrayBuffer(size));
|
||||
|
||||
Reference in new issue
Block a user