| ... | @@ -135,11 +135,11 @@ pub fn nextAllocMax(self: *@This(), allocator: Allocator, when: AllocWhen, max_v | ... | @@ -135,11 +135,11 @@ pub fn nextAllocMax(self: *@This(), allocator: Allocator, when: AllocWhen, max_v |
| 135 | }; | 135 | }; |
| 136 | switch (token_type) { | 136 | switch (token_type) { |
| 137 | .number, .string => { | 137 | .number, .string => { |
| 138 | var value_list = std.array_list.Managed(u8).init(allocator); | 138 | var value_list: std.ArrayList(u8) = .empty; |
| 139 | errdefer { | 139 | errdefer { |
| 140 | value_list.deinit(); | 140 | value_list.deinit(allocator); |
| 141 | } | 141 | } |
| 142 | if (self.allocNextIntoArrayListMax(&value_list, when, max_value_len) catch |e| switch (e) { | 142 | if (self.allocNextIntoArrayListMax(allocator, &value_list, when, max_value_len) catch |e| switch (e) { |
| 143 | error.BufferUnderrun => unreachable, | 143 | error.BufferUnderrun => unreachable, |
| 144 | else => |err| return err, | 144 | else => |err| return err, |
| 145 | }) |slice| { | 145 | }) |slice| { |
| ... | @@ -149,9 +149,9 @@ pub fn nextAllocMax(self: *@This(), allocator: Allocator, when: AllocWhen, max_v | ... | @@ -149,9 +149,9 @@ pub fn nextAllocMax(self: *@This(), allocator: Allocator, when: AllocWhen, max_v |
| 149 | Token{ .string = slice }; | 149 | Token{ .string = slice }; |
| 150 | } else { | 150 | } else { |
| 151 | return if (token_type == .number) | 151 | return if (token_type == .number) |
| 152 | Token{ .allocated_number = try value_list.toOwnedSlice() } | 152 | Token{ .allocated_number = try value_list.toOwnedSlice(allocator) } |
| 153 | else | 153 | else |
| 154 | Token{ .allocated_string = try value_list.toOwnedSlice() }; | 154 | Token{ .allocated_string = try value_list.toOwnedSlice(allocator) }; |
| 155 | } | 155 | } |
| 156 | }, | 156 | }, |
| 157 | | 157 | |
| ... | @@ -172,8 +172,8 @@ pub fn nextAllocMax(self: *@This(), allocator: Allocator, when: AllocWhen, max_v | ... | @@ -172,8 +172,8 @@ pub fn nextAllocMax(self: *@This(), allocator: Allocator, when: AllocWhen, max_v |
| 172 | } | 172 | } |
| 173 | | 173 | |
| 174 | /// Equivalent to `allocNextIntoArrayListMax(value_list, when, default_max_value_len);` | 174 | /// Equivalent to `allocNextIntoArrayListMax(value_list, when, default_max_value_len);` |
| 175 | pub fn allocNextIntoArrayList(self: *@This(), value_list: *std.array_list.Managed(u8), when: AllocWhen) AllocIntoArrayListError!?[]const u8 { | 175 | pub fn allocNextIntoArrayList(self: *@This(), allocator: Allocator, value_list: *std.ArrayList(u8), when: AllocWhen) AllocIntoArrayListError!?[]const u8 { |
| 176 | return self.allocNextIntoArrayListMax(value_list, when, default_max_value_len); | 176 | return self.allocNextIntoArrayListMax(allocator, value_list, when, default_max_value_len); |
| 177 | } | 177 | } |
| 178 | /// The next token type must be either `.number` or `.string`. See `peekNextTokenType()`. | 178 | /// The next token type must be either `.number` or `.string`. See `peekNextTokenType()`. |
| 179 | /// When allocation is not necessary with `.alloc_if_needed`, | 179 | /// When allocation is not necessary with `.alloc_if_needed`, |
| ... | @@ -185,25 +185,25 @@ pub fn allocNextIntoArrayList(self: *@This(), value_list: *std.array_list.Manage | ... | @@ -185,25 +185,25 @@ pub fn allocNextIntoArrayList(self: *@This(), value_list: *std.array_list.Manage |
| 185 | /// can be resumed by passing the same array list in again. | 185 | /// can be resumed by passing the same array list in again. |
| 186 | /// This method does not indicate whether the token content being returned is for a `.number` or `.string` token type; | 186 | /// This method does not indicate whether the token content being returned is for a `.number` or `.string` token type; |
| 187 | /// the caller of this method is expected to know which type of token is being processed. | 187 | /// the caller of this method is expected to know which type of token is being processed. |
| 188 | pub fn allocNextIntoArrayListMax(self: *@This(), value_list: *std.array_list.Managed(u8), when: AllocWhen, max_value_len: usize) AllocIntoArrayListError!?[]const u8 { | 188 | pub fn allocNextIntoArrayListMax(self: *@This(), allocator: Allocator, value_list: *std.ArrayList(u8), when: AllocWhen, max_value_len: usize) AllocIntoArrayListError!?[]const u8 { |
| 189 | while (true) { | 189 | while (true) { |
| 190 | const token = try self.next(); | 190 | const token = try self.next(); |
| 191 | switch (token) { | 191 | switch (token) { |
| 192 | // Accumulate partial values. | 192 | // Accumulate partial values. |
| 193 | .partial_number, .partial_string => |slice| { | 193 | .partial_number, .partial_string => |slice| { |
| 194 | try appendSlice(value_list, slice, max_value_len); | 194 | try appendSlice(allocator, value_list, slice, max_value_len); |
| 195 | }, | 195 | }, |
| 196 | .partial_string_escaped_1 => |buf| { | 196 | .partial_string_escaped_1 => |buf| { |
| 197 | try appendSlice(value_list, buf[0..], max_value_len); | 197 | try appendSlice(allocator, value_list, buf[0..], max_value_len); |
| 198 | }, | 198 | }, |
| 199 | .partial_string_escaped_2 => |buf| { | 199 | .partial_string_escaped_2 => |buf| { |
| 200 | try appendSlice(value_list, buf[0..], max_value_len); | 200 | try appendSlice(allocator, value_list, buf[0..], max_value_len); |
| 201 | }, | 201 | }, |
| 202 | .partial_string_escaped_3 => |buf| { | 202 | .partial_string_escaped_3 => |buf| { |
| 203 | try appendSlice(value_list, buf[0..], max_value_len); | 203 | try appendSlice(allocator, value_list, buf[0..], max_value_len); |
| 204 | }, | 204 | }, |
| 205 | .partial_string_escaped_4 => |buf| { | 205 | .partial_string_escaped_4 => |buf| { |
| 206 | try appendSlice(value_list, buf[0..], max_value_len); | 206 | try appendSlice(allocator, value_list, buf[0..], max_value_len); |
| 207 | }, | 207 | }, |
| 208 | | 208 | |
| 209 | // Return complete values. | 209 | // Return complete values. |
| ... | @@ -212,7 +212,7 @@ pub fn allocNextIntoArrayListMax(self: *@This(), value_list: *std.array_list.Man | ... | @@ -212,7 +212,7 @@ pub fn allocNextIntoArrayListMax(self: *@This(), value_list: *std.array_list.Man |
| 212 | // No alloc necessary. | 212 | // No alloc necessary. |
| 213 | return slice; | 213 | return slice; |
| 214 | } | 214 | } |
| 215 | try appendSlice(value_list, slice, max_value_len); | 215 | try appendSlice(allocator, value_list, slice, max_value_len); |
| 216 | // The token is complete. | 216 | // The token is complete. |
| 217 | return null; | 217 | return null; |
| 218 | }, | 218 | }, |
| ... | @@ -221,7 +221,7 @@ pub fn allocNextIntoArrayListMax(self: *@This(), value_list: *std.array_list.Man | ... | @@ -221,7 +221,7 @@ pub fn allocNextIntoArrayListMax(self: *@This(), value_list: *std.array_list.Man |
| 221 | // No alloc necessary. | 221 | // No alloc necessary. |
| 222 | return slice; | 222 | return slice; |
| 223 | } | 223 | } |
| 224 | try appendSlice(value_list, slice, max_value_len); | 224 | try appendSlice(allocator, value_list, slice, max_value_len); |
| 225 | // The token is complete. | 225 | // The token is complete. |
| 226 | return null; | 226 | return null; |
| 227 | }, | 227 | }, |
| ... | @@ -1607,20 +1607,20 @@ pub const Reader = struct { | ... | @@ -1607,20 +1607,20 @@ pub const Reader = struct { |
| 1607 | const token_type = try self.peekNextTokenType(); | 1607 | const token_type = try self.peekNextTokenType(); |
| 1608 | switch (token_type) { | 1608 | switch (token_type) { |
| 1609 | .number, .string => { | 1609 | .number, .string => { |
| 1610 | var value_list = std.array_list.Managed(u8).init(allocator); | 1610 | var value_list: std.ArrayList(u8) = .empty; |
| 1611 | errdefer { | 1611 | errdefer { |
| 1612 | value_list.deinit(); | 1612 | value_list.deinit(allocator); |
| 1613 | } | 1613 | } |
| 1614 | if (try self.allocNextIntoArrayListMax(&value_list, when, max_value_len)) |slice| { | 1614 | if (try self.allocNextIntoArrayListMax(allocator, &value_list, when, max_value_len)) |slice| { |
| 1615 | return if (token_type == .number) | 1615 | return if (token_type == .number) |
| 1616 | Token{ .number = slice } | 1616 | Token{ .number = slice } |
| 1617 | else | 1617 | else |
| 1618 | Token{ .string = slice }; | 1618 | Token{ .string = slice }; |
| 1619 | } else { | 1619 | } else { |
| 1620 | return if (token_type == .number) | 1620 | return if (token_type == .number) |
| 1621 | Token{ .allocated_number = try value_list.toOwnedSlice() } | 1621 | Token{ .allocated_number = try value_list.toOwnedSlice(allocator) } |
| 1622 | else | 1622 | else |
| 1623 | Token{ .allocated_string = try value_list.toOwnedSlice() }; | 1623 | Token{ .allocated_string = try value_list.toOwnedSlice(allocator) }; |
| 1624 | } | 1624 | } |
| 1625 | }, | 1625 | }, |
| 1626 | | 1626 | |
| ... | @@ -1638,13 +1638,19 @@ pub const Reader = struct { | ... | @@ -1638,13 +1638,19 @@ pub const Reader = struct { |
| 1638 | } | 1638 | } |
| 1639 | | 1639 | |
| 1640 | /// Equivalent to `allocNextIntoArrayListMax(value_list, when, default_max_value_len);` | 1640 | /// Equivalent to `allocNextIntoArrayListMax(value_list, when, default_max_value_len);` |
| 1641 | pub fn allocNextIntoArrayList(self: *@This(), value_list: *std.array_list.Managed(u8), when: AllocWhen) Reader.AllocError!?[]const u8 { | 1641 | pub fn allocNextIntoArrayList(self: *@This(), allocator: Allocator, value_list: *std.ArrayList(u8), when: AllocWhen) Reader.AllocError!?[]const u8 { |
| 1642 | return self.allocNextIntoArrayListMax(value_list, when, default_max_value_len); | 1642 | return self.allocNextIntoArrayListMax(allocator, value_list, when, default_max_value_len); |
| 1643 | } | 1643 | } |
| 1644 | /// Calls `std.json.Scanner.allocNextIntoArrayListMax` and handles `error.BufferUnderrun`. | 1644 | /// Calls `std.json.Scanner.allocNextIntoArrayListMax` and handles `error.BufferUnderrun`. |
| 1645 | pub fn allocNextIntoArrayListMax(self: *@This(), value_list: *std.array_list.Managed(u8), when: AllocWhen, max_value_len: usize) Reader.AllocError!?[]const u8 { | 1645 | pub fn allocNextIntoArrayListMax( |
| | 1646 | self: *@This(), |
| | 1647 | allocator: Allocator, |
| | 1648 | value_list: *std.ArrayList(u8), |
| | 1649 | when: AllocWhen, |
| | 1650 | max_value_len: usize, |
| | 1651 | ) Reader.AllocError!?[]const u8 { |
| 1646 | while (true) { | 1652 | while (true) { |
| 1647 | return self.scanner.allocNextIntoArrayListMax(value_list, when, max_value_len) catch |err| switch (err) { | 1653 | return self.scanner.allocNextIntoArrayListMax(allocator, value_list, when, max_value_len) catch |err| switch (err) { |
| 1648 | error.BufferUnderrun => { | 1654 | error.BufferUnderrun => { |
| 1649 | try self.refillBuffer(); | 1655 | try self.refillBuffer(); |
| 1650 | continue; | 1656 | continue; |
| ... | @@ -1745,10 +1751,10 @@ pub const Reader = struct { | ... | @@ -1745,10 +1751,10 @@ pub const Reader = struct { |
| 1745 | const OBJECT_MODE = 0; | 1751 | const OBJECT_MODE = 0; |
| 1746 | const ARRAY_MODE = 1; | 1752 | const ARRAY_MODE = 1; |
| 1747 | | 1753 | |
| 1748 | fn appendSlice(list: *std.array_list.Managed(u8), buf: []const u8, max_value_len: usize) !void { | 1754 | fn appendSlice(allocator: Allocator, list: *std.ArrayList(u8), buf: []const u8, max_value_len: usize) !void { |
| 1749 | const new_len = std.math.add(usize, list.items.len, buf.len) catch return error.ValueTooLong; | 1755 | const new_len = std.math.add(usize, list.items.len, buf.len) catch return error.ValueTooLong; |
| 1750 | if (new_len > max_value_len) return error.ValueTooLong; | 1756 | if (new_len > max_value_len) return error.ValueTooLong; |
| 1751 | try list.appendSlice(buf); | 1757 | try list.appendSlice(allocator, buf); |
| 1752 | } | 1758 | } |
| 1753 | | 1759 | |
| 1754 | /// For the slice you get from a `Token.number` or `Token.allocated_number`, | 1760 | /// For the slice you get from a `Token.number` or `Token.allocated_number`, |