@@ -645,11 +645,7 @@ func (dmp *DiffMatchPatch) diffHalfMatchI(l, s []rune, i int) [][]rune {
645645func (dmp * DiffMatchPatch ) DiffCleanupSemantic (diffs []Diff ) []Diff {
646646 changes := false
647647 // 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 ))
653649
654650 var lastequality string
655651 // Always equal to diffs[equalities[equalitiesLength - 1]][1]
@@ -662,11 +658,7 @@ func (dmp *DiffMatchPatch) DiffCleanupSemantic(diffs []Diff) []Diff {
662658 for pointer < len (diffs ) {
663659 if diffs [pointer ].Type == DiffEqual {
664660 // Equality found.
665-
666- equalities = & equality {
667- data : pointer ,
668- next : equalities ,
669- }
661+ equalities = append (equalities , pointer )
670662 lengthInsertions1 = lengthInsertions2
671663 lengthDeletions1 = lengthDeletions2
672664 lengthInsertions2 = 0
@@ -687,21 +679,20 @@ func (dmp *DiffMatchPatch) DiffCleanupSemantic(diffs []Diff) []Diff {
687679 (len (lastequality ) <= difference1 ) &&
688680 (len (lastequality ) <= difference2 ) {
689681 // Duplicate record.
690- insPoint := equalities . data
682+ insPoint := equalities [ len ( equalities ) - 1 ]
691683 diffs = splice (diffs , insPoint , 0 , Diff {DiffDelete , lastequality })
692684
693685 // Change second copy to insert.
694686 diffs [insPoint + 1 ].Type = DiffInsert
695687 // Throw away the equality we just deleted.
696- equalities = equalities . next
688+ equalities = equalities [: len ( equalities ) - 1 ]
697689
698- if equalities != nil {
699- equalities = equalities . next
690+ if len ( equalities ) > 0 {
691+ equalities = equalities [: len ( equalities ) - 1 ]
700692 }
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 ]
705696 }
706697
707698 lengthInsertions1 = 0 // Reset the counters.
0 commit comments