* include/abg-reader.h (read_corpus_from_native_xml)
(read_corpus_from_native_xml_file): Declare new entry points.
* include/abg-writer.h (write_corpus_to_native_xml)
(write_corpus_to_native_xml_file): Likewise.
* src/abg-reader.cc (read_translation_unit_from_input): Renamed
read_input into this. Support new 'path' attribute for
'abi-instr' XML element.
(read_corpus_from_input): New static function.
(read_translation_unit_from_file)
(read_translation_unit_from_buffer)
(read_translation_unit_from_istream): Update wrt read_input ->
read_translation_unit_from_input.
(read_corpus_from_native_xml, read_corpus_from_native_xml)
(read_corpus_from_native_xml_file): Define new entry points.
* src/abg-writer.cc (write_translation_unit): Write 'path'
attribute into the 'abi-instr' xml element.
(write_corpus_to_native_xml, write_corpus_to_native_xml_file):
Define new entry points.
* tools/abg-tools-utils.h (file_type::{FILE_TYPE_XML_CORPUS,
FILE_TYPE_ZIP_CORPUS}): New enumerators.
* tools/abg-tools-utils.cc (guess_file_type): Support detection of
the new xml file format containing a document root 'abi-corpus'
root element.
* tools/bidiff.cc (main): Support diffing xml corpus-es and zip
corpus-es.
* tools/bidw.cc (main): Recognize elf files before reading them.
* tools/bilint.cc (main): Support reading xml/zip corpus-es too.
* tests/data/test-read-write/test[0-23].xml: Update 'path'
attribute.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
* include/abg-ir.h (type_shared_ptr_equal::operator()): Fix thinko
in checking for the boolean value of the pointers to types.
* src/abg-ir.cc (type_decl::operator==(const decl_base&)): Do not
forget to compare the decl_base part of the type too.
(type_decl::operator==(const type_base&)): To ease maintenance,
re-use the equality operator that takes a decl_base.
(scope_type_decl::operator==(const type_base&)): Likewise.
(qualified_type_def::operator==(const type_base&)): Likewise.
(compare_function_types): New sub-routine to compare function
types. It fixes an infinite recursion when comparing two methods
of the same class.
(function_type::operator==(const type_base&)): Use the new
compare_function_types function.
(class_decl::operator==(const decl_base&)): Fix a thinko in the
first test of the function. Use a dedicated scope for each class
section comparison; that way, there won't be any chance to misuse
the variables pertaining to a different section. Fix the member
function sections; we were mistakenly using the variables for the
*data* section there.
(class_decl::operator==(const type_base&)): Re-use the operator
that takes a decl_base.
(class_decl::operator==(const class_decl&)): Don't remove
const-ness during the static cast.
(class_decl::member_function::operator==(const member_function&)):
Do not remove the reference from the static cast.
(class_decl::member_class_template::operator==(const
member_base&)): Likewise.
(type_tparameter::operator==(const template_parameter&)):
Likewise.
(template_tparameter::operator==(const template_parameter&)):
Likewise.
(function_tdecl::operator==(const template_decl&)): Likewise.
(class_tdecl::operator==(const template_decl&)): Likewise.
(class_tdecl::operator==(const class_tdecl&)): Likewise.
* tests/data/test-read-write/test12.xml: Update this because the
test now correctly considers two type template parameters at the
same index as being equivalent.
* tests/data/test-read-write/test13.xml: Likewise.
Signed-off-by: Dodji Seketeli <dodji@redhat.com>
* src/abg-ir.h (class function_type): Forward decl prior to class
function_decl.
(function_decl::parameter): Pass string by const reference. Add a
variadic marker member and initialize it.
(function_decl::parameter::get_type): Add a non-const overload.
(function_decl::parameter::get_variadic_marker): New getter.
(function_decl::function_decl) Take a const reference to a vector
for parameters, type size/alignment. Add two overloads that takes a
pointer to function_type.
(function_decl::get_parameters): Move this out-of-line.
(function_decl::append_parameter(s)): Renamed
function_decl::add_parameter(s) into these. Move it out-of-line.
Add an overload.
(function_decl::{get_type, set_type}): New declaration.
(function_decl::get_return_type): Move this out-of-line.
(function_decl::is_variadic): New in-line function.
(function_decl::m_type): New data member.
(function_decl::{m_parms, m_return_type}): Remove. This are now
carried by function_decl::m_type.
(class function_type, struct function_type_hash): New
declarations.
(member_function::member_function): Take a vector of pointers to
parameters. Take size/align of the type of the member function.
Adjust initialization.
* src/abg-ir.cc (dynamic_type_hash): Hash instance of
function_type accessed through a pointer.
(function_type::{operator==, ~function_type})
(function_type_hash::operaror(), function_decl::{get_return_type,
}, function_decl::parameter:#️⃣:operator()): New definitions.
(function_decl::function_decl): The out-of-line definitions of the
declarations above.
(function_decl::append_parameter): Moved this out-of-line from
inline function_decl::add_parameter. Make this rely on the
underlying m_type.
(function_decl::operator==): Adjust for use of vector for the
parameters. Also, there is no need anymore to compare the
parameters or the return types as they are compared by the
comparison of the function types.
* src/abg-reader.cc (build_function_decl): Read the new size/alignment
attributes on the function-decl element. Build a function_type
and use it to build the function_decl. Parameters and return type
are now hung off of the function_type.
(handle_function_decl): use build_function_decl.
* src/abg-writer.cc (write_function_decl): Write the new
size/alignment properties of the function-decl element. Adjust
for the use of vectors for function parameters now.
* tests/data/test-read-write/test10.xml: Adjust for the presence
of size/alignment properties in the function-decl element now.
* tests/data/test-read-write/test11.xml: Likewise.
* tests/data/test-read-write/test12.xml: Likewise.
* tests/data/test-read-write/test13.xml: Likewise.
* tests/data/test-read-write/test14.xml: Likewise.
* tests/data/test-read-write/test9.xml: Likewise.
* src/abg-ir.cc (decl_base_hash::operator()): Don't hash the
context for decls in general.
* src/abg-reader.cc (read_context::push_decl_to_current_scope)
(read_context::push_and_key_type_decl): Add an overload that takes
a node and update_depth_info boolean.
(build_var_decl, build_type_decl, build_qualified_type_decl)
(build_pointer_type_def, build_reference_type_def)
(build_enum_type_decl, build_type_decl)
(build_template_type_parameter, build_template_non_type_parameter)
(build_template_template_parameter, build_template_parameter)
(build_type): Make these functions take an update_depth_info
parameter. Pass it do read_context::push_and_key_type_decl or
read_context::push_decl_to_current_scope rather than call
update_read_context.
(build_function_decl, build_class_decl)
(build_function_template_decl): Change the seen_by_reader
parameter into update_depth_info. Pass the update_depth_info bool
to read_context::push_decl_to_current_scope rather than call
update_depth_info here.
(handle_class, handle_function_template_decl): Adjust.
* tests/data/test-read-write/test12.xml: Add new test input.
* tests/test-read-write.cc (InOutSpec in_out_specs): Add it to the
list of input to de-serialize, serialize back and compare the two.
* tests/Makefile.am: Add the new test input to the distribution.