diff options
author | 2022-11-08 00:07:25 -0800 | |
---|---|---|
committer | 2022-11-08 00:07:25 -0800 | |
commit | 38db5f1c83c40546420ee5379876456a6bd125ac (patch) | |
tree | 8eda6b35076e483cc1edcf9271051ca13927a22c /src/bun.js/builtins/cpp | |
parent | 9f10724eda493222bb895c8be67a7934f173ad93 (diff) | |
download | bun-38db5f1c83c40546420ee5379876456a6bd125ac.tar.gz bun-38db5f1c83c40546420ee5379876456a6bd125ac.tar.zst bun-38db5f1c83c40546420ee5379876456a6bd125ac.zip |
Fix Buffer.slice and Buffer.subarray
Diffstat (limited to 'src/bun.js/builtins/cpp')
-rw-r--r-- | src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.cpp | 41 | ||||
-rw-r--r-- | src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.h | 9 |
2 files changed, 17 insertions, 33 deletions
diff --git a/src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.cpp b/src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.cpp index d1d9231e7..367041f65 100644 --- a/src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.cpp +++ b/src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.cpp @@ -717,40 +717,33 @@ const char* const s_jsBufferPrototypeToJSONCode = "})\n" \ ; -const JSC::ConstructAbility s_jsBufferPrototypeSubarrayCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; -const JSC::ConstructorKind s_jsBufferPrototypeSubarrayCodeConstructorKind = JSC::ConstructorKind::None; -const JSC::ImplementationVisibility s_jsBufferPrototypeSubarrayCodeImplementationVisibility = JSC::ImplementationVisibility::Public; -const int s_jsBufferPrototypeSubarrayCodeLength = 196; -static const JSC::Intrinsic s_jsBufferPrototypeSubarrayCodeIntrinsic = JSC::NoIntrinsic; -const char* const s_jsBufferPrototypeSubarrayCode = - "(function (start, end) {\n" \ - " \"use strict\";\n" \ - "\n" \ - " Buffer[Symbol.species] ??= Buffer;\n" \ - " return new Buffer(this.buffer, this.byteOffset + (start || 0), (end || this.byteLength) - (start || 0));\n" \ - "})\n" \ -; - const JSC::ConstructAbility s_jsBufferPrototypeSliceCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; const JSC::ConstructorKind s_jsBufferPrototypeSliceCodeConstructorKind = JSC::ConstructorKind::None; const JSC::ImplementationVisibility s_jsBufferPrototypeSliceCodeImplementationVisibility = JSC::ImplementationVisibility::Public; -const int s_jsBufferPrototypeSliceCodeLength = 308; +const int s_jsBufferPrototypeSliceCodeLength = 612; static const JSC::Intrinsic s_jsBufferPrototypeSliceCodeIntrinsic = JSC::NoIntrinsic; const char* const s_jsBufferPrototypeSliceCode = "(function (start, end) {\n" \ " \"use strict\";\n" \ - " if (start === undefined && end === undefined) {\n" \ - " return this;\n" \ - " }\n" \ - "\n" \ - " Buffer[Symbol.species] ||= Buffer;\n" \ + " var { buffer, byteOffset, byteLength } = this;\n" \ "\n" \ - " start = start || 0;\n" \ - " if (end !== 0) {\n" \ - " end = end || this.byteLength;\n" \ + " function adjustOffset(offset, length) {\n" \ + " //\n" \ + " //\n" \ + " offset = @trunc(offset);\n" \ + " if (offset === 0 || @isNaN(offset)) {\n" \ + " return 0;\n" \ + " } else if (offset < 0) {\n" \ + " offset += length;\n" \ + " return offset > 0 ? offset : 0;\n" \ + " } else {\n" \ + " return offset < length ? offset : length;\n" \ + " }\n" \ " }\n" \ "\n" \ - " return new Buffer(this.buffer, this.byteOffset + start, end - start);\n" \ + " var start_ = adjustOffset(start, byteLength);\n" \ + " var end_ = end !== undefined ? adjustOffset(end, byteLength) : byteLength;\n" \ + " return new Buffer(buffer, byteOffset + start_, end_ > start_ ? (end_ - start_) : 0);\n" \ "})\n" \ ; diff --git a/src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.h b/src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.h index f17f22dbb..04fa9df0b 100644 --- a/src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.h +++ b/src/bun.js/builtins/cpp/JSBufferPrototypeBuiltins.h @@ -318,11 +318,6 @@ extern const int s_jsBufferPrototypeToJSONCodeLength; extern const JSC::ConstructAbility s_jsBufferPrototypeToJSONCodeConstructAbility; extern const JSC::ConstructorKind s_jsBufferPrototypeToJSONCodeConstructorKind; extern const JSC::ImplementationVisibility s_jsBufferPrototypeToJSONCodeImplementationVisibility; -extern const char* const s_jsBufferPrototypeSubarrayCode; -extern const int s_jsBufferPrototypeSubarrayCodeLength; -extern const JSC::ConstructAbility s_jsBufferPrototypeSubarrayCodeConstructAbility; -extern const JSC::ConstructorKind s_jsBufferPrototypeSubarrayCodeConstructorKind; -extern const JSC::ImplementationVisibility s_jsBufferPrototypeSubarrayCodeImplementationVisibility; extern const char* const s_jsBufferPrototypeSliceCode; extern const int s_jsBufferPrototypeSliceCodeLength; extern const JSC::ConstructAbility s_jsBufferPrototypeSliceCodeConstructAbility; @@ -389,7 +384,6 @@ extern const JSC::ImplementationVisibility s_jsBufferPrototypeInitializeBunBuffe macro(base64urlSlice, jsBufferPrototypeBase64urlSlice, 2) \ macro(hexSlice, jsBufferPrototypeHexSlice, 2) \ macro(toJSON, jsBufferPrototypeToJSON, 0) \ - macro(subarray, jsBufferPrototypeSubarray, 2) \ macro(slice, jsBufferPrototypeSlice, 2) \ macro(initializeBunBuffer, jsBufferPrototypeInitializeBunBuffer, 1) \ @@ -447,7 +441,6 @@ extern const JSC::ImplementationVisibility s_jsBufferPrototypeInitializeBunBuffe #define WEBCORE_BUILTIN_JSBUFFERPROTOTYPE_BASE64URLSLICE 1 #define WEBCORE_BUILTIN_JSBUFFERPROTOTYPE_HEXSLICE 1 #define WEBCORE_BUILTIN_JSBUFFERPROTOTYPE_TOJSON 1 -#define WEBCORE_BUILTIN_JSBUFFERPROTOTYPE_SUBARRAY 1 #define WEBCORE_BUILTIN_JSBUFFERPROTOTYPE_SLICE 1 #define WEBCORE_BUILTIN_JSBUFFERPROTOTYPE_INITIALIZEBUNBUFFER 1 @@ -506,7 +499,6 @@ extern const JSC::ImplementationVisibility s_jsBufferPrototypeInitializeBunBuffe macro(jsBufferPrototypeBase64urlSliceCode, base64urlSlice, ASCIILiteral(), s_jsBufferPrototypeBase64urlSliceCodeLength) \ macro(jsBufferPrototypeHexSliceCode, hexSlice, ASCIILiteral(), s_jsBufferPrototypeHexSliceCodeLength) \ macro(jsBufferPrototypeToJSONCode, toJSON, ASCIILiteral(), s_jsBufferPrototypeToJSONCodeLength) \ - macro(jsBufferPrototypeSubarrayCode, subarray, ASCIILiteral(), s_jsBufferPrototypeSubarrayCodeLength) \ macro(jsBufferPrototypeSliceCode, slice, ASCIILiteral(), s_jsBufferPrototypeSliceCodeLength) \ macro(jsBufferPrototypeInitializeBunBufferCode, initializeBunBuffer, ASCIILiteral(), s_jsBufferPrototypeInitializeBunBufferCodeLength) \ @@ -542,7 +534,6 @@ extern const JSC::ImplementationVisibility s_jsBufferPrototypeInitializeBunBuffe macro(readUInt8) \ macro(setBigUint64) \ macro(slice) \ - macro(subarray) \ macro(toJSON) \ macro(ucs2Slice) \ macro(ucs2Write) \ |