aboutsummaryrefslogtreecommitdiff
path: root/src/string.zig
diff options
context:
space:
mode:
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);