Skip to content

Commit 7449905

Browse files
refactor: extract parallel encoder line ranges
1 parent 7531e70 commit 7449905

1 file changed

Lines changed: 16 additions & 11 deletions

File tree

crates/generator/src/lib.rs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)