mirror of
https://github.com/lightpanda-io/browser.git
synced 2026-06-11 01:25:53 -04:00
script: optimize hint allocation and inline helper
Calculate the exact size needed for hint slots in schema.zig to avoid overallocating. Also inline the single-use helper isDefaultTrueBool in command.zig.
This commit is contained in:
@@ -284,16 +284,12 @@ fn formatToolCall(tc: Command.ToolCall, writer: *std.Io.Writer) std.Io.Writer.Er
|
||||
}
|
||||
}
|
||||
|
||||
fn isDefaultTrueBool(s: *const schema.SchemaInfo, key: []const u8, v: std.json.Value) bool {
|
||||
return v == .bool and v.bool and s.isFieldDefaultTrue(key);
|
||||
}
|
||||
|
||||
/// Args that the recorder must NOT emit:
|
||||
/// - `backendNodeId`: ephemeral identifier, never replayable.
|
||||
/// - boolean fields whose value equals the schema default (cosmetic).
|
||||
fn skipForFormat(s: *const schema.SchemaInfo, key: []const u8, v: std.json.Value) bool {
|
||||
if (std.mem.eql(u8, key, "backendNodeId")) return true;
|
||||
return isDefaultTrueBool(s, key, v);
|
||||
return v == .bool and v.bool and s.isFieldDefaultTrue(key);
|
||||
}
|
||||
|
||||
fn formatString(writer: *std.Io.Writer, s: []const u8) std.Io.Writer.Error!void {
|
||||
|
||||
@@ -141,11 +141,15 @@ fn buildOne(arena: std.mem.Allocator, action: browser_tools.Action, td: browser_
|
||||
|
||||
fn buildHints(arena: std.mem.Allocator, required: []const []const u8, fields: []const FieldEntry) ![]const HintSlot {
|
||||
if (fields.len == 0 and required.len == 0) return &.{};
|
||||
// Worst case: every required name is absent from `properties`, so we emit
|
||||
// one slot per required entry plus one per field. The returned slice is
|
||||
// truncated to the actual count.
|
||||
const out = try arena.alloc(HintSlot, required.len + fields.len);
|
||||
var optional_count: usize = 0;
|
||||
for (fields) |f| {
|
||||
if (!containsName(required, f.name)) {
|
||||
optional_count += 1;
|
||||
}
|
||||
}
|
||||
const out = try arena.alloc(HintSlot, required.len + optional_count);
|
||||
var idx: usize = 0;
|
||||
defer std.debug.assert(idx == out.len);
|
||||
for (required) |name| {
|
||||
out[idx] = .{
|
||||
.name = name,
|
||||
@@ -163,7 +167,7 @@ fn buildHints(arena: std.mem.Allocator, required: []const []const u8, fields: []
|
||||
};
|
||||
idx += 1;
|
||||
}
|
||||
return out[0..idx];
|
||||
return out;
|
||||
}
|
||||
|
||||
fn containsName(names: []const []const u8, target: []const u8) bool {
|
||||
|
||||
Reference in New Issue
Block a user