aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Alex Lam S.L <alexlamsl@gmail.com> 2023-02-25 00:51:20 +0200
committerGravatar GitHub <noreply@github.com> 2023-02-24 14:51:20 -0800
commit26df7ca8926c67311f5ca1fbfc04e2c374c3e1a3 (patch)
treef6b794c7ebc772bcd3e394b36a08b5c69ca215ff /src
parentd33a53deb0d9d2d0b8a586a72e666bb46a174a69 (diff)
downloadbun-26df7ca8926c67311f5ca1fbfc04e2c374c3e1a3.tar.gz
bun-26df7ca8926c67311f5ca1fbfc04e2c374c3e1a3.tar.zst
bun-26df7ca8926c67311f5ca1fbfc04e2c374c3e1a3.zip
fix `compiler_rt` linking failure on `x86_64` (#2163)
- minor code tweaks
Diffstat (limited to 'src')
-rw-r--r--src/bun.zig2
-rw-r--r--src/http_client_async.zig2
-rw-r--r--src/install/lockfile.zig63
-rw-r--r--src/string_immutable.zig23
4 files changed, 34 insertions, 56 deletions
diff --git a/src/bun.zig b/src/bun.zig
index df3d1a72f..17a234d5d 100644
--- a/src/bun.zig
+++ b/src/bun.zig
@@ -386,7 +386,7 @@ pub inline fn range(comptime min: anytype, comptime max: anytype) [max - min]usi
pub fn copy(comptime Type: type, dest: []Type, src: []const Type) void {
if (comptime Environment.allow_assert) std.debug.assert(dest.len >= src.len);
- if (src.ptr == dest.ptr) return;
+ if (@ptrToInt(src.ptr) == @ptrToInt(dest.ptr)) return;
var input: []const u8 = std.mem.sliceAsBytes(src);
var output: []u8 = std.mem.sliceAsBytes(dest);
diff --git a/src/http_client_async.zig b/src/http_client_async.zig
index 7060c3ed2..41684acde 100644
--- a/src/http_client_async.zig
+++ b/src/http_client_async.zig
@@ -1057,7 +1057,7 @@ pub fn hashHeaderName(name: string) u64 {
while (remain.len > 0) {
const end = @min(hasher.buf.len, remain.len);
- hasher.update(strings.copyLowercase(remain[0..end], &buf));
+ hasher.update(strings.copyLowercaseIfNeeded(remain[0..end], &buf));
remain = remain[end..];
}
diff --git a/src/install/lockfile.zig b/src/install/lockfile.zig
index c7009c57b..4e604fca5 100644
--- a/src/install/lockfile.zig
+++ b/src/install/lockfile.zig
@@ -1590,23 +1590,26 @@ pub const StringBuilder = struct {
pub inline fn count(this: *StringBuilder, slice: string) void {
if (String.canInline(slice)) return;
- return countWithHash(this, slice, String.Builder.stringHash(slice));
+ this._countWithHash(slice, String.Builder.stringHash(slice));
}
pub inline fn countWithHash(this: *StringBuilder, slice: string, hash: u64) void {
if (String.canInline(slice)) return;
+ this._countWithHash(slice, hash);
+ }
+
+ inline fn _countWithHash(this: *StringBuilder, slice: string, hash: u64) void {
if (!this.lockfile.string_pool.contains(hash)) {
this.cap += slice.len;
}
}
pub fn allocatedSlice(this: *StringBuilder) []const u8 {
- if (this.ptr == null) return "";
- return this.ptr.?[0..this.cap];
+ return if (this.ptr) |ptr| ptr[0..this.cap] else "";
}
pub fn clamp(this: *StringBuilder) void {
- std.debug.assert(this.cap >= this.len);
+ if (comptime Environment.allow_assert) std.debug.assert(this.cap >= this.len);
const excess = this.cap - this.len;
@@ -1631,15 +1634,11 @@ pub const StringBuilder = struct {
// SlicedString is not supported due to inline strings.
pub fn appendWithoutPool(this: *StringBuilder, comptime Type: type, slice: string, hash: u64) Type {
if (String.canInline(slice)) {
- switch (Type) {
- String => {
- return String.init(this.lockfile.buffers.string_bytes.items, slice);
- },
- ExternalString => {
- return ExternalString.init(this.lockfile.buffers.string_bytes.items, slice, hash);
- },
+ return switch (Type) {
+ String => String.init(this.lockfile.buffers.string_bytes.items, slice),
+ ExternalString => ExternalString.init(this.lockfile.buffers.string_bytes.items, slice, hash),
else => @compileError("Invalid type passed to StringBuilder"),
- }
+ };
}
if (comptime Environment.allow_assert) {
std.debug.assert(this.len <= this.cap); // didn't count everything
@@ -1652,28 +1651,20 @@ pub const StringBuilder = struct {
if (comptime Environment.allow_assert) std.debug.assert(this.len <= this.cap);
- switch (Type) {
- String => {
- return String.init(this.lockfile.buffers.string_bytes.items, final_slice);
- },
- ExternalString => {
- return ExternalString.init(this.lockfile.buffers.string_bytes.items, final_slice, hash);
- },
+ return switch (Type) {
+ String => String.init(this.lockfile.buffers.string_bytes.items, final_slice),
+ ExternalString => ExternalString.init(this.lockfile.buffers.string_bytes.items, final_slice, hash),
else => @compileError("Invalid type passed to StringBuilder"),
- }
+ };
}
pub fn appendWithHash(this: *StringBuilder, comptime Type: type, slice: string, hash: u64) Type {
if (String.canInline(slice)) {
- switch (Type) {
- String => {
- return String.init(this.lockfile.buffers.string_bytes.items, slice);
- },
- ExternalString => {
- return ExternalString.init(this.lockfile.buffers.string_bytes.items, slice, hash);
- },
+ return switch (Type) {
+ String => String.init(this.lockfile.buffers.string_bytes.items, slice),
+ ExternalString => ExternalString.init(this.lockfile.buffers.string_bytes.items, slice, hash),
else => @compileError("Invalid type passed to StringBuilder"),
- }
+ };
}
if (comptime Environment.allow_assert) {
@@ -1692,18 +1683,14 @@ pub const StringBuilder = struct {
if (comptime Environment.allow_assert) std.debug.assert(this.len <= this.cap);
- switch (Type) {
- String => {
- return string_entry.value_ptr.*;
- },
- ExternalString => {
- return ExternalString{
- .value = string_entry.value_ptr.*,
- .hash = hash,
- };
+ return switch (Type) {
+ String => string_entry.value_ptr.*,
+ ExternalString => .{
+ .value = string_entry.value_ptr.*,
+ .hash = hash,
},
else => @compileError("Invalid type passed to StringBuilder"),
- }
+ };
}
};
diff --git a/src/string_immutable.zig b/src/string_immutable.zig
index ee65d1224..ea81de06c 100644
--- a/src/string_immutable.zig
+++ b/src/string_immutable.zig
@@ -370,7 +370,7 @@ pub fn copyLowercase(in: string, out: []u8) string {
var in_slice = in;
var out_slice = out;
- begin: while (in_slice.len > 0) {
+ begin: while (true) {
for (in_slice, 0..) |c, i| {
switch (c) {
'A'...'Z' => {
@@ -393,18 +393,17 @@ pub fn copyLowercase(in: string, out: []u8) string {
}
pub fn copyLowercaseIfNeeded(in: string, out: []u8) string {
- var in_slice: string = in;
- var out_slice: []u8 = out[0..in.len];
+ var in_slice = in;
+ var out_slice = out;
var any = false;
- begin: while (out_slice.len > 0) {
+ begin: while (true) {
for (in_slice, 0..) |c, i| {
switch (c) {
'A'...'Z' => {
- @memcpy(out_slice.ptr, in_slice.ptr, i);
+ bun.copy(u8, out_slice, in_slice[0..i]);
out_slice[i] = std.ascii.toLower(c);
const end = i + 1;
- if (end >= out_slice.len) break :begin;
in_slice = in_slice[end..];
out_slice = out_slice[end..];
any = true;
@@ -414,19 +413,11 @@ pub fn copyLowercaseIfNeeded(in: string, out: []u8) string {
}
}
- if (!any) {
- return in;
- }
-
- @memcpy(out_slice.ptr, in_slice.ptr, in_slice.len);
+ if (any) bun.copy(u8, out_slice, in_slice);
break :begin;
}
- if (!any) {
- return in;
- }
-
- return out[0..in.len];
+ return if (any) out[0..in.len] else in;
}
test "indexOf" {