diff options
| author | 2021-08-17 21:19:45 -0700 | |
|---|---|---|
| committer | 2021-08-17 21:19:45 -0700 | |
| commit | 6585226de721bc43b17a66fad90738a38937f210 (patch) | |
| tree | 92150bb914b508c022f83ad6324496340006c0f5 /src | |
| parent | bbe0a3d58ccb420fe94b8d59934b2b54ed71f295 (diff) | |
| download | bun-6585226de721bc43b17a66fad90738a38937f210.tar.gz bun-6585226de721bc43b17a66fad90738a38937f210.tar.zst bun-6585226de721bc43b17a66fad90738a38937f210.zip | |
Ignore
Former-commit-id: b2c4fce705222612b0457481657db3f42db41d1c
Diffstat (limited to '')
| -rw-r--r-- | src/bundler.zig | 10 | ||||
| -rw-r--r-- | src/cache.zig | 4 | ||||
| -rw-r--r-- | src/logger.zig | 36 | 
3 files changed, 43 insertions, 7 deletions
| diff --git a/src/bundler.zig b/src/bundler.zig index 105d29f54..ac340a15b 100644 --- a/src/bundler.zig +++ b/src/bundler.zig @@ -993,7 +993,7 @@ pub fn NewBundler(cache_files: bool) type {                                  true,                                  null,                              ); -                            const source = logger.Source.initFile(Fs.File{ .path = file_path, .contents = entry.contents }, bundler.allocator) catch return null; +                            const source = logger.Source.initRecycledFile(Fs.File{ .path = file_path, .contents = entry.contents }, bundler.allocator) catch return null;                              const source_dir = file_path.name.dirWithTrailingSlash();                              var jsx = bundler.options.jsx; @@ -1275,7 +1275,7 @@ pub fn NewBundler(cache_files: bool) type {                                  null,                              ) catch return; -                            const source = logger.Source.initFile(Fs.File{ .path = file_path, .contents = entry.contents }, bundler.allocator) catch return null; +                            const source = logger.Source.initRecycledFile(Fs.File{ .path = file_path, .contents = entry.contents }, bundler.allocator) catch return null;                              const source_dir = file_path.name.dirWithTrailingSlash();                              var jsx = bundler.options.jsx; @@ -1594,8 +1594,8 @@ pub fn NewBundler(cache_files: bool) type {                      ) catch return null;                      const _file = Fs.File{ .path = file_path, .contents = entry.contents }; -                    const source = try logger.Source.initFile(_file, bundler.allocator); - +                    var source = try logger.Source.initFile(_file, bundler.allocator); +                    source.contents_is_recycled = !cache_files;                      var css_writer = CSSWriter.init(                          &source,                          file, @@ -1792,7 +1792,7 @@ pub fn NewBundler(cache_files: bool) type {                          file_descriptor,                      ) catch return null;                      input_fd = entry.fd; -                    break :brk logger.Source.initFile(Fs.File{ .path = path, .contents = entry.contents }, bundler.allocator) catch return null; +                    break :brk logger.Source.initRecycledFile(Fs.File{ .path = path, .contents = entry.contents }, bundler.allocator) catch return null;                  }              }; diff --git a/src/cache.zig b/src/cache.zig index efc2a90c7..96713adca 100644 --- a/src/cache.zig +++ b/src/cache.zig @@ -185,7 +185,7 @@ pub fn NewCache(comptime cache_files: bool) type {                  source: *const logger.Source,              ) anyerror!?js_ast.Ast {                  var temp_log = logger.Log.init(allocator); -                defer temp_log.appendTo(log) catch {}; +                defer temp_log.appendToMaybeRecycled(log, source) catch {};                  var parser = js_parser.Parser.init(opts, &temp_log, source, defines, allocator) catch |err| {                      return null;                  }; @@ -205,7 +205,7 @@ pub fn NewCache(comptime cache_files: bool) type {                  source: *const logger.Source,              ) anyerror!void {                  var temp_log = logger.Log.init(allocator); -                defer temp_log.appendTo(log) catch {}; +                defer temp_log.appendToMaybeRecycled(log, source) catch {};                  var parser = js_parser.Parser.init(opts, &temp_log, source, defines, allocator) catch |err| {                      return; diff --git a/src/logger.zig b/src/logger.zig index a5f4eeae2..8904ee1e1 100644 --- a/src/logger.zig +++ b/src/logger.zig @@ -365,6 +365,25 @@ pub const Log = struct {          self.msgs.deinit();      } +    pub fn appendToMaybeRecycled(self: *Log, other: *Log, source: *const Source) !void { +        if (source.contents_is_recycled) { +            for (self.msgs.items) |*_msg| { +                var msg: *Msg = _msg; +                if (msg.data.location) |*location| { +                    if (location.line_text) |line_text| { +                        location.line_text = try other.msgs.allocator.dupe(u8, line_text); +                    } +                } +            } +        } + +        try other.msgs.appendSlice(self.msgs.items); +        other.warnings += self.warnings; +        other.errors += self.errors; + +        self.msgs.deinit(); +    } +      pub fn deinit(self: *Log) void {          self.msgs.deinit();      } @@ -547,6 +566,7 @@ pub const Source = struct {      key_path: fs.Path,      index: u32 = 0,      contents: string, +    contents_is_recycled: bool = false,      // An identifier that is mixed in to automatically-generated symbol names to      // improve readability. For example, if the identifier is "util" then the @@ -574,6 +594,22 @@ pub const Source = struct {          return source;      } +    pub fn initRecycledFile(file: fs.File, allocator: *std.mem.Allocator) !Source { +        var name = file.path.name; +        var identifier_name = name.nonUniqueNameString(allocator) catch unreachable; + +        var source = Source{ +            .path = file.path, +            .key_path = fs.Path.init(file.path.text), +            .identifier_name = identifier_name, +            .contents = file.contents, +            .contents_is_recycled = true, +        }; +        source.path.namespace = "file"; + +        return source; +    } +      pub fn initPathString(pathString: string, contents: string) Source {          var path = fs.Path.init(pathString);          return Source{ .key_path = path, .path = path, .identifier_name = path.name.base, .contents = contents }; | 
