@@ -341,11 +341,25 @@ pub fn diff_objs(
341341 if let ( Some ( ( right_obj, right_out) ) , Some ( ( left_obj, left_out) ) ) =
342342 ( right. as_mut ( ) , left. as_mut ( ) )
343343 {
344- if let Some ( right_name) = & mapping_config. selecting_left {
345- generate_mapping_symbols ( right_obj, right_name, left_obj, left_out, diff_config) ?;
344+ if let Some ( right_name) = mapping_config. selecting_left . as_deref ( ) {
345+ generate_mapping_symbols (
346+ left_obj,
347+ left_out,
348+ right_obj,
349+ right_out,
350+ MappingSymbol :: Right ( right_name) ,
351+ diff_config,
352+ ) ?;
346353 }
347- if let Some ( left_name) = & mapping_config. selecting_right {
348- generate_mapping_symbols ( left_obj, left_name, right_obj, right_out, diff_config) ?;
354+ if let Some ( left_name) = mapping_config. selecting_right . as_deref ( ) {
355+ generate_mapping_symbols (
356+ left_obj,
357+ left_out,
358+ right_obj,
359+ right_out,
360+ MappingSymbol :: Left ( left_name) ,
361+ diff_config,
362+ ) ?;
349363 }
350364 }
351365
@@ -356,16 +370,27 @@ pub fn diff_objs(
356370 } )
357371}
358372
373+ #[ derive( Clone , Copy ) ]
374+ enum MappingSymbol < ' a > {
375+ Left ( & ' a str ) ,
376+ Right ( & ' a str ) ,
377+ }
378+
359379/// When we're selecting a symbol to use as a comparison, we'll create comparisons for all
360380/// symbols in the other object that match the selected symbol's section and kind. This allows
361381/// us to display match percentages for all symbols in the other object that could be selected.
362382fn generate_mapping_symbols (
363- base_obj : & Object ,
364- base_name : & str ,
365- target_obj : & Object ,
366- target_out : & mut ObjectDiff ,
383+ left_obj : & Object ,
384+ left_out : & mut ObjectDiff ,
385+ right_obj : & Object ,
386+ right_out : & mut ObjectDiff ,
387+ mapping_symbol : MappingSymbol ,
367388 config : & DiffObjConfig ,
368389) -> Result < ( ) > {
390+ let ( base_obj, base_name, target_obj) = match mapping_symbol {
391+ MappingSymbol :: Left ( name) => ( left_obj, name, right_obj) ,
392+ MappingSymbol :: Right ( name) => ( right_obj, name, left_obj) ,
393+ } ;
369394 let Some ( base_symbol_ref) = symbol_ref_by_name ( base_obj, base_name) else {
370395 return Ok ( ( ) ) ;
371396 } ;
@@ -377,32 +402,30 @@ fn generate_mapping_symbols(
377402 {
378403 continue ;
379404 }
380- match base_section_kind {
405+ let ( left_symbol_idx, right_symbol_idx) = match mapping_symbol {
406+ MappingSymbol :: Left ( _) => ( base_symbol_ref, target_symbol_index) ,
407+ MappingSymbol :: Right ( _) => ( target_symbol_index, base_symbol_ref) ,
408+ } ;
409+ let ( left_diff, right_diff) = match base_section_kind {
381410 SectionKind :: Code => {
382- let ( left_diff, _right_diff) =
383- diff_code ( target_obj, base_obj, target_symbol_index, base_symbol_ref, config) ?;
384- target_out. mapping_symbols . push ( MappingSymbolDiff {
385- symbol_index : target_symbol_index,
386- symbol_diff : left_diff,
387- } ) ;
411+ diff_code ( left_obj, right_obj, left_symbol_idx, right_symbol_idx, config)
388412 }
389413 SectionKind :: Data => {
390- let ( left_diff, _right_diff) =
391- diff_data_symbol ( target_obj, base_obj, target_symbol_index, base_symbol_ref) ?;
392- target_out. mapping_symbols . push ( MappingSymbolDiff {
393- symbol_index : target_symbol_index,
394- symbol_diff : left_diff,
395- } ) ;
414+ diff_data_symbol ( left_obj, right_obj, left_symbol_idx, right_symbol_idx)
396415 }
397416 SectionKind :: Bss | SectionKind :: Common => {
398- let ( left_diff, _right_diff) =
399- diff_bss_symbol ( target_obj, base_obj, target_symbol_index, base_symbol_ref) ?;
400- target_out. mapping_symbols . push ( MappingSymbolDiff {
401- symbol_index : target_symbol_index,
402- symbol_diff : left_diff,
403- } ) ;
417+ diff_bss_symbol ( left_obj, right_obj, left_symbol_idx, right_symbol_idx)
404418 }
405- SectionKind :: Unknown => { }
419+ SectionKind :: Unknown => continue ,
420+ } ?;
421+ match mapping_symbol {
422+ MappingSymbol :: Left ( _) => right_out. mapping_symbols . push ( MappingSymbolDiff {
423+ symbol_index : right_symbol_idx,
424+ symbol_diff : right_diff,
425+ } ) ,
426+ MappingSymbol :: Right ( _) => left_out
427+ . mapping_symbols
428+ . push ( MappingSymbolDiff { symbol_index : left_symbol_idx, symbol_diff : left_diff } ) ,
406429 }
407430 }
408431 Ok ( ( ) )
0 commit comments