@@ -341,11 +341,25 @@ pub fn diff_objs(
341
341
if let ( Some ( ( right_obj, right_out) ) , Some ( ( left_obj, left_out) ) ) =
342
342
( right. as_mut ( ) , left. as_mut ( ) )
343
343
{
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
+ ) ?;
346
353
}
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
+ ) ?;
349
363
}
350
364
}
351
365
@@ -356,16 +370,27 @@ pub fn diff_objs(
356
370
} )
357
371
}
358
372
373
+ #[ derive( Clone , Copy ) ]
374
+ enum MappingSymbol < ' a > {
375
+ Left ( & ' a str ) ,
376
+ Right ( & ' a str ) ,
377
+ }
378
+
359
379
/// When we're selecting a symbol to use as a comparison, we'll create comparisons for all
360
380
/// symbols in the other object that match the selected symbol's section and kind. This allows
361
381
/// us to display match percentages for all symbols in the other object that could be selected.
362
382
fn 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 ,
367
388
config : & DiffObjConfig ,
368
389
) -> 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
+ } ;
369
394
let Some ( base_symbol_ref) = symbol_ref_by_name ( base_obj, base_name) else {
370
395
return Ok ( ( ) ) ;
371
396
} ;
@@ -377,32 +402,30 @@ fn generate_mapping_symbols(
377
402
{
378
403
continue ;
379
404
}
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 {
381
410
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)
388
412
}
389
413
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)
396
415
}
397
416
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)
404
418
}
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 } ) ,
406
429
}
407
430
}
408
431
Ok ( ( ) )
0 commit comments