diff options
author | 2021-05-29 13:33:48 -0700 | |
---|---|---|
committer | 2021-05-29 13:33:48 -0700 | |
commit | 3436ee9deddf21594a0b4fb3640a7596ea078093 (patch) | |
tree | c053cad5df831b5c376f404879c28e6e69d6cc7e /src/bundler.zig | |
parent | 923e2c5c5d43adce832c8eb4999a8070dbd8cced (diff) | |
download | bun-3436ee9deddf21594a0b4fb3640a7596ea078093.tar.gz bun-3436ee9deddf21594a0b4fb3640a7596ea078093.tar.zst bun-3436ee9deddf21594a0b4fb3640a7596ea078093.zip |
microp
Former-commit-id: b876a8d4800779c6728a61ec51cd168d7307bc9d
Diffstat (limited to 'src/bundler.zig')
-rw-r--r-- | src/bundler.zig | 42 |
1 files changed, 29 insertions, 13 deletions
diff --git a/src/bundler.zig b/src/bundler.zig index 4d88b27f2..42b515678 100644 --- a/src/bundler.zig +++ b/src/bundler.zig @@ -52,6 +52,7 @@ pub const ServeResult = struct { // const BundleMap = const ResolveResults = ThreadSafeHashMap.ThreadSafeStringHashMap(Resolver.Resolver.Result); +const ResolveQueue = std.fifo.LinearFifo(Resolver.Resolver.Result, std.fifo.LinearFifoBufferType.Dynamic); pub const Bundler = struct { options: options.BundleOptions, log: *logger.Log, @@ -62,7 +63,7 @@ pub const Bundler = struct { // thread_pool: *ThreadPool, output_files: std.ArrayList(options.OutputFile), resolve_results: *ResolveResults, - resolve_queue: std.fifo.LinearFifo(Resolver.Resolver.Result, std.fifo.LinearFifoBufferType.Dynamic), + resolve_queue: ResolveQueue, elapsed: i128 = 0, needs_runtime: bool = false, @@ -96,7 +97,7 @@ pub const Bundler = struct { // .thread_pool = pool, .result = options.TransformResult{ .outbase = bundle_options.output_dir }, .resolve_results = try ResolveResults.init(allocator), - .resolve_queue = std.fifo.LinearFifo(Resolver.Resolver.Result, std.fifo.LinearFifoBufferType.Dynamic).init(allocator), + .resolve_queue = ResolveQueue.init(allocator), .output_files = std.ArrayList(options.OutputFile).init(allocator), }; } @@ -171,20 +172,32 @@ pub const Bundler = struct { // Run the resolver // Don't parse/print automatically. if (bundler.options.resolve_mode != .lazy) { - var hash_key = resolve_result.path_pair.primary.text; + try bundler.enqueueResolveResult(&resolve_result); + } - // Shorter hash key is faster to hash - if (strings.startsWith(resolve_result.path_pair.primary.text, bundler.fs.top_level_dir)) { - hash_key = resolve_result.path_pair.primary.text[bundler.fs.top_level_dir.len..]; - } + import_record.path = try bundler.generateImportPath(source_dir, resolve_result.path_pair.primary.text); + } - if (!bundler.resolve_results.contains(hash_key)) { - try bundler.resolve_results.put(hash_key, resolve_result); - try bundler.resolve_queue.writeItem(resolve_result); - } + pub fn resolveResultHashKey(bundler: *Bundler, resolve_result: *Resolver.Resolver.Result) string { + var hash_key = resolve_result.path_pair.primary.text; + + // Shorter hash key is faster to hash + if (strings.startsWith(resolve_result.path_pair.primary.text, bundler.fs.top_level_dir)) { + hash_key = resolve_result.path_pair.primary.text[bundler.fs.top_level_dir.len..]; } - import_record.path = try bundler.generateImportPath(source_dir, resolve_result.path_pair.primary.text); + return hash_key; + } + + pub fn enqueueResolveResult(bundler: *Bundler, resolve_result: *Resolver.Resolver.Result) !void { + const hash_key = bundler.resolveResultHashKey(resolve_result); + + const get_or_put_entry = try bundler.resolve_results.backing.getOrPut(hash_key); + + if (!get_or_put_entry.found_existing) { + get_or_put_entry.entry.value = resolve_result.*; + try bundler.resolve_queue.writeItem(resolve_result.*); + } } pub fn buildWithResolveResult(bundler: *Bundler, resolve_result: Resolver.Resolver.Result) !?options.OutputFile { @@ -608,7 +621,10 @@ pub const Bundler = struct { if (enableTracing) { Output.print( "\n---Tracing---\nResolve time: {d}\nParsing time: {d}\n---Tracing--\n\n", - .{ bundler.resolver.elapsed, bundler.elapsed }, + .{ + bundler.resolver.elapsed, + bundler.elapsed, + }, ); } |