From 628dbfebd6acaa7d617a6c952fc61c372138092d Mon Sep 17 00:00:00 2001 From: Giuliano Procida Date: Fri, 21 Jan 2022 17:30:04 +0000 Subject: [PATCH] XML writer: improve slightly emission of top-level declarations In the loop that emits declarations, the iterator already points to a decl_base_sptr, there is no need to do another dynamic_cast. It is also possible to simplify the loop and its conditionals. There is no change to tests or behaviour. * src/abg-writer.cc (decl_is_emitted): Make decl_base_sptr argument a const reference. (write_translation_unit): Eliminate a typedef and just use a range-for loop without the extra dynamic cast for the non-type case. Use else instead of continue to make it clear there are only two possibilities. Reviewed-by: Matthias Maennich Signed-off-by: Giuliano Procida --- src/abg-writer.cc | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/src/abg-writer.cc b/src/abg-writer.cc index c6869282..496f36a6 100644 --- a/src/abg-writer.cc +++ b/src/abg-writer.cc @@ -733,7 +733,7 @@ public: /// @return true if the decl has already been emitted, false /// otherwise. bool - decl_is_emitted(decl_base_sptr& decl) const + decl_is_emitted(const decl_base_sptr& decl) const { ABG_ASSERT(!is_type(decl)); string repr = get_pretty_representation(decl, true); @@ -2440,12 +2440,11 @@ write_translation_unit(write_context& ctxt, ctxt, indent + c.get_xml_element_indent()); typedef scope_decl::declarations declarations; - typedef declarations::const_iterator const_iterator; - const declarations& d = tu.get_global_scope()->get_sorted_member_decls(); + const declarations& decls = tu.get_global_scope()->get_sorted_member_decls(); - for (const_iterator i = d.begin(); i != d.end(); ++i) + for (const decl_base_sptr& decl : decls) { - if (type_base_sptr t = is_type(*i)) + if (type_base_sptr t = is_type(decl)) { // Emit declaration-only classes that are needed. Some of // these classes can be empty. Those beasts can be classes @@ -2456,13 +2455,12 @@ write_translation_unit(write_context& ctxt, && !ctxt.type_is_emitted(class_type)) write_type(class_type, ctxt, indent + c.get_xml_element_indent()); - continue; } - - if (decl_base_sptr d = is_decl(*i)) - if (ctxt.decl_is_emitted(d)) - continue; - write_decl(*i, ctxt, indent + c.get_xml_element_indent()); + else + { + if (!ctxt.decl_is_emitted(decl)) + write_decl(decl, ctxt, indent + c.get_xml_element_indent()); + } } write_referenced_types(ctxt, tu, indent, is_last); -- 2.43.5