mirror of
git://sourceware.org/git/libabigail.git
synced 2025-01-13 04:41:28 +00:00
802f7cbc92
* include/abg-comp-filter.h: New file. * include/Makefile.am: Add the new include/abg-comp-filter.h to the source distribution. * include/abg-comparison.h (enum visiting_kind, diff_category): New enums. (operator|): Declare new operator declaration for the new visiting_kind enum. (operator{|,^,&,~}): Declare new operator decl for the new diff_category enum. (diff_context::{get_allowed_category, set_allowed_category, switch_categories_on, switch_categories_off, diff_filters, add_diff_filter, maybe_apply_filters}): Declare new member functions. (diff::{parent_, category_}): New members. (diff::diff): Adjust. (diff::{get_parent, set_parent, get_category, add_to_category, is_filtered_out, to_be_reported}): New members. (diff_node_visitor::{get_visiting_kind, set_visiting_kind}): New members. (diff_node_visitor::visit): Add a new flag to saying if the visitor is being called in post or pre children traversing mode. * src/abg-comparison.cc (operator|): Declare new operator declaration for the new visiting_kind enum. (operator{|,^,&,~}): Declare new operator decl for the new diff_category enum. (diff_context::priv::{allowed_category_, filters_}): New members. (diff_context::diff_context): Add all known filters. (diff_context::{get_allowed_category, set_allowed_category, switch_categories_on, switch_categories_off, diff_filters, add_diff_filter, maybe_apply_filters}): Define new member functions. (diff::{is_filtered_out, to_be_reported}): Define new members. (*::report): Use the new diff::to_be_reported function. (*::traverse): Adjust for pre/post visiting. (var_diff::var_diff): Chain the type diff node to its parent. ({pointer_diff, reference_diff, qualified_type_diff, typedef_diff}::underlying_type_diff): Chain the underlying type diff node to its parent. (enum_diff::enum_diff): Likewise. (base_diff::underlying_class_diff): Likewise. ({class_diff, corpus_diff}::report): Do not report changed (member) functions that have been filtered out. Rather report that they have been filtered out. ({function_decl_diff, class_diff}::traverse): Chain underlying type diff nodes to their parent. (diff_node_visitor::visit): Add a new flag to saying if the visitor is being called in post or pre children traversing mode. Make sure to call the default diff::visit overload. * src/abg-comp-filter.cc: New file. * src/Makefile.am: Add the new abg-comp-filter.cc to the source distribution. * tools/bidiff.cc (options::show_harm{ful,less}_changes): New members. (display_usage): Add usage strings for --no-harmless and --no-harmful options. (parse_command_line): Parse --no-harmless and --no-harmful command line options. (set_diff_context_from_opts): Populate the diff context accordingly. Signed-off-by: Dodji Seketeli <dodji@redhat.com>
95 lines
2.8 KiB
C++
95 lines
2.8 KiB
C++
// -*- Mode: C++ -*-
|
|
//
|
|
// Copyright (C) 2013 Red Hat, Inc.
|
|
//
|
|
// This file is part of the GNU Application Binary Interface Generic
|
|
// Analysis and Instrumentation Library (libabigail). This library is
|
|
// free software; you can redistribute it and/or modify it under the
|
|
// terms of the GNU Lesser General Public License as published by the
|
|
// Free Software Foundation; either version 3, or (at your option) any
|
|
// later version.
|
|
|
|
// This library is distributed in the hope that it will be useful, but
|
|
// WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
// General Lesser Public License for more details.
|
|
|
|
// You should have received a copy of the GNU Lesser General Public
|
|
// License along with this program; see the file COPYING-LGPLV3. If
|
|
// not, see <http://www.gnu.org/licenses/>.
|
|
//
|
|
// Author: Dodji Seketeli
|
|
|
|
/// @file
|
|
///
|
|
/// This header declares filters for the diff trees resulting from
|
|
/// comparing ABI Corpora.
|
|
|
|
#ifndef __ABG_COMP_FILTER_H__
|
|
#define __ABG_COMP_FILTER_H__
|
|
|
|
#include "abg-comparison.h"
|
|
|
|
namespace abigail
|
|
{
|
|
namespace comparison
|
|
{
|
|
/// Facilities to walk, categorize and possibly filter nodes of the
|
|
/// diff tree.
|
|
namespace filtering
|
|
{
|
|
|
|
class filter_base;
|
|
/// Convenience typedef for a shared pointer to filter_base
|
|
typedef shared_ptr<filter_base> filter_base_sptr;
|
|
/// Convenience typedef for a vector of filter_base_sptr
|
|
typedef std::vector<filter_base_sptr> filters;
|
|
|
|
/// The base class for the diff tree node filter.
|
|
///
|
|
/// It's intended to walk a tree of diff nodes and tag each relevant
|
|
/// name into one or several categories depending on well choosen
|
|
/// properties of the diff nodes.
|
|
struct filter_base : public diff_node_visitor
|
|
{
|
|
friend void
|
|
apply_filter(filter_base_sptr f, diff_sptr deef);
|
|
}; //end class filter_base
|
|
|
|
void
|
|
apply_filter(filter_base& filter, diff_sptr d);
|
|
|
|
void
|
|
apply_filter(filter_base_sptr filter, diff_sptr d);
|
|
|
|
class harmless_filter;
|
|
/// Convenience typedef for a shared pointer to a harmless_filter.
|
|
typedef shared_ptr<harmless_filter> harmless_filter_sptr;
|
|
|
|
/// A filter that walks the diff nodes tree and tags relevant diff
|
|
/// nodes into categories considered to represent harmless changes.
|
|
class harmless_filter : public filter_base
|
|
{
|
|
virtual bool
|
|
visit(diff*, bool);
|
|
}; // end class harmless_filter
|
|
|
|
class harmful_filter;
|
|
/// A convenience typedef for a shared pointer to harmful_filter.
|
|
typedef shared_ptr<harmful_filter> harmful_filter_sptr;
|
|
|
|
/// A filter that walks the diff nodes tree tags relevant diff nodes
|
|
/// into categories considered to represent potentially harmful
|
|
/// changes.
|
|
class harmful_filter : public filter_base
|
|
{
|
|
virtual bool
|
|
visit(diff*, bool);
|
|
}; // end class harmful_filter
|
|
|
|
} // end namespace filtering
|
|
} // end namespace comparison
|
|
} // end namespace abigail
|
|
|
|
#endif // __ABG_COMP_FILTER_H__
|