| ... | ... | @@ -460,35 +460,31 @@ pub const CacheHash = struct { |
| 460 | 460 | const dep_file_contents = try dir.readFileAlloc(self.cache.gpa, dep_file_basename, manifest_file_size_max); |
| 461 | 461 | defer self.cache.gpa.free(dep_file_contents); |
| 462 | 462 | |
| 463 | | const DepTokenizer = @import("DepTokenizer.zig"); |
| 464 | | var it = DepTokenizer.init(self.cache.gpa, dep_file_contents); |
| 465 | | defer it.deinit(); |
| 463 | var error_buf = std.ArrayList(u8).init(self.cache.gpa); |
| 464 | defer error_buf.deinit(); |
| 465 | |
| 466 | var it: @import("DepTokenizer.zig") = .{ .bytes = dep_file_contents }; |
| 466 | 467 | |
| 467 | 468 | // Skip first token: target. |
| 468 | | { |
| 469 | | const opt_result = it.next() catch |err| switch (err) { |
| 470 | | error.OutOfMemory => return error.OutOfMemory, |
| 471 | | error.InvalidInput => { |
| 472 | | std.log.err("failed parsing {}: {}: {}", .{ dep_file_basename, @errorName(err), it.error_text }); |
| 473 | | return error.InvalidDepFile; |
| 474 | | }, |
| 475 | | }; |
| 476 | | _ = opt_result orelse return; // Empty dep file OK. |
| 469 | switch (it.next() orelse return) { // Empty dep file OK. |
| 470 | .target, .target_must_resolve, .prereq => {}, |
| 471 | else => |err| { |
| 472 | try err.printError(error_buf.writer()); |
| 473 | std.log.err("failed parsing {}: {}", .{ dep_file_basename, error_buf.items }); |
| 474 | return error.InvalidDepFile; |
| 475 | }, |
| 477 | 476 | } |
| 478 | 477 | // Process 0+ preqreqs. |
| 479 | 478 | // Clang is invoked in single-source mode so we never get more targets. |
| 480 | 479 | while (true) { |
| 481 | | const opt_result = it.next() catch |err| switch (err) { |
| 482 | | error.OutOfMemory => return error.OutOfMemory, |
| 483 | | error.InvalidInput => { |
| 484 | | std.log.err("failed parsing {}: {}: {}", .{ dep_file_basename, @errorName(err), it.error_text }); |
| 480 | switch (it.next() orelse return) { |
| 481 | .target, .target_must_resolve => return, |
| 482 | .prereq => |bytes| try self.addFilePost(bytes), |
| 483 | else => |err| { |
| 484 | try err.printError(error_buf.writer()); |
| 485 | std.log.err("failed parsing {}: {}", .{ dep_file_basename, error_buf.items }); |
| 485 | 486 | return error.InvalidDepFile; |
| 486 | 487 | }, |
| 487 | | }; |
| 488 | | const result = opt_result orelse return; |
| 489 | | switch (result.id) { |
| 490 | | .target => return, |
| 491 | | .prereq => try self.addFilePost(result.bytes), |
| 492 | 488 | } |
| 493 | 489 | } |
| 494 | 490 | } |