authorgravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2024-10-27 02:59:49 -07:00
committergravatar for hello@nektro.netMeghan Denny <hello@nektro.net> 2024-10-27 02:59:49 -07:00
log5e02584768fd777be0a81bca2467ebcb012da32e
tree94f9ca838090ad15fcf56cbcf9fb753b2f6171ca
parent42bc1cb3dad77c9d3e010930ba634f7b53004fc4

remove alloc param from add methods so builder is easier to use


1 files changed, 20 insertions(+), 15 deletions(-)

json.zig+20-15
......@@ -95,7 +95,7 @@ fn parseObject(alloc: std.mem.Allocator, p: *Parser) anyerror!?ValueIndex {
9595 if (members.entries.len == 0) {
9696 return .empty_object;
9797 }
98 return try p.addObject(alloc, &members);
98 return try p.addObject(&members);
9999}
100100
101101fn parseArray(alloc: std.mem.Allocator, p: *Parser) anyerror!?ValueIndex {
......@@ -132,7 +132,7 @@ fn parseArray(alloc: std.mem.Allocator, p: *Parser) anyerror!?ValueIndex {
132132 if (elements.items.len == 0) {
133133 return .empty_array;
134134 }
135 return try p.addArray(alloc, elements.items);
135 return try p.addArray(elements.items);
136136}
137137
138138fn parseString(alloc: std.mem.Allocator, p: *Parser) anyerror!?StringIndex {
......@@ -179,7 +179,7 @@ fn parseString(alloc: std.mem.Allocator, p: *Parser) anyerror!?StringIndex {
179179 else => return error.MalformedJson,
180180 }
181181 }
182 return try p.addStr(alloc, characters.items);
182 return try p.addStr(characters.items);
183183}
184184
185185fn parseNumber(alloc: std.mem.Allocator, p: *Parser) anyerror!?ValueIndex {
......@@ -224,7 +224,7 @@ fn parseNumber(alloc: std.mem.Allocator, p: *Parser) anyerror!?ValueIndex {
224224 if (characters.items.len == l) return error.MalformedJson;
225225 }
226226
227 return try p.addNumber(alloc, characters.items);
227 return try p.addNumber(characters.items);
228228}
229229
230230fn parseWs(p: *Parser) !void {
......@@ -260,9 +260,9 @@ pub const Parser = struct {
260260 p.parser.data.appendAssumeCapacity(@intFromEnum(Value.Tag.null));
261261 p.parser.data.appendAssumeCapacity(@intFromEnum(Value.Tag.true));
262262 p.parser.data.appendAssumeCapacity(@intFromEnum(Value.Tag.false));
263 _ = try p.addStr(allocator, "");
264 std.debug.assert(try p.addArray(allocator, &.{}) == .empty_array);
265 std.debug.assert(try p.addObject(allocator, &ObjectHashMap{}) == .empty_object);
263 _ = try p.addStr("");
264 std.debug.assert(try p.addArray(&.{}) == .empty_array);
265 std.debug.assert(try p.addObject(&ObjectHashMap{}) == .empty_object);
266266
267267 return p;
268268 }
......@@ -280,10 +280,11 @@ pub const Parser = struct {
280280 pub usingnamespace intrusive_parser.Mixin(@This());
281281
282282 // tag(u8) + len(u32) + member_keys(N * u32) + member_values(N * u32)
283 pub fn addObject(p: *Parser, alloc: std.mem.Allocator, members: *const ObjectHashMap) !ValueIndex {
283 pub fn addObject(p: *Parser, members: *const ObjectHashMap) !ValueIndex {
284284 const t = tracer.trace(@src(), "({d})", .{members.entries.len});
285285 defer t.end();
286286
287 const alloc = p.parser.allocator;
287288 const r = p.parser.data.items.len;
288289 const l = members.entries.len;
289290 if (l > std.math.maxInt(u32)) return error.MalformedJson;
......@@ -295,22 +296,24 @@ pub const Parser = struct {
295296 return @enumFromInt(r);
296297 }
297298
298 pub fn addObjectFromConst(p: *Parser, alloc: std.mem.Allocator, members: []const struct { StringIndex, ValueIndex }) !ValueIndex {
299 pub fn addObjectFromConst(p: *Parser, members: []const struct { StringIndex, ValueIndex }) !ValueIndex {
299300 const t = tracer.trace(@src(), "({d})", .{members.len});
300301 defer t.end();
301302
303 const alloc = p.parser.allocator;
302304 var map = ObjectHashMap{};
303305 defer map.deinit(alloc);
304306 try map.ensureTotalCapacity(alloc, members.len);
305307 for (members) |member| map.putAssumeCapacity(member[0], member[1]);
306 return p.addObject(alloc, &map);
308 return p.addObject(&map);
307309 }
308310
309311 // tag(u8) + len(u32) + items(N * u32)
310 pub fn addArray(p: *Parser, alloc: std.mem.Allocator, items: []const ValueIndex) !ValueIndex {
312 pub fn addArray(p: *Parser, items: []const ValueIndex) !ValueIndex {
311313 const t = tracer.trace(@src(), "({d})", .{items.len});
312314 defer t.end();
313315
316 const alloc = p.parser.allocator;
314317 const r = p.parser.data.items.len;
315318 const l = items.len;
316319 if (l > std.math.maxInt(u32)) return error.MalformedJson;
......@@ -322,16 +325,17 @@ pub const Parser = struct {
322325 }
323326
324327 // tag(u8) + len(u32) + bytes(N)
325 pub fn addStr(p: *Parser, alloc: std.mem.Allocator, str: string) !StringIndex {
328 pub fn addStr(p: *Parser, str: string) !StringIndex {
326329 const t = tracer.trace(@src(), "({d})", .{str.len});
327330 defer t.end();
328331
332 const alloc = p.parser.allocator;
329333 return @enumFromInt(try p.parser.addStr(alloc, str));
330334 }
331335
332336 // tag(u8) + len(u32) + bytes(N)
333 pub fn addStrV(p: *Parser, alloc: std.mem.Allocator, str: string) !ValueIndex {
334 return @enumFromInt(@intFromEnum(try p.addStr(alloc, str)));
337 pub fn addStrV(p: *Parser, str: string) !ValueIndex {
338 return @enumFromInt(@intFromEnum(try p.addStr(str)));
335339 }
336340
337341 const Adapter = struct {
......@@ -351,10 +355,11 @@ pub const Parser = struct {
351355 }
352356 };
353357
354 pub fn addNumber(p: *Parser, alloc: std.mem.Allocator, v: []const u8) !ValueIndex {
358 pub fn addNumber(p: *Parser, v: []const u8) !ValueIndex {
355359 const t = tracer.trace(@src(), "({s})", .{v});
356360 defer t.end();
357361
362 const alloc = p.parser.allocator;
358363 const adapter: AdapterNum = .{ .p = p };
359364 const res = try p.numbers_map.getOrPutAdapted(alloc, v, adapter);
360365 if (res.found_existing) return @enumFromInt(@intFromEnum(res.value_ptr.*));