diff options
Diffstat (limited to 'src/bun.js')
-rw-r--r-- | src/bun.js/bindings/JSBuffer.cpp | 16 | ||||
-rw-r--r-- | src/bun.js/webcore/encoding.zig | 19 |
2 files changed, 23 insertions, 12 deletions
diff --git a/src/bun.js/bindings/JSBuffer.cpp b/src/bun.js/bindings/JSBuffer.cpp index daca67676..5b41949c4 100644 --- a/src/bun.js/bindings/JSBuffer.cpp +++ b/src/bun.js/bindings/JSBuffer.cpp @@ -28,6 +28,7 @@ #include "wtf/GetPtr.h" #include "wtf/PointerPreparations.h" #include "wtf/URL.h" +#include "wtf/text/WTFString.h" #include "JavaScriptCore/BuiltinNames.h" #include "JSBufferEncodingType.h" @@ -270,7 +271,6 @@ static inline JSC::EncodedJSValue constructBufferFromStringAndEncoding(JSC::JSGl break; } - case WebCore::BufferEncodingType::latin1: case WebCore::BufferEncodingType::ascii: { if (view.is8Bit()) { result = Bun__encoding__constructFromLatin1AsASCII(lexicalGlobalObject, view.characters8(), view.length()); @@ -279,6 +279,14 @@ static inline JSC::EncodedJSValue constructBufferFromStringAndEncoding(JSC::JSGl } break; } + case WebCore::BufferEncodingType::latin1: { + if (view.is8Bit()) { + result = Bun__encoding__constructFromLatin1AsASCII(lexicalGlobalObject, view.characters8(), view.length()); + } else { + result = Bun__encoding__constructFromUTF16AsASCII(lexicalGlobalObject, view.characters16(), view.length()); + } + break; + } case WebCore::BufferEncodingType::ucs2: case WebCore::BufferEncodingType::utf16le: { if (view.is8Bit()) { @@ -1094,12 +1102,16 @@ static inline JSC::EncodedJSValue jsBufferPrototypeFunction_toStringBody(JSC::JS break; } - case WebCore::BufferEncodingType::latin1: case WebCore::BufferEncodingType::ascii: { ret = Bun__encoding__toStringASCII(castedThis->typedVector() + offset, length, lexicalGlobalObject); break; } + case WebCore::BufferEncodingType::latin1: { + ret = JSC::JSValue::encode(JSC::jsString(vm, WTF::StringImpl::create(reinterpret_cast<const UChar*>(castedThis->typedVector() + offset), length))); + break; + } + case WebCore::BufferEncodingType::ucs2: case WebCore::BufferEncodingType::utf16le: { ret = Bun__encoding__toStringUTF16(castedThis->typedVector() + offset, length, lexicalGlobalObject); diff --git a/src/bun.js/webcore/encoding.zig b/src/bun.js/webcore/encoding.zig index 690b2e86d..b3bea11e5 100644 --- a/src/bun.js/webcore/encoding.zig +++ b/src/bun.js/webcore/encoding.zig @@ -838,9 +838,6 @@ pub const Encoder = struct { export fn Bun__encoding__toStringASCII(input: [*]const u8, len: usize, globalObject: *JSC.JSGlobalObject) JSValue { return toString(input, len, globalObject, .ascii); } - export fn Bun__encoding__toStringLatin1(input: [*]const u8, len: usize, globalObject: *JSC.JSGlobalObject) JSValue { - return toString(input, len, globalObject, .latin1); - } export fn Bun__encoding__toStringHex(input: [*]const u8, len: usize, globalObject: *JSC.JSGlobalObject) JSValue { return toString(input, len, globalObject, .hex); @@ -866,7 +863,7 @@ pub const Encoder = struct { const allocator = VirtualMachine.vm.allocator; switch (comptime encoding) { - .latin1, .ascii => { + .ascii => { var to = allocator.alloc(u8, len) catch return ZigString.init("Out of memory").toErrorInstance(global); @memcpy(to.ptr, input_ptr, to.len); @@ -878,6 +875,13 @@ pub const Encoder = struct { return ZigString.init(to).toExternalValue(global); }, + .latin1 => { + var to = allocator.alloc(u8, len) catch return ZigString.init("Out of memory").toErrorInstance(global); + + @memcpy(to.ptr, input_ptr, to.len); + + return ZigString.init(to).toExternalValue(global); + }, .buffer, .utf8 => { // JSC only supports UTF-16 strings for non-ascii text const converted = strings.toUTF16Alloc(allocator, input, false) catch return ZigString.init("Out of memory").toErrorInstance(global); @@ -1109,12 +1113,8 @@ pub const Encoder = struct { }, .latin1, .ascii => { var to = allocator.alloc(u8, len) catch return &[_]u8{}; - @memcpy(to.ptr, input, len); - // Hoping this gets auto vectorized - for (to[0..len]) |c, i| { - to[i] = @as(u8, @truncate(u7, c)); - } + @memcpy(to.ptr, input, len); return to; }, @@ -1257,7 +1257,6 @@ pub const Encoder = struct { _ = Bun__encoding__toStringUTF16; _ = Bun__encoding__toStringUTF8; _ = Bun__encoding__toStringASCII; - _ = Bun__encoding__toStringLatin1; _ = Bun__encoding__toStringHex; _ = Bun__encoding__toStringBase64; _ = Bun__encoding__toStringURLSafeBase64; |