(
&self,
out: &mut Text<'static>,
obj: &Object,
symbol_index: usize,
symbol_diff: &SymbolDiff,
diff_config: &DiffObjConfig,
rect: Rect,
| 504 | } |
| 505 | |
| 506 | fn print_sym( |
| 507 | &self, |
| 508 | out: &mut Text<'static>, |
| 509 | obj: &Object, |
| 510 | symbol_index: usize, |
| 511 | symbol_diff: &SymbolDiff, |
| 512 | diff_config: &DiffObjConfig, |
| 513 | rect: Rect, |
| 514 | highlight: &HighlightKind, |
| 515 | result: &EventResult, |
| 516 | only_changed: bool, |
| 517 | ) -> Option<HighlightKind> { |
| 518 | let mut new_highlight = None; |
| 519 | for (y, ins_row) in symbol_diff |
| 520 | .instruction_rows |
| 521 | .iter() |
| 522 | .skip(self.scroll_y) |
| 523 | .take(rect.height as usize) |
| 524 | .enumerate() |
| 525 | { |
| 526 | if only_changed && ins_row.kind == InstructionDiffKind::None { |
| 527 | out.lines.push(Line::default()); |
| 528 | continue; |
| 529 | } |
| 530 | let mut sx = rect.x; |
| 531 | let sy = rect.y + y as u16; |
| 532 | let mut line = Line::default(); |
| 533 | display_row(obj, symbol_index, ins_row, diff_config, |segment| { |
| 534 | let highlight_kind = HighlightKind::from(&segment.text); |
| 535 | let label_text = match segment.text { |
| 536 | DiffText::Basic(text) => text.to_string(), |
| 537 | DiffText::Line(num) => format!("{num} "), |
| 538 | DiffText::Address(addr) => format!("{addr:x}:"), |
| 539 | DiffText::Opcode(mnemonic, _op) => format!("{mnemonic} "), |
| 540 | DiffText::Argument(arg) => arg.to_string(), |
| 541 | DiffText::BranchDest(addr) => format!("{addr:x}"), |
| 542 | DiffText::BranchArrow(_) => " ~> ".to_string(), |
| 543 | DiffText::Symbol(sym) => { |
| 544 | sym.demangled_name.as_ref().unwrap_or(&sym.name).clone() |
| 545 | } |
| 546 | DiffText::Addend(addend) => match addend.cmp(&0i64) { |
| 547 | Ordering::Greater => format!("+{addend:#x}"), |
| 548 | Ordering::Less => format!("-{:#x}", -addend), |
| 549 | _ => String::new(), |
| 550 | }, |
| 551 | DiffText::Spacing(n) => { |
| 552 | line.spans.push(Span::raw(" ".repeat(n as usize))); |
| 553 | sx += n as u16; |
| 554 | return Ok(()); |
| 555 | } |
| 556 | DiffText::Eol => return Ok(()), |
| 557 | }; |
| 558 | |
| 559 | let len = label_text.len(); |
| 560 | let highlighted = |
| 561 | highlight_kind != HighlightKind::None && *highlight == highlight_kind; |
| 562 | if let Some((cx, cy)) = result.click_xy |
| 563 | && cx >= sx |
no test coverage detected