* include/abg-ir.h (*lots of descendants of decl_base, type_decl)
(template_decl, class_decl::member_base): Replace the previous classical
*::operator==(*&) with an overload of decl_base::operator==(const
decl_base&), type_base::operator==(const type_base),
template_decl::operator==(const template_decl&) or
class_decl::member_base::operator==(const
class_decl::member_base&). This makes the descendant operator be
the one called when a comparison involves references the parent
class.
* src/abg-ir.cc: Write the implementation of the above. Remove
the useless static_casts from the previous operator== code.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
* include/abg-ir.h: Add author. Remove many useless white
spaces. Add missing end-of-class comments. Move function
declaration comments from here to their definition point.
* include/abg-fwd.h: Remove useless indentation. Also move
doxygen comments to *definition* points in src/abg-ir.cc.
* src/abg-ir.cc: Remove many useless white spaces. Move comments
from declaration points to here.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
* include/abg-comparison.h (class scope_diff): New type.
(compute_diff(scope_decl_sptr, scope_decl_sptr, scope_diff)): New
declaration.
(report_changes): New declaration.
* src/abg-comparison.cc (struct scope_diff::priv): Define.
(scope_diff::{clear_lookup_tables, lookup_tables_empty,
ensure_lookup_tables_populated, scope_diff, member_changes,
deleted_member_at, inserted_member_at, changed_types,
changed_decls}): Define these new member functions.
(compute_diff): Define.
* include/abg-ir.h (decl_base_sptr): New typedef.
(operator==(decl_base_sptr, decl_base_sptr)): Declare new
operator.
* src/abg-ir.cc (operator==(decl_base_sptr, decl_base_sptr)):
Define.
(scope_decl::{operator==, traverse}): Adjust for using vectors to
store scope members now, rather than lists.
(scope_decl::{declarations, scopes}): Make these types be vector.
This makes the members of a scopes be vector, rather than lists.
This enables them to be diffed.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
* include/abg-ir.h (class scope_decl): Add end of class comment.
(class type_base): Add a _sptr typedef and end of class comment.
* src/abg-ir.cc (operator==(class_decl_sptr, class_decl_sptr)):
Fix comment.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
* include/abg-ir.h (decl_base::get_qualified_name): New
declaration.
(class_decl::{base_specs, member_types, data_members,
member_functions, member_function_templates,
member_class_templates}): Make all these containers be vectors,
rather than list. This makes these containers (like
class_decl::base_specs, class_decl::member_types, etc) be suitable
to be used by the core diffing algorithms to diff their content.
(operator==(class_decl_sptr, class_decl_sptr))
(operator==(class_decl::member_type_sptr, class_decl::member_type_sptr))
(operator==(class_decl::base_spec_sptr,
class_decl::base_spec_sptr))
(operator==(class_decl::data_member_sptr,
class_decl::data_member_sptr))
(operator==(class_decl::member_function_sptr,
class_decl::member_function_sptr))
(operator==(class_decl::member_function_template_sptr,
class_decl::member_function_template_sptr))
(operator==(class_decl::member_class_template_sptr,
class_decl::member_class_template_sptr)): Declare
these new equality operators. These are to be used by the core
diffing algorithms when comparing two vectors of shared pointers
of members of class_decls.
* src/abg-ir.cc (decl_base::get_qualified_name): Define.
(class_decl::class_decl, class_decl::operator==(class_decl&)): Adjust for the
containers type change to a vector.
(operator==(class_decl_sptr, class_decl_sptr))
(operator==(class_decl::member_type_sptr, class_decl::member_type_sptr))
(operator==(class_decl::base_spec_sptr,
class_decl::base_spec_sptr))
(operator==(class_decl::data_member_sptr,
class_decl::data_member_sptr))
(operator==(class_decl::member_function_sptr,
class_decl::member_function_sptr))
(operator==(class_decl::member_function_template_sptr,
class_decl::member_function_template_sptr))
(operator==(class_decl::member_class_template_sptr,
class_decl::member_class_template_sptr)): Define
these.
* include/abg-comparison.h (diff::scope_): Remove
(diff::{first_scope_, second_scope_}): New members.
(class_decl_diff::class_decl_diff): Pass the new scopes to this
constructor.
(class_decl_diff::{first_class_decl, second_class_decl})
(report_changes): New declarations.
* src/abg-comparison.cc (class_decl_diff::class_decl_diff): Update
as per the declaration.
(class_decl_diff::{first_class_decl, second_class_decl}): Define
as per the declaration.
(compute_diff): Initial implementation for this.
(report_changes): Define.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
* include/abg-ir.h: Lots of useless white space removals and
comments adding.
(class class_decl::member_base): Fix comment.
* src/abg-hash.cc: Lots of useless white space removals too.
* src/abg-ir.cc: Remove useless white space too.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
* include/abg-fwd.h (node_visitor_base): Renamed ir_node_visitor
into this.
* include/abg-traverse.h (struct node_visitor_base): New base for
the visitors.
(struct traversable_base): Update comments.
(traversable_base::traverse): Change this into non-pure virtual.
Make it take a reference to node_visitor_base, rather than a
reference to ir_node_visitor.
* src/abg-traverse.cc (traversable_base::traverse): New empty
default implementation.
* include/abg-ir.h: Make ir_node_visitor inherit from new
node_visitor_base.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
* include/abg-corpus.h (abigail::corpus::{translation_unit_sptr,
translation_units): Do not define these typedefs here. Rather)
(define them ...
* include/abg-ir.h
(abigail::{translation_units,translation_unit_sptr): ... here.
This is because a translation unit can be manipulated
independently from an abi corpus.
* src/abg-corpus.cc (corpus::get_translation_units): Adjust return
type to comply with the change above.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
* include/abg-corpus.h: Move location location_manager,
translation_unit from here ...
* include/abg-ir.h: ... to here. The reason being that these are
really constructs of the Internal Representation of the ABI/API of
a translation unit. What is left in abg-corpus is really
exclusively related to an ABI Corpus, which I see more as a
"packaging" construct that abstracts the bundling of several
translation units together. Also, I fixed some comments about the
location/location_manger types; now a location is made specific to
a translation unit; to an abi corpus. A location of a given
translation unit has to be decoded by the location manager of that
same translation unit.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
* include/abg-ir.h (traversable): To traversable_base.
(decl_base): Inherit from traversable_base.
(decl_base::traverse): Null definition.
(function_decl, etc.): Remove traversable_base as base class.
* include/abg-ir.h (scope_decl): Add declarations, scopes as types.
(function_type): Add parameter_sptr, parameters as types.
(enum_type_decl): Add type_sptr, enumerators as types.
(class_decl): Adjust typedefs for consistency. Change
base_specs_type to base_specs, member_types_type to member_types,
data_members_type to data_members, member_functions_type to
member_functions, member_function_templates_type to
member_function_templates, member_class_templates_type to
member_class_templates.