diff options
Diffstat (limited to 'src/cache.zig')
| -rw-r--r-- | src/cache.zig | 46 |
1 files changed, 5 insertions, 41 deletions
diff --git a/src/cache.zig b/src/cache.zig index 56a706c5c..a25969668 100644 --- a/src/cache.zig +++ b/src/cache.zig @@ -164,31 +164,16 @@ pub const Cache = struct { log: *logger.Log, source: *const logger.Source, ) anyerror!?js_ast.Ast { - cache.mutex.lock(); - defer cache.mutex.unlock(); - - var get_or_put_result = try cache.entries.getOrPut(source.key_path.text); - - if (get_or_put_result.found_existing) { - return if (get_or_put_result.entry.value.ok) get_or_put_result.entry.value.ast else null; - } - var temp_log = logger.Log.init(allocator); + defer temp_log.appendTo(log) catch {}; var parser = js_parser.Parser.init(opts, &temp_log, source, defines, allocator) catch |err| { - temp_log.appendTo(log) catch {}; - get_or_put_result.entry.value = Result{ .ast = undefined, .ok = false }; - - return null; - }; - get_or_put_result.entry.value = parser.parse() catch |err| { - get_or_put_result.entry.value = Result{ .ast = undefined, .ok = false }; - temp_log.appendTo(log) catch {}; return null; }; - temp_log.appendTo(log) catch {}; - return if (get_or_put_result.entry.value.ok) get_or_put_result.entry.value.ast else null; + const result = try parser.parse(); + + return if (result.ok) result.ast else null; } }; @@ -209,34 +194,13 @@ pub const Cache = struct { }; } fn parse(cache: *@This(), log: *logger.Log, source: logger.Source, allocator: *std.mem.Allocator, is_tsconfig: bool, func: anytype) anyerror!?js_ast.Expr { - { - cache.mutex.lock(); - defer cache.mutex.unlock(); - if (cache.entries.get(source.key_path.text)) |entry| { - return entry.expr; - } - } - var temp_log = logger.Log.init(allocator); defer { temp_log.appendTo(log) catch {}; } - const expr = func(&source, &temp_log, allocator) catch handler: { + return func(&source, &temp_log, allocator) catch handler: { break :handler null; }; - const entry = try allocator.create(Entry); - entry.* = Entry{ - .is_tsconfig = is_tsconfig, - .source = source, - .expr = expr, - .ok = expr != null, - }; - - cache.mutex.lock(); - defer cache.mutex.unlock(); - std.debug.assert(source.key_path.text.len > 0); // missing key_path in source - try cache.entries.put(source.key_path.text, entry); - return entry.expr; } pub fn parseJSON(cache: *@This(), log: *logger.Log, source: logger.Source, allocator: *std.mem.Allocator) anyerror!?js_ast.Expr { return try parse(cache, log, source, allocator, false, json_parser.ParseJSON); |
