| ... | @@ -264,8 +264,11 @@ fn render_autoconf( | ... | @@ -264,8 +264,11 @@ fn render_autoconf( |
| 264 | values: std.StringArrayHashMap(Value), | 264 | values: std.StringArrayHashMap(Value), |
| 265 | src_path: []const u8, | 265 | src_path: []const u8, |
| 266 | ) !void { | 266 | ) !void { |
| 267 | var values_copy = try values.clone(); | 267 | const build = step.owner; |
| 268 | defer values_copy.deinit(); | 268 | const allocator = build.allocator; |
| | 269 | |
| | 270 | var is_used: std.DynamicBitSetUnmanaged = try .initEmpty(allocator, values.count()); |
| | 271 | defer is_used.deinit(allocator); |
| 269 | | 272 | |
| 270 | var any_errors = false; | 273 | var any_errors = false; |
| 271 | var line_index: u32 = 0; | 274 | var line_index: u32 = 0; |
| ... | @@ -284,18 +287,20 @@ fn render_autoconf( | ... | @@ -284,18 +287,20 @@ fn render_autoconf( |
| 284 | continue; | 287 | continue; |
| 285 | } | 288 | } |
| 286 | const name = it.rest(); | 289 | const name = it.rest(); |
| 287 | const kv = values_copy.fetchSwapRemove(name) orelse { | 290 | const index = values.getIndex(name) orelse { |
| 288 | try step.addError("{s}:{d}: error: unspecified config header value: '{s}'", .{ | 291 | try step.addError("{s}:{d}: error: unspecified config header value: '{s}'", .{ |
| 289 | src_path, line_index + 1, name, | 292 | src_path, line_index + 1, name, |
| 290 | }); | 293 | }); |
| 291 | any_errors = true; | 294 | any_errors = true; |
| 292 | continue; | 295 | continue; |
| 293 | }; | 296 | }; |
| 294 | try renderValueC(output, name, kv.value); | 297 | is_used.set(index); |
| | 298 | try renderValueC(output, name, values.values()[index]); |
| 295 | } | 299 | } |
| 296 | | 300 | |
| 297 | for (values_copy.keys()) |name| { | 301 | var unused_value_it = is_used.iterator(.{ .kind = .unset }); |
| 298 | try step.addError("{s}: error: config header value unused: '{s}'", .{ src_path, name }); | 302 | while (unused_value_it.next()) |index| { |
| | 303 | try step.addError("{s}: error: config header value unused: '{s}'", .{ src_path, values.keys()[index] }); |
| 299 | any_errors = true; | 304 | any_errors = true; |
| 300 | } | 305 | } |
| 301 | | 306 | |