| ... | ... | @@ -486,6 +486,14 @@ fn addNode(mf: *MappedFile, gpa: std.mem.Allocator, opts: struct { |
| 486 | 486 | break :free .{ free_ni, free_node }; |
| 487 | 487 | }, |
| 488 | 488 | }; |
| 489 | switch (opts.prev) { |
| 490 | .none => opts.parent.get(mf).first = free_ni, |
| 491 | else => |prev_ni| prev_ni.get(mf).next = free_ni, |
| 492 | } |
| 493 | switch (opts.next) { |
| 494 | .none => opts.parent.get(mf).last = free_ni, |
| 495 | else => |next_ni| next_ni.get(mf).prev = free_ni, |
| 496 | } |
| 489 | 497 | free_node.* = .{ |
| 490 | 498 | .parent = opts.parent, |
| 491 | 499 | .prev = opts.prev, |
| ... | ... | @@ -535,13 +543,10 @@ pub fn addOnlyChildNode( |
| 535 | 543 | try mf.nodes.ensureUnusedCapacity(gpa, 1); |
| 536 | 544 | const parent = parent_ni.get(mf); |
| 537 | 545 | assert(parent.first == .none and parent.last == .none); |
| 538 | | const ni = try mf.addNode(gpa, .{ |
| 546 | return mf.addNode(gpa, .{ |
| 539 | 547 | .parent = parent_ni, |
| 540 | 548 | .add_node = opts, |
| 541 | 549 | }); |
| 542 | | parent.first = ni; |
| 543 | | parent.last = ni; |
| 544 | | return ni; |
| 545 | 550 | } |
| 546 | 551 | |
| 547 | 552 | pub fn addFirstChildNode( |
| ... | ... | @@ -552,17 +557,11 @@ pub fn addFirstChildNode( |
| 552 | 557 | ) !Node.Index { |
| 553 | 558 | try mf.nodes.ensureUnusedCapacity(gpa, 1); |
| 554 | 559 | const parent = parent_ni.get(mf); |
| 555 | | const ni = try mf.addNode(gpa, .{ |
| 560 | return mf.addNode(gpa, .{ |
| 556 | 561 | .parent = parent_ni, |
| 557 | 562 | .next = parent.first, |
| 558 | 563 | .add_node = opts, |
| 559 | 564 | }); |
| 560 | | switch (parent.first) { |
| 561 | | .none => parent.last = ni, |
| 562 | | else => |first_ni| first_ni.get(mf).prev = ni, |
| 563 | | } |
| 564 | | parent.first = ni; |
| 565 | | return ni; |
| 566 | 565 | } |
| 567 | 566 | |
| 568 | 567 | pub fn addLastChildNode( |
| ... | ... | @@ -573,7 +572,7 @@ pub fn addLastChildNode( |
| 573 | 572 | ) !Node.Index { |
| 574 | 573 | try mf.nodes.ensureUnusedCapacity(gpa, 1); |
| 575 | 574 | const parent = parent_ni.get(mf); |
| 576 | | const ni = try mf.addNode(gpa, .{ |
| 575 | return mf.addNode(gpa, .{ |
| 577 | 576 | .parent = parent_ni, |
| 578 | 577 | .prev = parent.last, |
| 579 | 578 | .offset = offset: switch (parent.last) { |
| ... | ... | @@ -585,12 +584,6 @@ pub fn addLastChildNode( |
| 585 | 584 | }, |
| 586 | 585 | .add_node = opts, |
| 587 | 586 | }); |
| 588 | | switch (parent.last) { |
| 589 | | .none => parent.first = ni, |
| 590 | | else => |last_ni| last_ni.get(mf).next = ni, |
| 591 | | } |
| 592 | | parent.last = ni; |
| 593 | | return ni; |
| 594 | 587 | } |
| 595 | 588 | |
| 596 | 589 | pub fn addNodeAfter( |
| ... | ... | @@ -603,19 +596,13 @@ pub fn addNodeAfter( |
| 603 | 596 | try mf.nodes.ensureUnusedCapacity(gpa, 1); |
| 604 | 597 | const prev = prev_ni.get(mf); |
| 605 | 598 | const prev_offset, const prev_size = prev.location().resolve(mf); |
| 606 | | const ni = try mf.addNode(gpa, .{ |
| 599 | return mf.addNode(gpa, .{ |
| 607 | 600 | .parent = prev.parent, |
| 608 | 601 | .prev = prev_ni, |
| 609 | 602 | .next = prev.next, |
| 610 | 603 | .offset = prev_offset + prev_size, |
| 611 | 604 | .add_node = opts, |
| 612 | 605 | }); |
| 613 | | switch (prev.next) { |
| 614 | | .none => prev.parent.get(mf).last = ni, |
| 615 | | else => |next_ni| next_ni.get(mf).prev = ni, |
| 616 | | } |
| 617 | | prev.next = ni; |
| 618 | | return ni; |
| 619 | 606 | } |
| 620 | 607 | |
| 621 | 608 | fn resizeNode(mf: *MappedFile, gpa: std.mem.Allocator, ni: Node.Index, requested_size: u64) !void { |