aboutsummaryrefslogtreecommitdiff
path: root/src/string_builder.zig
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-05-14 06:13:39 -0700
committerGravatar GitHub <noreply@github.com> 2023-05-14 06:13:39 -0700
commit893f70fee4a62b7729abc17257aee89a2dce0069 (patch)
tree9a1da782efdadc8ab9869293f6fd9cd64e5b4ba7 /src/string_builder.zig
parent7f25aa9e0864e95aad72ee85d475a03aee68bfb4 (diff)
downloadbun-893f70fee4a62b7729abc17257aee89a2dce0069.tar.gz
bun-893f70fee4a62b7729abc17257aee89a2dce0069.tar.zst
bun-893f70fee4a62b7729abc17257aee89a2dce0069.zip
Single-file standalone Bun executables (#2879)
* Add LIEF * Compile LIEF * Implement support for embedding files on macOS * proof of concept * Add zstd * Implement runtime support * Move some code around * Update .gitmodules * Upgrade zig https://github.com/ziglang/zig/pull/15278 * leftover * leftover * delete dead code * Fix extname * Revert "Upgrade zig" This reverts commit dd968f30bffb6c06e34302645a3a4468c957fb4e. * Revert "leftover" This reverts commit 7664de7686276cfba431103847d35b9270433dee. * Revert "leftover" This reverts commit 498005be06a8a1747d48824310e5a020b1f90d97. * various fixes * it works! * leftover * Make `zig build` a little faster * give up on code signing support * Support Linux & macOS * Finish removing LIEF * few more * Add zstd to list of deps * make it pretty --------- Co-authored-by: Jarred Sumner <709451+Jarred-Sumner@users.noreply.github.com>
Diffstat (limited to 'src/string_builder.zig')
-rw-r--r--src/string_builder.zig57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/string_builder.zig b/src/string_builder.zig
index abed901dd..7aba5cd89 100644
--- a/src/string_builder.zig
+++ b/src/string_builder.zig
@@ -53,6 +53,36 @@ pub fn append(this: *StringBuilder, slice: string) string {
return result;
}
+pub fn add(this: *StringBuilder, len: usize) bun.StringPointer {
+ if (comptime Environment.allow_assert) {
+ assert(this.len <= this.cap); // didn't count everything
+ assert(this.ptr != null); // must call allocate first
+ }
+
+ const start = this.len;
+ this.len += len;
+
+ if (comptime Environment.allow_assert) assert(this.len <= this.cap);
+
+ return bun.StringPointer{ .offset = @truncate(u32, start), .length = @truncate(u32, len) };
+}
+pub fn appendCount(this: *StringBuilder, slice: string) bun.StringPointer {
+ if (comptime Environment.allow_assert) {
+ assert(this.len <= this.cap); // didn't count everything
+ assert(this.ptr != null); // must call allocate first
+ }
+
+ const start = this.len;
+ bun.copy(u8, this.ptr.?[this.len..this.cap], slice);
+ const result = this.ptr.?[this.len..this.cap][0..slice.len];
+ _ = result;
+ this.len += slice.len;
+
+ if (comptime Environment.allow_assert) assert(this.len <= this.cap);
+
+ return bun.StringPointer{ .offset = @truncate(u32, start), .length = @truncate(u32, slice.len) };
+}
+
pub fn fmt(this: *StringBuilder, comptime str: string, args: anytype) string {
if (comptime Environment.allow_assert) {
assert(this.len <= this.cap); // didn't count everything
@@ -68,6 +98,25 @@ pub fn fmt(this: *StringBuilder, comptime str: string, args: anytype) string {
return out;
}
+pub fn fmtAppendCount(this: *StringBuilder, comptime str: string, args: anytype) bun.StringPointer {
+ if (comptime Environment.allow_assert) {
+ assert(this.len <= this.cap); // didn't count everything
+ assert(this.ptr != null); // must call allocate first
+ }
+
+ var buf = this.ptr.?[this.len..this.cap];
+ const out = std.fmt.bufPrint(buf, str, args) catch unreachable;
+ const off = this.len;
+ this.len += out.len;
+
+ if (comptime Environment.allow_assert) assert(this.len <= this.cap);
+
+ return bun.StringPointer{
+ .offset = @truncate(u32, off),
+ .length = @truncate(u32, out.len),
+ };
+}
+
pub fn fmtCount(this: *StringBuilder, comptime str: string, args: anytype) void {
this.cap += std.fmt.count(str, args);
}
@@ -79,3 +128,11 @@ pub fn allocatedSlice(this: *StringBuilder) []u8 {
}
return ptr[0..this.cap];
}
+
+pub fn writable(this: *StringBuilder) []u8 {
+ var ptr = this.ptr orelse return &[_]u8{};
+ if (comptime Environment.allow_assert) {
+ assert(this.cap > 0);
+ }
+ return ptr[this.len..this.cap];
+}