From fc907e2f81698d89502fb2ee0375e6d98a492c13 Mon Sep 17 00:00:00 2001 From: Jarred Sumner Date: Thu, 9 Sep 2021 23:33:34 -0700 Subject: current --- src/json_parser.zig | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/json_parser.zig') diff --git a/src/json_parser.zig b/src/json_parser.zig index 8f8f415f3..4bb20f1cc 100644 --- a/src/json_parser.zig +++ b/src/json_parser.zig @@ -142,7 +142,7 @@ fn JSONLikeParser(opts: js_lexer.JSONOptions) type { try p.lexer.next(); var is_single_line = !p.lexer.has_newline_before; var properties = std.ArrayList(G.Property).init(p.allocator); - var duplicates = std.BufSet.init(p.allocator); + var duplicates = std.AutoHashMap(u64, void).init(p.allocator); defer duplicates.deinit(); while (p.lexer.token != .t_close_brace) { @@ -159,13 +159,13 @@ fn JSONLikeParser(opts: js_lexer.JSONOptions) type { } var str = p.lexer.toEString(); - const is_duplicate = duplicates.contains(p.lexer.string_literal_slice); - if (!is_duplicate) { - duplicates.insert(p.lexer.string_literal_slice) catch unreachable; - } + const hash_key = str.hash(); + const duplicate_get_or_put = duplicates.getOrPut(hash_key) catch unreachable; + duplicate_get_or_put.key_ptr.* = hash_key; + var key_range = p.lexer.range(); // Warn about duplicate keys - if (is_duplicate) { + if (duplicate_get_or_put.found_existing) { p.log.addRangeWarningFmt(p.source, key_range, p.allocator, "Duplicate key \"{s}\" in object literal", .{p.lexer.string_literal_slice}) catch unreachable; } -- cgit v1.2.3