]> sourceware.org Git - libabigail.git/commitdiff
XML writer: improve slightly emission of top-level declarations
authorGiuliano Procida <gprocida@google.com>
Fri, 21 Jan 2022 17:30:04 +0000 (17:30 +0000)
committerDodji Seketeli <dodji@redhat.com>
Thu, 24 Feb 2022 17:26:36 +0000 (18:26 +0100)
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 <maennich@google.com>
Signed-off-by: Giuliano Procida <gprocida@google.com>
src/abg-writer.cc

index c6869282aff67d6df4e3246e818287c5220b29db..496f36a68026c513443ca0b92e532a5ce0bd02bf 100644 (file)
@@ -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);
This page took 0.042025 seconds and 5 git commands to generate.