| ... | ... | @@ -361,9 +361,9 @@ const ReadError = error{ |
| 361 | 361 | }; |
| 362 | 362 | |
| 363 | 363 | /// Parse the trie from a byte stream. |
| 364 | | pub fn read(self: *Trie, reader: anytype) ReadError!usize { |
| 365 | | try self.createRoot(); |
| 366 | | return self.root.?.read(self.allocator, reader); |
| 364 | pub fn read(self: *Trie, allocator: *Allocator, reader: anytype) ReadError!usize { |
| 365 | try self.createRoot(allocator); |
| 366 | return self.root.?.read(allocator, reader); |
| 367 | 367 | } |
| 368 | 368 | |
| 369 | 369 | /// Write the trie to a byte stream. |
| ... | ... | @@ -396,13 +396,13 @@ fn createRoot(self: *Trie, allocator: *Allocator) !void { |
| 396 | 396 | |
| 397 | 397 | test "Trie node count" { |
| 398 | 398 | var gpa = testing.allocator; |
| 399 | | var trie = Trie.init(gpa); |
| 400 | | defer trie.deinit(); |
| 399 | var trie: Trie = .{}; |
| 400 | defer trie.deinit(gpa); |
| 401 | 401 | |
| 402 | 402 | try testing.expectEqual(trie.node_count, 0); |
| 403 | 403 | try testing.expect(trie.root == null); |
| 404 | 404 | |
| 405 | | try trie.put(.{ |
| 405 | try trie.put(gpa, .{ |
| 406 | 406 | .name = "_main", |
| 407 | 407 | .vmaddr_offset = 0, |
| 408 | 408 | .export_flags = 0, |
| ... | ... | @@ -410,14 +410,14 @@ test "Trie node count" { |
| 410 | 410 | try testing.expectEqual(trie.node_count, 2); |
| 411 | 411 | |
| 412 | 412 | // Inserting the same node shouldn't update the trie. |
| 413 | | try trie.put(.{ |
| 413 | try trie.put(gpa, .{ |
| 414 | 414 | .name = "_main", |
| 415 | 415 | .vmaddr_offset = 0, |
| 416 | 416 | .export_flags = 0, |
| 417 | 417 | }); |
| 418 | 418 | try testing.expectEqual(trie.node_count, 2); |
| 419 | 419 | |
| 420 | | try trie.put(.{ |
| 420 | try trie.put(gpa, .{ |
| 421 | 421 | .name = "__mh_execute_header", |
| 422 | 422 | .vmaddr_offset = 0x1000, |
| 423 | 423 | .export_flags = 0, |
| ... | ... | @@ -425,13 +425,13 @@ test "Trie node count" { |
| 425 | 425 | try testing.expectEqual(trie.node_count, 4); |
| 426 | 426 | |
| 427 | 427 | // Inserting the same node shouldn't update the trie. |
| 428 | | try trie.put(.{ |
| 428 | try trie.put(gpa, .{ |
| 429 | 429 | .name = "__mh_execute_header", |
| 430 | 430 | .vmaddr_offset = 0x1000, |
| 431 | 431 | .export_flags = 0, |
| 432 | 432 | }); |
| 433 | 433 | try testing.expectEqual(trie.node_count, 4); |
| 434 | | try trie.put(.{ |
| 434 | try trie.put(gpa, .{ |
| 435 | 435 | .name = "_main", |
| 436 | 436 | .vmaddr_offset = 0, |
| 437 | 437 | .export_flags = 0, |
| ... | ... | @@ -441,11 +441,11 @@ test "Trie node count" { |
| 441 | 441 | |
| 442 | 442 | test "Trie basic" { |
| 443 | 443 | var gpa = testing.allocator; |
| 444 | | var trie = Trie.init(gpa); |
| 445 | | defer trie.deinit(); |
| 444 | var trie: Trie = .{}; |
| 445 | defer trie.deinit(gpa); |
| 446 | 446 | |
| 447 | 447 | // root --- _st ---> node |
| 448 | | try trie.put(.{ |
| 448 | try trie.put(gpa, .{ |
| 449 | 449 | .name = "_st", |
| 450 | 450 | .vmaddr_offset = 0, |
| 451 | 451 | .export_flags = 0, |
| ... | ... | @@ -455,7 +455,7 @@ test "Trie basic" { |
| 455 | 455 | |
| 456 | 456 | { |
| 457 | 457 | // root --- _st ---> node --- art ---> node |
| 458 | | try trie.put(.{ |
| 458 | try trie.put(gpa, .{ |
| 459 | 459 | .name = "_start", |
| 460 | 460 | .vmaddr_offset = 0, |
| 461 | 461 | .export_flags = 0, |
| ... | ... | @@ -471,7 +471,7 @@ test "Trie basic" { |
| 471 | 471 | // root --- _ ---> node --- st ---> node --- art ---> node |
| 472 | 472 | // | |
| 473 | 473 | // | --- main ---> node |
| 474 | | try trie.put(.{ |
| 474 | try trie.put(gpa, .{ |
| 475 | 475 | .name = "_main", |
| 476 | 476 | .vmaddr_offset = 0, |
| 477 | 477 | .export_flags = 0, |
| ... | ... | @@ -491,22 +491,22 @@ test "Trie basic" { |
| 491 | 491 | |
| 492 | 492 | test "write Trie to a byte stream" { |
| 493 | 493 | var gpa = testing.allocator; |
| 494 | | var trie = Trie.init(gpa); |
| 495 | | defer trie.deinit(); |
| 494 | var trie: Trie = .{}; |
| 495 | defer trie.deinit(gpa); |
| 496 | 496 | |
| 497 | | try trie.put(.{ |
| 497 | try trie.put(gpa, .{ |
| 498 | 498 | .name = "__mh_execute_header", |
| 499 | 499 | .vmaddr_offset = 0, |
| 500 | 500 | .export_flags = 0, |
| 501 | 501 | }); |
| 502 | | try trie.put(.{ |
| 502 | try trie.put(gpa, .{ |
| 503 | 503 | .name = "_main", |
| 504 | 504 | .vmaddr_offset = 0x1000, |
| 505 | 505 | .export_flags = 0, |
| 506 | 506 | }); |
| 507 | 507 | |
| 508 | | try trie.finalize(); |
| 509 | | try trie.finalize(); // Finalizing mulitple times is a nop subsequently unless we add new nodes. |
| 508 | try trie.finalize(gpa); |
| 509 | try trie.finalize(gpa); // Finalizing mulitple times is a nop subsequently unless we add new nodes. |
| 510 | 510 | |
| 511 | 511 | const exp_buffer = [_]u8{ |
| 512 | 512 | 0x0, 0x1, // node root |
| ... | ... | @@ -551,13 +551,13 @@ test "parse Trie from byte stream" { |
| 551 | 551 | }; |
| 552 | 552 | |
| 553 | 553 | var in_stream = std.io.fixedBufferStream(&in_buffer); |
| 554 | | var trie = Trie.init(gpa); |
| 555 | | defer trie.deinit(); |
| 556 | | const nread = try trie.read(in_stream.reader()); |
| 554 | var trie: Trie = .{}; |
| 555 | defer trie.deinit(gpa); |
| 556 | const nread = try trie.read(gpa, in_stream.reader()); |
| 557 | 557 | |
| 558 | 558 | try testing.expect(nread == in_buffer.len); |
| 559 | 559 | |
| 560 | | try trie.finalize(); |
| 560 | try trie.finalize(gpa); |
| 561 | 561 | |
| 562 | 562 | var out_buffer = try gpa.alloc(u8, trie.size); |
| 563 | 563 | defer gpa.free(out_buffer); |