[3/4] XML writer: improve slightly emission of top-level declarations
Commit Message
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 | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)
Comments
Giuliano Procida <gprocida@google.com> a écrit:
> 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>
Applied to master, thanks!
[...]
Cheers,
@@ -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);