@@ -261,6 +261,20 @@ export class PieceTreeTextBuffer implements ITextBuffer {
261261 // Sort operations ascending
262262 operations . sort ( PieceTreeTextBuffer . _sortOpsAscending ) ;
263263
264+ let hasTouchingRanges = false ;
265+ for ( let i = 0 , count = operations . length - 1 ; i < count ; i ++ ) {
266+ let rangeEnd = operations [ i ] . range . getEndPosition ( ) ;
267+ let nextRangeStart = operations [ i + 1 ] . range . getStartPosition ( ) ;
268+
269+ if ( nextRangeStart . isBeforeOrEqual ( rangeEnd ) ) {
270+ if ( nextRangeStart . isBefore ( rangeEnd ) ) {
271+ // overlapping ranges
272+ throw new Error ( 'Overlapping ranges are not allowed!' ) ;
273+ }
274+ hasTouchingRanges = true ;
275+ }
276+ }
277+
264278 if ( canReduceOperations ) {
265279 operations = this . _reduceOperations ( operations ) ;
266280 }
@@ -289,24 +303,11 @@ export class PieceTreeTextBuffer implements ITextBuffer {
289303 }
290304 }
291305
292- let reverseOperations : IReverseSingleEditOperation [ ] = [ ] ;
306+ let reverseOperations : IReverseSingleEditOperation [ ] | null = null ;
293307 if ( computeUndoEdits ) {
294308
295- let hasTouchingRanges = false ;
296- for ( let i = 0 , count = operations . length - 1 ; i < count ; i ++ ) {
297- let rangeEnd = operations [ i ] . range . getEndPosition ( ) ;
298- let nextRangeStart = operations [ i + 1 ] . range . getStartPosition ( ) ;
299-
300- if ( nextRangeStart . isBeforeOrEqual ( rangeEnd ) ) {
301- if ( nextRangeStart . isBefore ( rangeEnd ) ) {
302- // overlapping ranges
303- throw new Error ( 'Overlapping ranges are not allowed!' ) ;
304- }
305- hasTouchingRanges = true ;
306- }
307- }
308-
309309 let reverseRangeDeltaOffset = 0 ;
310+ reverseOperations = [ ] ;
310311 for ( let i = 0 ; i < operations . length ; i ++ ) {
311312 const op = operations [ i ] ;
312313 const reverseRange = reverseRanges [ i ] ;
0 commit comments