diff options
author | 2023-01-21 04:06:06 -0800 | |
---|---|---|
committer | 2023-01-21 04:06:06 -0800 | |
commit | ed421855d70c64f55a5cb15a1a46798457697d3e (patch) | |
tree | f4177544ce601d0c6051d0f687084f605969753b | |
parent | 627da4452714bc7126db776682882afd26f89516 (diff) | |
download | bun-ed421855d70c64f55a5cb15a1a46798457697d3e.tar.gz bun-ed421855d70c64f55a5cb15a1a46798457697d3e.tar.zst bun-ed421855d70c64f55a5cb15a1a46798457697d3e.zip |
[buffer] Add faster path for Uint8Array
-rw-r--r-- | src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp | 8 | ||||
-rw-r--r-- | src/bun.js/builtins/js/JSBufferConstructor.js | 6 |
2 files changed, 13 insertions, 1 deletions
diff --git a/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp b/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp index 213060f58..7025ea8b8 100644 --- a/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp +++ b/src/bun.js/builtins/cpp/JSBufferConstructorBuiltins.cpp @@ -51,7 +51,7 @@ 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 = 1832; +const int s_jsBufferConstructorFromCodeLength = 1984; static const JSC::Intrinsic s_jsBufferConstructorFromCodeIntrinsic = JSC::NoIntrinsic; const char* const s_jsBufferConstructorFromCode = "(function (items) {\n" \ @@ -65,6 +65,12 @@ const char* const s_jsBufferConstructorFromCode = " \"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object.\",\n" \ " );\n" \ "\n" \ + " if (@argumentCount() === 1 && @isTypedArrayView(items)) {\n" \ + " var out = this.allocUnsafe(items.byteLength);\n" \ + " out.copy(items);\n" \ + " return out;\n" \ + " }\n" \ + "\n" \ " //\n" \ " if (\n" \ " typeof items === \"string\" ||\n" \ diff --git a/src/bun.js/builtins/js/JSBufferConstructor.js b/src/bun.js/builtins/js/JSBufferConstructor.js index 9f61220cc..4c3650360 100644 --- a/src/bun.js/builtins/js/JSBufferConstructor.js +++ b/src/bun.js/builtins/js/JSBufferConstructor.js @@ -36,6 +36,12 @@ function from(items) { "The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object.", ); + if (@argumentCount() === 1 && @isTypedArrayView(items)) { + var out = this.allocUnsafe(items.byteLength); + out.copy(items); + return out; + } + // TODO: figure out why private symbol not found if ( typeof items === "string" || |