diff options
author | 2023-01-27 22:55:46 -0800 | |
---|---|---|
committer | 2023-01-27 22:55:46 -0800 | |
commit | aff91436c0998b0368f0970fa0da42afa09640fc (patch) | |
tree | 5b906088b4143c4c4963454246181fb1bf0728d5 /src | |
parent | 80751586390cd0c73fab9b5ff2e9d48b7df54719 (diff) | |
download | bun-aff91436c0998b0368f0970fa0da42afa09640fc.tar.gz bun-aff91436c0998b0368f0970fa0da42afa09640fc.tar.zst bun-aff91436c0998b0368f0970fa0da42afa09640fc.zip |
`Buffer.from` doesn't need to be the Buffer constructor
Diffstat (limited to 'src')
-rw-r--r-- | src/bun.js/bindings/ZigGlobalObject.cpp | 6 | ||||
-rw-r--r-- | src/bun.js/builtins/BunBuiltinNames.h | 1 | ||||
-rw-r--r-- | src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp | 19 | ||||
-rw-r--r-- | src/bun.js/builtins/js/JSBufferConstructor.js | 17 |
4 files changed, 21 insertions, 22 deletions
diff --git a/src/bun.js/bindings/ZigGlobalObject.cpp b/src/bun.js/bindings/ZigGlobalObject.cpp index 756cb359d..9f6a13b40 100644 --- a/src/bun.js/bindings/ZigGlobalObject.cpp +++ b/src/bun.js/bindings/ZigGlobalObject.cpp @@ -3172,7 +3172,11 @@ void GlobalObject::addBuiltinGlobals(JSC::VM& vm) putDirectCustomAccessor(vm, JSC::Identifier::fromString(vm, "CloseEvent"_s), JSC::CustomGetterSetter::create(vm, JSCloseEvent_getter, nullptr), JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly); - putDirectCustomAccessor(vm, JSC::Identifier::fromString(vm, "Buffer"_s), JSC::CustomGetterSetter::create(vm, JSBuffer_getter, nullptr), + auto bufferAccessor = JSC::CustomGetterSetter::create(vm, JSBuffer_getter, nullptr); + + putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().BufferPublicName(), bufferAccessor, + JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly); + putDirectCustomAccessor(vm, static_cast<JSVMClientData*>(vm.clientData)->builtinNames().BufferPrivateName(), bufferAccessor, JSC::PropertyAttribute::DontDelete | JSC::PropertyAttribute::ReadOnly); PUT_WEBCORE_GENERATED_CONSTRUCTOR("TextEncoder"_s, JSTextEncoder); diff --git a/src/bun.js/builtins/BunBuiltinNames.h b/src/bun.js/builtins/BunBuiltinNames.h index 535ae2b5c..b9a9dfe13 100644 --- a/src/bun.js/builtins/BunBuiltinNames.h +++ b/src/bun.js/builtins/BunBuiltinNames.h @@ -22,6 +22,7 @@ using namespace JSC; #define BUN_COMMON_PRIVATE_IDENTIFIERS_EACH_PROPERTY_NAME(macro) \ macro(AbortSignal) \ + macro(Buffer) \ macro(Bun) \ macro(Loader) \ macro(ReadableByteStreamController) \ diff --git a/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp b/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp index a38be91a7..958126784 100644 --- a/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp +++ b/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp @@ -51,15 +51,12 @@ namespace WebCore { const JSC::ConstructAbility s_jsBufferConstructorFromCodeConstructAbility = JSC::ConstructAbility::CannotConstruct; const JSC::ConstructorKind s_jsBufferConstructorFromCodeConstructorKind = JSC::ConstructorKind::None; const JSC::ImplementationVisibility s_jsBufferConstructorFromCodeImplementationVisibility = JSC::ImplementationVisibility::Public; -const int s_jsBufferConstructorFromCodeLength = 1843; +const int s_jsBufferConstructorFromCodeLength = 1762; static const JSC::Intrinsic s_jsBufferConstructorFromCodeIntrinsic = JSC::NoIntrinsic; const char* const s_jsBufferConstructorFromCode = "(function (items) {\n" \ " \"use strict\";\n" \ "\n" \ - " if (!@isConstructor(this))\n" \ - " @throwTypeError(\"Buffer.from requires |this| to be a constructor\");\n" \ - "\n" \ " if (@isUndefinedOrNull(items)) {\n" \ " @throwTypeError(\n" \ " \"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object.\",\n" \ @@ -78,13 +75,13 @@ const char* const s_jsBufferConstructorFromCode = " ) {\n" \ " switch (@argumentCount()) {\n" \ " case 1: {\n" \ - " return new this(items);\n" \ + " return new @Buffer(items);\n" \ " }\n" \ " case 2: {\n" \ - " return new this(items, @argument(1));\n" \ + " return new @Buffer(items, @argument(1));\n" \ " }\n" \ " default: {\n" \ - " return new this(items, @argument(1), @argument(2));\n" \ + " return new @Buffer(items, @argument(1), @argument(2));\n" \ " }\n" \ " }\n" \ " }\n" \ @@ -103,13 +100,13 @@ const char* const s_jsBufferConstructorFromCode = " if (typeof primitive === \"string\") {\n" \ " switch (@argumentCount()) {\n" \ " case 1: {\n" \ - " return new this(primitive);\n" \ + " return new @Buffer(primitive);\n" \ " }\n" \ " case 2: {\n" \ - " return new this(primitive, @argument(1));\n" \ + " return new @Buffer(primitive, @argument(1));\n" \ " }\n" \ " default: {\n" \ - " return new this(primitive, @argument(1), @argument(2));\n" \ + " return new @Buffer(primitive, @argument(1), @argument(2));\n" \ " }\n" \ " }\n" \ " }\n" \ @@ -125,7 +122,7 @@ const char* const s_jsBufferConstructorFromCode = " //\n" \ " //\n" \ " //\n" \ - " return new this(@Uint8Array.from(arrayLike).buffer);\n" \ + " return new @Buffer(@Uint8Array.from(arrayLike).buffer);\n" \ "})\n" \ ; diff --git a/src/bun.js/builtins/js/JSBufferConstructor.js b/src/bun.js/builtins/js/JSBufferConstructor.js index 10994394e..eecd52568 100644 --- a/src/bun.js/builtins/js/JSBufferConstructor.js +++ b/src/bun.js/builtins/js/JSBufferConstructor.js @@ -28,9 +28,6 @@ function from(items) { "use strict"; - if (!@isConstructor(this)) - @throwTypeError("Buffer.from requires |this| to be a constructor"); - if (@isUndefinedOrNull(items)) { @throwTypeError( "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object.", @@ -49,13 +46,13 @@ function from(items) { ) { switch (@argumentCount()) { case 1: { - return new this(items); + return new @Buffer(items); } case 2: { - return new this(items, @argument(1)); + return new @Buffer(items, @argument(1)); } default: { - return new this(items, @argument(1), @argument(2)); + return new @Buffer(items, @argument(1), @argument(2)); } } } @@ -74,13 +71,13 @@ function from(items) { if (typeof primitive === "string") { switch (@argumentCount()) { case 1: { - return new this(primitive); + return new @Buffer(primitive); } case 2: { - return new this(primitive, @argument(1)); + return new @Buffer(primitive, @argument(1)); } default: { - return new this(primitive, @argument(1), @argument(2)); + return new @Buffer(primitive, @argument(1), @argument(2)); } } } @@ -96,5 +93,5 @@ function from(items) { // Don't pass the second argument because Node's Buffer.from doesn't accept // a function and Uint8Array.from requires it if it exists // That means we cannot use @tailCallFowrardArguments here, sadly - return new this(@Uint8Array.from(arrayLike).buffer); + return new @Buffer(@Uint8Array.from(arrayLike).buffer); } |