aboutsummaryrefslogtreecommitdiff
path: root/src/string.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-07-09 22:36:24 -0700
committerGravatar GitHub <noreply@github.com> 2023-07-09 22:36:24 -0700
commit963d4311e614ac197427104b9cf265bbe2a890af (patch)
tree4c912420b7ec13e5c2aabbbb51157a0cac0c98ca /src/string.zig
parent2f5e4fffe9554fcc7afa6980b3af6b33bc3a3a5e (diff)
downloadbun-963d4311e614ac197427104b9cf265bbe2a890af.tar.gz
bun-963d4311e614ac197427104b9cf265bbe2a890af.tar.zst
bun-963d4311e614ac197427104b9cf265bbe2a890af.zip
Fixes #3530 (#3587)
* Fixes #3530 * Handle OOM * Add test --------- Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src/string.zig')
-rw-r--r--src/string.zig26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/string.zig b/src/string.zig
index 166a0a6f7..5f107197f 100644
--- a/src/string.zig
+++ b/src/string.zig
@@ -257,6 +257,8 @@ pub const String = extern struct {
extern fn BunString__fromLatin1(bytes: [*]const u8, len: usize) String;
extern fn BunString__fromBytes(bytes: [*]const u8, len: usize) String;
+ extern fn BunString__fromLatin1Unitialized(len: usize) String;
+ extern fn BunString__fromUTF16Unitialized(len: usize) String;
pub fn toOwnedSlice(this: String, allocator: std.mem.Allocator) ![]u8 {
switch (this.tag) {
@@ -278,6 +280,30 @@ pub const String = extern struct {
}
}
+ pub fn createUninitializedLatin1(len: usize) String {
+ JSC.markBinding(@src());
+ return BunString__fromLatin1Unitialized(len);
+ }
+
+ pub fn createUninitializedUTF16(len: usize) String {
+ JSC.markBinding(@src());
+ return BunString__fromUTF16Unitialized(len);
+ }
+
+ pub fn createUninitialized(comptime kind: @Type(.EnumLiteral), len: usize) ?String {
+ const without_check = switch (comptime kind) {
+ .latin1 => createUninitializedLatin1(len),
+ .utf16 => createUninitializedUTF16(len),
+ else => @compileError("Invalid string kind"),
+ };
+
+ if (without_check.tag == .Dead) {
+ return null;
+ }
+
+ return without_check;
+ }
+
pub fn createLatin1(bytes: []const u8) String {
JSC.markBinding(@src());
return BunString__fromLatin1(bytes.ptr, bytes.len);