@@ -645,11 +645,7 @@ func (dmp *DiffMatchPatch) diffHalfMatchI(l, s []rune, i int) [][]rune {
645
645
func (dmp * DiffMatchPatch ) DiffCleanupSemantic (diffs []Diff ) []Diff {
646
646
changes := false
647
647
// Stack of indices where equalities are found.
648
- type equality struct {
649
- data int
650
- next * equality
651
- }
652
- var equalities * equality
648
+ equalities := make ([]int , 0 , len (diffs ))
653
649
654
650
var lastequality string
655
651
// Always equal to diffs[equalities[equalitiesLength - 1]][1]
@@ -662,11 +658,7 @@ func (dmp *DiffMatchPatch) DiffCleanupSemantic(diffs []Diff) []Diff {
662
658
for pointer < len (diffs ) {
663
659
if diffs [pointer ].Type == DiffEqual {
664
660
// Equality found.
665
-
666
- equalities = & equality {
667
- data : pointer ,
668
- next : equalities ,
669
- }
661
+ equalities = append (equalities , pointer )
670
662
lengthInsertions1 = lengthInsertions2
671
663
lengthDeletions1 = lengthDeletions2
672
664
lengthInsertions2 = 0
@@ -687,21 +679,20 @@ func (dmp *DiffMatchPatch) DiffCleanupSemantic(diffs []Diff) []Diff {
687
679
(len (lastequality ) <= difference1 ) &&
688
680
(len (lastequality ) <= difference2 ) {
689
681
// Duplicate record.
690
- insPoint := equalities . data
682
+ insPoint := equalities [ len ( equalities ) - 1 ]
691
683
diffs = splice (diffs , insPoint , 0 , Diff {DiffDelete , lastequality })
692
684
693
685
// Change second copy to insert.
694
686
diffs [insPoint + 1 ].Type = DiffInsert
695
687
// Throw away the equality we just deleted.
696
- equalities = equalities . next
688
+ equalities = equalities [: len ( equalities ) - 1 ]
697
689
698
- if equalities != nil {
699
- equalities = equalities . next
690
+ if len ( equalities ) > 0 {
691
+ equalities = equalities [: len ( equalities ) - 1 ]
700
692
}
701
- if equalities != nil {
702
- pointer = equalities .data
703
- } else {
704
- pointer = - 1
693
+ pointer = - 1
694
+ if len (equalities ) > 0 {
695
+ pointer = equalities [len (equalities )- 1 ]
705
696
}
706
697
707
698
lengthInsertions1 = 0 // Reset the counters.
0 commit comments