aboutsummaryrefslogtreecommitdiff
path: root/src/json_parser.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/json_parser.zig')
-rw-r--r--src/json_parser.zig10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/json_parser.zig b/src/json_parser.zig
index fa9af406f..913a16bd6 100644
--- a/src/json_parser.zig
+++ b/src/json_parser.zig
@@ -141,8 +141,13 @@ fn JSONLikeParser_(
lexer: Lexer,
log: *logger.Log,
allocator: std.mem.Allocator,
+ list_allocator: std.mem.Allocator,
pub fn init(allocator: std.mem.Allocator, source_: logger.Source, log: *logger.Log) !Parser {
+ return initWithListAllocator(allocator, allocator, source_, log);
+ }
+
+ pub fn initWithListAllocator(allocator: std.mem.Allocator, list_allocator: std.mem.Allocator, source_: logger.Source, log: *logger.Log) !Parser {
Expr.Data.Store.assert();
Stmt.Data.Store.assert();
@@ -150,6 +155,7 @@ fn JSONLikeParser_(
.lexer = try Lexer.init(log, source_, allocator),
.allocator = allocator,
.log = log,
+ .list_allocator = list_allocator,
};
}
@@ -202,7 +208,7 @@ fn JSONLikeParser_(
.t_open_bracket => {
try p.lexer.next();
var is_single_line = !p.lexer.has_newline_before;
- var exprs = std.ArrayList(Expr).init(p.allocator);
+ var exprs = std.ArrayList(Expr).init(p.list_allocator);
while (p.lexer.token != .t_close_bracket) {
if (exprs.items.len > 0) {
@@ -235,7 +241,7 @@ fn JSONLikeParser_(
.t_open_brace => {
try p.lexer.next();
var is_single_line = !p.lexer.has_newline_before;
- var properties = std.ArrayList(G.Property).init(p.allocator);
+ var properties = std.ArrayList(G.Property).init(p.list_allocator);
const DuplicateNodeType = comptime if (opts.json_warn_duplicate_keys) *HashMapPool.LinkedList.Node else void;
const HashMapType = comptime if (opts.json_warn_duplicate_keys) HashMapPool.HashMap else void;