Skip to content

Commit 5ab7394

Browse files
romtsnclaude
andcommitted
feat(r8): Sort ambiguous no-range entries alphabetically by method name
When multiple no-range entries with different original method names all have line mappings, sort them alphabetically. Bare method entries (no line mapping) preserve original mapping file order. Fixes test_single_line_no_line_number_stacktrace — all 10 R8 line number handling tests now pass. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 92b293d commit 5ab7394

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

src/cache/mod.rs

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1249,7 +1249,17 @@ fn resolve_base_entries<'a>(
12491249
frames.push(f);
12501250
}
12511251
} else {
1252-
for member in &no_range {
1252+
// Sort by original method name when all entries have line mappings;
1253+
// bare method entries preserve original mapping file order.
1254+
let mut entries = no_range;
1255+
if entries.iter().all(|m| m.has_line_mapping()) {
1256+
entries.sort_by(|a, b| {
1257+
let name_a = cache.read_string(a.original_name_offset).unwrap_or("");
1258+
let name_b = cache.read_string(b.original_name_offset).unwrap_or("");
1259+
name_a.cmp(name_b)
1260+
});
1261+
}
1262+
for member in &entries {
12531263
if let Some(f) =
12541264
map_member_without_lines(cache, frame, member, outer_source_file, Some(0))
12551265
{

src/mapper.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -407,7 +407,13 @@ fn resolve_base_entries<'s>(
407407
.rewrite_rules
408408
.extend(no_range[0].rewrite_rules.iter());
409409
} else {
410-
for member in &no_range {
410+
// Sort by original method name when all entries have line mappings;
411+
// bare method entries preserve original mapping file order.
412+
let mut entries = no_range;
413+
if entries.iter().all(|m| m.has_line_mapping) {
414+
entries.sort_by_key(|m| m.original);
415+
}
416+
for member in &entries {
411417
collected
412418
.frames
413419
.push(map_member_without_lines(frame, member, Some(0)));

0 commit comments

Comments
 (0)