Skip to content

Commit d5292dc

Browse files
romtsnclaude
andcommitted
refactor: Simplify resolve_base_entries in mapper and cache
- Rename cache_member_output_line to compute_member_output_line - Collapse any_has_range if-else into single loop with conditional line - Collapse no_range len==1 / all_same_name into single all_same_name check - Remove separate zero_zero/no_range vectors; pre-compute aggregates in a single pass and use one emission loop over base_entries Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 28bfece commit d5292dc

File tree

2 files changed

+84
-105
lines changed

2 files changed

+84
-105
lines changed

src/cache/mod.rs

Lines changed: 42 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -1059,7 +1059,7 @@ fn map_member_without_lines<'a>(
10591059
}
10601060

10611061
/// Computes the default output line for a cache member's original_startline.
1062-
fn cache_member_output_line(member: &raw::Member) -> Option<usize> {
1062+
fn compute_member_output_line(member: &raw::Member) -> Option<usize> {
10631063
match member.original_startline {
10641064
0 | u32::MAX => None,
10651065
value => Some(value as usize),
@@ -1073,7 +1073,7 @@ fn iterate_without_lines<'a>(
10731073
outer_source_file: Option<&str>,
10741074
) -> Option<StackFrame<'a>> {
10751075
let member = members.next()?;
1076-
let output_line = cache_member_output_line(member);
1076+
let output_line = compute_member_output_line(member);
10771077
map_member_without_lines(cache, frame, member, outer_source_file, output_line)
10781078
}
10791079

@@ -1137,76 +1137,65 @@ fn resolve_base_entries<'a>(
11371137
base_entries: &[&raw::Member],
11381138
outer_source_file: Option<&str>,
11391139
) -> Vec<StackFrame<'a>> {
1140-
let zero_zero: Vec<&&raw::Member> = base_entries
1141-
.iter()
1142-
.filter(|m| m.has_minified_range())
1143-
.collect();
1144-
let no_range: Vec<&&raw::Member> = base_entries
1145-
.iter()
1146-
.filter(|m| !m.has_minified_range())
1147-
.collect();
1148-
1149-
let mut frames = Vec::new();
1150-
1151-
// Process 0:0 entries.
1152-
if !zero_zero.is_empty() {
1153-
let any_has_range = zero_zero
1154-
.iter()
1155-
.any(|m| m.original_endline != u32::MAX && m.original_endline != m.original_startline);
1156-
if any_has_range {
1157-
for member in &zero_zero {
1158-
if let Some(f) =
1159-
map_member_without_lines(cache, frame, member, outer_source_file, Some(0))
1160-
{
1161-
frames.push(f);
1162-
}
1140+
// Pre-compute aggregates in a single pass.
1141+
let mut any_zero_zero_has_range = false;
1142+
let mut no_range_count = 0usize;
1143+
let mut first_no_range_offset: Option<u32> = None;
1144+
let mut all_no_range_same_name = true;
1145+
for member in base_entries {
1146+
if member.has_minified_range() {
1147+
if member.original_endline != u32::MAX
1148+
&& member.original_endline != member.original_startline
1149+
{
1150+
any_zero_zero_has_range = true;
11631151
}
11641152
} else {
1165-
for member in &zero_zero {
1166-
let line = cache_member_output_line(member);
1167-
if let Some(f) =
1168-
map_member_without_lines(cache, frame, member, outer_source_file, line)
1169-
{
1170-
frames.push(f);
1153+
no_range_count += 1;
1154+
match first_no_range_offset {
1155+
None => first_no_range_offset = Some(member.original_name_offset),
1156+
Some(first) if member.original_name_offset != first => {
1157+
all_no_range_same_name = false
11711158
}
1159+
_ => {}
11721160
}
11731161
}
11741162
}
11751163

1176-
// Process no-range entries.
1177-
if !no_range.is_empty() {
1178-
if no_range.len() == 1 {
1179-
let member = no_range[0];
1180-
let line = if member.original_startline > 0 && member.original_startline != u32::MAX {
1181-
Some(member.original_startline as usize)
1182-
} else if !member.has_line_mapping() {
1164+
let mut frames = Vec::new();
1165+
let mut no_range_emitted = false;
1166+
for member in base_entries {
1167+
if member.has_minified_range() {
1168+
let line = if any_zero_zero_has_range {
11831169
Some(0)
11841170
} else {
1185-
None
1171+
compute_member_output_line(member)
11861172
};
11871173
if let Some(f) = map_member_without_lines(cache, frame, member, outer_source_file, line)
11881174
{
11891175
frames.push(f);
11901176
}
1191-
} else {
1192-
let all_same_name = no_range
1193-
.iter()
1194-
.all(|m| m.original_name_offset == no_range[0].original_name_offset);
1195-
if all_same_name {
1177+
} else if all_no_range_same_name {
1178+
if !no_range_emitted {
1179+
no_range_emitted = true;
1180+
let line = if no_range_count > 1 {
1181+
Some(0)
1182+
} else {
1183+
compute_member_output_line(member).or(if !member.has_line_mapping() {
1184+
Some(0)
1185+
} else {
1186+
None
1187+
})
1188+
};
11961189
if let Some(f) =
1197-
map_member_without_lines(cache, frame, no_range[0], outer_source_file, Some(0))
1190+
map_member_without_lines(cache, frame, member, outer_source_file, line)
11981191
{
11991192
frames.push(f);
12001193
}
1201-
} else {
1202-
for member in &no_range {
1203-
if let Some(f) =
1204-
map_member_without_lines(cache, frame, member, outer_source_file, Some(0))
1205-
{
1206-
frames.push(f);
1207-
}
1208-
}
12091194
}
1195+
} else if let Some(f) =
1196+
map_member_without_lines(cache, frame, member, outer_source_file, Some(0))
1197+
{
1198+
frames.push(f);
12101199
}
12111200
}
12121201

src/mapper.rs

Lines changed: 42 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -345,75 +345,65 @@ fn resolve_base_entries<'s>(
345345
base_entries: &[&'s MemberMapping<'s>],
346346
collected: &mut CollectedFrames<'s>,
347347
) {
348-
let zero_zero: Vec<&&MemberMapping<'s>> = base_entries
349-
.iter()
350-
.filter(|m| m.has_minified_range)
351-
.collect();
352-
let no_range: Vec<&&MemberMapping<'s>> = base_entries
353-
.iter()
354-
.filter(|m| !m.has_minified_range)
355-
.collect();
356-
357-
// Process 0:0 entries.
358-
if !zero_zero.is_empty() {
359-
let any_has_range = zero_zero.iter().any(|m| {
360-
m.original_endline
361-
.is_some_and(|oe| oe != m.original_startline)
362-
});
363-
if any_has_range {
364-
for member in &zero_zero {
365-
collected
366-
.frames
367-
.push(map_member_without_lines(frame, member, Some(0)));
368-
collected.rewrite_rules.extend(member.rewrite_rules.iter());
348+
// Pre-compute aggregates in a single pass.
349+
let mut any_zero_zero_has_range = false;
350+
let mut no_range_count = 0usize;
351+
let mut first_no_range_name: Option<&str> = None;
352+
let mut all_no_range_same_name = true;
353+
for member in base_entries {
354+
if member.has_minified_range {
355+
if member
356+
.original_endline
357+
.is_some_and(|oe| oe != member.original_startline)
358+
{
359+
any_zero_zero_has_range = true;
369360
}
370361
} else {
371-
for member in &zero_zero {
372-
let line = if member.original_startline > 0 {
373-
Some(member.original_startline)
374-
} else {
375-
None
376-
};
377-
collected
378-
.frames
379-
.push(map_member_without_lines(frame, member, line));
380-
collected.rewrite_rules.extend(member.rewrite_rules.iter());
362+
no_range_count += 1;
363+
match first_no_range_name {
364+
None => first_no_range_name = Some(member.original),
365+
Some(first) if member.original != first => all_no_range_same_name = false,
366+
_ => {}
381367
}
382368
}
383369
}
384370

385-
// Process no-range entries.
386-
if !no_range.is_empty() {
387-
if no_range.len() == 1 {
388-
let member = no_range[0];
389-
let line = if member.original_startline > 0 {
390-
Some(member.original_startline)
391-
} else if !member.has_line_mapping {
371+
let mut no_range_emitted = false;
372+
for member in base_entries {
373+
if member.has_minified_range {
374+
let line = if any_zero_zero_has_range {
392375
Some(0)
376+
} else if member.original_startline > 0 {
377+
Some(member.original_startline)
393378
} else {
394379
None
395380
};
396381
collected
397382
.frames
398383
.push(map_member_without_lines(frame, member, line));
399384
collected.rewrite_rules.extend(member.rewrite_rules.iter());
400-
} else {
401-
let all_same_name = no_range.iter().all(|m| m.original == no_range[0].original);
402-
if all_same_name {
385+
} else if all_no_range_same_name {
386+
if !no_range_emitted {
387+
no_range_emitted = true;
388+
let line = if no_range_count > 1 {
389+
Some(0)
390+
} else if member.original_startline > 0 {
391+
Some(member.original_startline)
392+
} else if !member.has_line_mapping {
393+
Some(0)
394+
} else {
395+
None
396+
};
403397
collected
404398
.frames
405-
.push(map_member_without_lines(frame, no_range[0], Some(0)));
406-
collected
407-
.rewrite_rules
408-
.extend(no_range[0].rewrite_rules.iter());
409-
} else {
410-
for member in &no_range {
411-
collected
412-
.frames
413-
.push(map_member_without_lines(frame, member, Some(0)));
414-
collected.rewrite_rules.extend(member.rewrite_rules.iter());
415-
}
399+
.push(map_member_without_lines(frame, member, line));
400+
collected.rewrite_rules.extend(member.rewrite_rules.iter());
416401
}
402+
} else {
403+
collected
404+
.frames
405+
.push(map_member_without_lines(frame, member, Some(0)));
406+
collected.rewrite_rules.extend(member.rewrite_rules.iter());
417407
}
418408
}
419409
}

0 commit comments

Comments
 (0)