Make sure the ids are unique globally

For the inner elements, they don't need to be unique, but that might
make debugging easier.
For the globals, their name need to be unique.
This commit is contained in:
Olivier Goffart 2021-10-27 11:40:23 +02:00 committed by Simon Hausmann
parent c9c43766f4
commit bcc973bb63
2 changed files with 12 additions and 5 deletions

View file

@ -127,11 +127,11 @@ pub async fn run_passes(
}
binding_analysis::binding_analysis(doc, diag);
unique_id::assign_unique_id(doc);
for component in (root_component.used_types.borrow().sub_components.iter())
.chain(std::iter::once(root_component))
{
unique_id::assign_unique_id(component);
deduplicate_property_read::deduplicate_property_read(component);
optimize_useless_rectangles::optimize_useless_rectangles(component);
move_declarations::move_declarations(component, diag);

View file

@ -17,10 +17,19 @@ use std::rc::Rc;
/// This pass make sure that the id of the elements are unique
///
/// It currently does so by adding a number to the existing id
pub fn assign_unique_id(component: &Rc<Component>) {
pub fn assign_unique_id(doc: &Document) {
let mut count = 0;
assign_unique_id_in_component(&doc.root_component, &mut count);
for c in &doc.root_component.used_types.borrow().sub_components {
assign_unique_id_in_component(c, &mut count);
}
rename_globals(&doc.root_component, count);
}
fn assign_unique_id_in_component(component: &Rc<Component>, count: &mut u32) {
recurse_elem_including_sub_components(component, &(), &mut |elem, _| {
count += 1;
*count += 1;
let mut elem_mut = elem.borrow_mut();
let old_id = if !elem_mut.id.is_empty() {
elem_mut.id.clone()
@ -29,8 +38,6 @@ pub fn assign_unique_id(component: &Rc<Component>) {
};
elem_mut.id = format!("{}-{}", old_id, count);
});
rename_globals(component, count);
}
/// Give globals unique name