diff options
author | 2023-05-14 06:13:39 -0700 | |
---|---|---|
committer | 2023-05-14 06:13:39 -0700 | |
commit | 893f70fee4a62b7729abc17257aee89a2dce0069 (patch) | |
tree | 9a1da782efdadc8ab9869293f6fd9cd64e5b4ba7 /src/string_builder.zig | |
parent | 7f25aa9e0864e95aad72ee85d475a03aee68bfb4 (diff) | |
download | bun-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.zig | 57 |
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]; +} |