MCPcopy Index your code
hub / github.com/encounter/objdiff / print_sym

Method print_sym

objdiff-cli/src/views/function_diff.rs:506–595  ·  view source on GitHub ↗
(
        &self,
        out: &mut Text<'static>,
        obj: &Object,
        symbol_index: usize,
        symbol_diff: &SymbolDiff,
        diff_config: &DiffObjConfig,
        rect: Rect,
        

Source from the content-addressed store, hash-verified

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

Callers 1

drawMethod · 0.80

Calls 3

display_rowFunction · 0.85
pushMethod · 0.80
cmpMethod · 0.80

Tested by

no test coverage detected