From bcc973bb63064facc84227bfd72e1edb64eccfcc Mon Sep 17 00:00:00 2001 From: Olivier Goffart Date: Wed, 27 Oct 2021 11:40:23 +0200 Subject: [PATCH] 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. --- sixtyfps_compiler/passes.rs | 2 +- sixtyfps_compiler/passes/unique_id.rs | 15 +++++++++++---- 2 files changed, 12 insertions(+), 5 deletions(-) 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