diff --git a/sixtyfps_compiler/passes.rs b/sixtyfps_compiler/passes.rs index 42d356573..cd2347e6e 100644 --- a/sixtyfps_compiler/passes.rs +++ b/sixtyfps_compiler/passes.rs @@ -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); diff --git a/sixtyfps_compiler/passes/unique_id.rs b/sixtyfps_compiler/passes/unique_id.rs index 6098b2d7f..e5880aa80 100644 --- a/sixtyfps_compiler/passes/unique_id.rs +++ b/sixtyfps_compiler/passes/unique_id.rs @@ -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) { +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, 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) { }; elem_mut.id = format!("{}-{}", old_id, count); }); - - rename_globals(component, count); } /// Give globals unique name