Skip to content

Commit

Permalink
clippy fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
DanielT committed Jun 13, 2024
1 parent a0388fc commit 8707c20
Show file tree
Hide file tree
Showing 9 changed files with 134 additions and 162 deletions.
4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ license = "MIT OR Apache-2.0"

[dependencies]
a2lfile = "2.0.0"
object = { version = "~0.35", default_features = false, features = ["read"] }
gimli = { version = "~0.29", default_features = false, features = ["read"] }
object = { version = "~0.35", default-features = false, features = ["read"] }
gimli = { version = "~0.29", default-features = false, features = ["read"] }
memmap2 = "~0.9"
clap = { version = "~4.5", features = ["wrap_help"]}
cpp_demangle = "0.4.3"
Expand Down
9 changes: 3 additions & 6 deletions src/dwarf/typereader.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ impl<'elffile> DebugDataReader<'elffile> {
for (name, var_list) in variables {
for VarInfo { typeref, .. } in var_list {
// check if the type was already loaded
if typereader_data.types.get(typeref).is_none() {
if !typereader_data.types.contains_key(typeref) {
if let Some(unit_idx) = self.units.get_unit(*typeref) {
// create an entries_tree iterator that makes it possible to read the DIEs of this type
let dbginfo_offset = gimli::DebugInfoOffset(*typeref);
Expand Down Expand Up @@ -313,12 +313,9 @@ impl<'elffile> DebugDataReader<'elffile> {
} else {
0
}
} else if let Some(count) = get_count_attribute(child_entry) {
// clang generates DW_AT_count instead of DW_AT_ubound
count
} else {
// unknown size of this array dimension
0
// clang generates DW_AT_count instead of DW_AT_ubound
get_count_attribute(child_entry).unwrap_or_default()
};
dim.push(count);
} else if child_entry.tag() == gimli::constants::DW_TAG_enumeration_type {
Expand Down
42 changes: 20 additions & 22 deletions src/update/axis_pts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,13 @@ use crate::update::{
enums::{cond_create_enum_conversion, update_enum_compu_methods},
get_axis_pts_x_memberid, get_inner_type, get_symbol_info,
ifdata_update::{update_ifdata, zero_if_data},
log_update_errors, set_symbol_link, update_record_layout, RecordLayoutInfo,
log_update_errors, set_symbol_link, update_record_layout,
};

use super::make_symbol_link_string;
use super::{make_symbol_link_string, UpdateInfo};

pub(crate) fn update_module_axis_pts(
module: &mut Module,
debug_data: &DebugData,
log_msgs: &mut Vec<String>,
preserve_unknown: bool,
version: A2lVersion,
recordlayout_info: &mut RecordLayoutInfo,
info: &mut UpdateInfo,
compu_method_index: &HashMap<String, usize>,
) -> (u32, u32) {
let mut enum_convlist = HashMap::<String, &TypeInfo>::new();
Expand All @@ -30,14 +25,17 @@ pub(crate) fn update_module_axis_pts(
let mut axis_pts_updated: u32 = 0;
let mut axis_pts_not_updated: u32 = 0;

std::mem::swap(&mut module.axis_pts, &mut axis_pts_list);
std::mem::swap(&mut info.module.axis_pts, &mut axis_pts_list);
for mut axis_pts in axis_pts_list {
match update_axis_pts_address(&mut axis_pts, debug_data, version) {
match update_axis_pts_address(&mut axis_pts, info.debug_data, info.version) {
Ok(typeinfo) => {
// the variable used for the axis should be a 1-dimensional array, or a struct containing a 1-dimensional array
// if the type is a struct, then the AXIS_PTS_X inside the referenced RECORD_LAYOUT tells us which member of the struct to use.
let member_id =
get_axis_pts_x_memberid(module, recordlayout_info, &axis_pts.deposit_record);
let member_id = get_axis_pts_x_memberid(
info.module,
&info.reclayout_info,
&axis_pts.deposit_record,
);
if let Some(inner_typeinfo) = get_inner_type(typeinfo, member_id) {
match &inner_typeinfo.datatype {
DwarfDataType::Array { dim, arraytype, .. } => {
Expand All @@ -57,7 +55,7 @@ pub(crate) fn update_module_axis_pts(
.clone();
}
cond_create_enum_conversion(
module,
info.module,
&axis_pts.conversion,
enumerators,
);
Expand All @@ -73,7 +71,7 @@ pub(crate) fn update_module_axis_pts(

let opt_compu_method = compu_method_index
.get(&axis_pts.conversion)
.and_then(|idx| module.compu_method.get(*idx));
.and_then(|idx| info.module.compu_method.get(*idx));
let (ll, ul) = adjust_limits(
inner_typeinfo,
axis_pts.lower_limit,
Expand All @@ -86,23 +84,23 @@ pub(crate) fn update_module_axis_pts(

// update the data type in the referenced RECORD_LAYOUT
axis_pts.deposit_record = update_record_layout(
module,
recordlayout_info,
info.module,
&mut info.reclayout_info,
&axis_pts.deposit_record,
typeinfo,
);

// put the updated AXIS_PTS back on the module's list
module.axis_pts.push(axis_pts);
info.module.axis_pts.push(axis_pts);
axis_pts_updated += 1;
}
Err(errmsgs) => {
log_update_errors(log_msgs, errmsgs, "AXIS_PTS", axis_pts.get_line());
log_update_errors(info.log_msgs, errmsgs, "AXIS_PTS", axis_pts.get_line());

if preserve_unknown {
if info.preserve_unknown {
axis_pts.address = 0;
zero_if_data(&mut axis_pts.if_data);
module.axis_pts.push(axis_pts);
info.module.axis_pts.push(axis_pts);
} else {
// item is removed implicitly, because it is not added back to the list
removed_items.insert(axis_pts.name.clone());
Expand All @@ -113,8 +111,8 @@ pub(crate) fn update_module_axis_pts(
}

// update COMPU_VTABs and COMPU_VTAB_RANGEs based on the data types used in MEASUREMENTs etc.
update_enum_compu_methods(module, &enum_convlist);
cleanup_removed_axis_pts(module, &removed_items);
update_enum_compu_methods(info.module, &enum_convlist);
cleanup_removed_axis_pts(info.module, &removed_items);

(axis_pts_updated, axis_pts_not_updated)
}
Expand Down
42 changes: 19 additions & 23 deletions src/update/characteristic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -10,19 +10,12 @@ use crate::update::{
enums::{cond_create_enum_conversion, update_enum_compu_methods},
get_fnc_values_memberid, get_inner_type, get_symbol_info,
ifdata_update::{update_ifdata, zero_if_data},
log_update_errors, set_bitmask, set_matrix_dim, set_symbol_link, update_record_layout,
RecordLayoutInfo,
log_update_errors, make_symbol_link_string, set_bitmask, set_matrix_dim, set_symbol_link,
update_record_layout, RecordLayoutInfo, UpdateInfo,
};

use super::make_symbol_link_string;

pub(crate) fn update_module_characteristics(
module: &mut Module,
debug_data: &DebugData,
log_msgs: &mut Vec<String>,
preserve_unknown: bool,
version: A2lVersion,
recordlayout_info: &mut RecordLayoutInfo,
info: &mut UpdateInfo,
compu_method_index: &HashMap<String, usize>,
) -> (u32, u32) {
let mut enum_convlist = HashMap::<String, &TypeInfo>::new();
Expand All @@ -32,45 +25,47 @@ pub(crate) fn update_module_characteristics(
let mut characteristic_not_updated: u32 = 0;

// store the max_axis_points of each AXIS_PTS, so that the AXIS_DESCRs inside of CHARACTERISTICS can be updated to match
let axis_pts_dim: HashMap<String, u16> = module
let axis_pts_dim: HashMap<String, u16> = info
.module
.axis_pts
.iter()
.map(|item| (item.name.clone(), item.max_axis_points))
.collect();

std::mem::swap(&mut module.characteristic, &mut characteristic_list);
std::mem::swap(&mut info.module.characteristic, &mut characteristic_list);
for mut characteristic in characteristic_list {
if characteristic.virtual_characteristic.is_none() {
// only update the address if the CHARACTERISTIC is not a VIRTUAL_CHARACTERISTIC
match update_characteristic_address(&mut characteristic, debug_data, version) {
match update_characteristic_address(&mut characteristic, info.debug_data, info.version)
{
Ok(typeinfo) => {
// update as much as possible of the information inside the CHARACTERISTIC
update_characteristic_information(
module,
recordlayout_info,
info.module,
&mut info.reclayout_info,
&mut characteristic,
typeinfo,
&mut enum_convlist,
&axis_pts_dim,
version >= A2lVersion::V1_7_0,
info.version >= A2lVersion::V1_7_0,
compu_method_index,
);

module.characteristic.push(characteristic);
info.module.characteristic.push(characteristic);
characteristic_updated += 1;
}
Err(errmsgs) => {
log_update_errors(
log_msgs,
info.log_msgs,
errmsgs,
"CHARACTERISTIC",
characteristic.get_line(),
);

if preserve_unknown {
if info.preserve_unknown {
characteristic.address = 0;
zero_if_data(&mut characteristic.if_data);
module.characteristic.push(characteristic);
info.module.characteristic.push(characteristic);
} else {
// item is removed implicitly, because it is not added back to the list
removed_items.insert(characteristic.name.clone());
Expand All @@ -80,18 +75,19 @@ pub(crate) fn update_module_characteristics(
}
} else {
// computed CHARACTERISTICS with a VIRTUAL_CHARACTERISTIC block shouldn't have an address and don't need to be updated
module.characteristic.push(characteristic);
info.module.characteristic.push(characteristic);
}
}

// update COMPU_VTABs and COMPU_VTAB_RANGEs based on the data types used in CHARACTERISTICs
update_enum_compu_methods(module, &enum_convlist);
cleanup_removed_characteristics(module, &removed_items);
update_enum_compu_methods(info.module, &enum_convlist);
cleanup_removed_characteristics(info.module, &removed_items);

(characteristic_updated, characteristic_not_updated)
}

// update as much as possible of the information inside the CHARACTERISTIC
#[allow(clippy::too_many_arguments)]
fn update_characteristic_information<'enumlist, 'typeinfo: 'enumlist>(
module: &mut Module,
recordlayout_info: &mut RecordLayoutInfo,
Expand Down
37 changes: 17 additions & 20 deletions src/update/instance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,23 +9,20 @@ use crate::update::{
log_update_errors, set_symbol_link, TypedefNames, TypedefReferrer, TypedefsRefInfo,
};

use super::{make_symbol_link_string, set_address_type, set_matrix_dim};
use super::{make_symbol_link_string, set_address_type, set_matrix_dim, UpdateInfo};

pub(crate) fn update_module_instances<'a>(
module: &mut Module,
debug_data: &'a DebugData,
log_msgs: &mut Vec<String>,
preserve_unknown: bool,
pub(crate) fn update_module_instances<'dbg>(
info: &mut UpdateInfo<'_, 'dbg, '_>,
nameset: &TypedefNames,
) -> (u32, u32, TypedefsRefInfo<'a>) {
) -> (u32, u32, TypedefsRefInfo<'dbg>) {
let mut removed_items = HashSet::<String>::new();
let mut instance_list = Vec::new();
let mut instance_updated: u32 = 0;
let mut instance_not_updated: u32 = 0;
let mut typedef_types = TypedefsRefInfo::new();
std::mem::swap(&mut module.instance, &mut instance_list);
std::mem::swap(&mut info.module.instance, &mut instance_list);
for mut instance in instance_list {
match update_instance_address(&mut instance, debug_data) {
match update_instance_address(&mut instance, info.debug_data) {
Ok((typedef_ref, typeinfo)) => {
if nameset.contains(&typedef_ref) {
// Each INSTANCE can have:
Expand All @@ -39,38 +36,38 @@ pub(crate) fn update_module_instances<'a>(
// More complicted constructions like pointers to pointers, arrays of pointers, etc. can not be represented directly
set_address_type(&mut instance.address_type, typeinfo);
let basetype = typeinfo
.get_pointer(&debug_data.types)
.get_pointer(&info.debug_data.types)
.map_or(typeinfo, |(_, t)| t);

set_matrix_dim(&mut instance.matrix_dim, basetype, true);
let basetype = basetype.get_arraytype().unwrap_or(basetype);

typedef_types.entry(typedef_ref).or_default().push((
Some(basetype),
TypedefReferrer::Instance(module.instance.len()),
TypedefReferrer::Instance(info.module.instance.len()),
));

module.instance.push(instance);
info.module.instance.push(instance);
instance_updated += 1;
} else if preserve_unknown {
module.instance.push(instance);
} else if info.preserve_unknown {
info.module.instance.push(instance);
instance_updated += 1;
} else {
log_msgs.push(format!("Error updating INSTANCE on line {}: type ref {} does not refer to any TYPEDEF_*", instance.get_line(), instance.type_ref));
info.log_msgs.push(format!("Error updating INSTANCE on line {}: type ref {} does not refer to any TYPEDEF_*", instance.get_line(), instance.type_ref));
instance_not_updated += 1;
}
}
Err(errmsgs) => {
log_update_errors(log_msgs, errmsgs, "INSTANCE", instance.get_line());
log_update_errors(info.log_msgs, errmsgs, "INSTANCE", instance.get_line());

if preserve_unknown {
if info.preserve_unknown {
instance.start_address = 0;
zero_if_data(&mut instance.if_data);
typedef_types
.entry(instance.type_ref.clone())
.or_default()
.push((None, TypedefReferrer::Instance(module.instance.len())));
module.instance.push(instance);
.push((None, TypedefReferrer::Instance(info.module.instance.len())));
info.module.instance.push(instance);
} else {
// item is removed implicitly, because it is not added back to the list
removed_items.insert(instance.name.clone());
Expand All @@ -79,7 +76,7 @@ pub(crate) fn update_module_instances<'a>(
}
}
}
cleanup_removed_instances(module, &removed_items);
cleanup_removed_instances(info.module, &removed_items);

(instance_updated, instance_not_updated, typedef_types)
}
Expand Down
Loading

0 comments on commit 8707c20

Please sign in to comment.