@@ -523,17 +523,7 @@ impl SourceMapGenerator {
523523 . expect ( "encode_parallel_impl requires non-empty sorted slice" )
524524 . generated_line as usize ;
525525
526- // Build line ranges: (start_idx, end_idx) into sorted slice
527- let mut line_ranges: Vec < ( usize , usize ) > = vec ! [ ( 0 , 0 ) ; max_line + 1 ] ;
528- let mut i = 0 ;
529- while i < sorted. len ( ) {
530- let line = sorted[ i] . generated_line as usize ;
531- let start = i;
532- while i < sorted. len ( ) && sorted[ i] . generated_line as usize == line {
533- i += 1 ;
534- }
535- line_ranges[ line] = ( start, i) ;
536- }
526+ let line_ranges = Self :: parallel_line_ranges ( sorted, max_line) ;
537527
538528 // Sequential scan: compute cumulative state at each line boundary
539529 let mut states: Vec < ( i64 , i64 , i64 , i64 ) > = Vec :: with_capacity ( max_line + 1 ) ;
@@ -584,6 +574,21 @@ impl SourceMapGenerator {
584574 unsafe { String :: from_utf8_unchecked ( out) }
585575 }
586576
577+ #[ cfg( feature = "parallel" ) ]
578+ fn parallel_line_ranges ( sorted : & [ & Mapping ] , max_line : usize ) -> Vec < ( usize , usize ) > {
579+ let mut line_ranges: Vec < ( usize , usize ) > = vec ! [ ( 0 , 0 ) ; max_line + 1 ] ;
580+ let mut i = 0 ;
581+ while i < sorted. len ( ) {
582+ let line = sorted[ i] . generated_line as usize ;
583+ let start = i;
584+ while i < sorted. len ( ) && sorted[ i] . generated_line as usize == line {
585+ i += 1 ;
586+ }
587+ line_ranges[ line] = ( start, i) ;
588+ }
589+ line_ranges
590+ }
591+
587592 /// Encode range mappings to a VLQ string.
588593 /// Returns `None` if no range mappings exist.
589594 fn encode_range_mappings ( & self ) -> Option < String > {
0 commit comments