mirror of
git://sourceware.org/git/libabigail.git
synced 2024-12-18 16:04:34 +00:00
704932b75a
Several virtual desctructors were missing. Even though there might not have been actual leaks or similar bugs, it is worth fixing these locations as they might lead to bugs in the future. Clang also warns at these locations: warning: delete called on non-final 'abigail::ir::corpus' that has virtual functions but non-virtual destructor [-Wdelete-non-virtual-dtor] * include/abg-comparison.h: add virtual destructor for corpus_diff and diff_node_visitor * include/abg-corpus.h: add virtual destructor for corpus * include/abg-reporter.h: add virtual destructor for reporter_base * include/abg-traverse.h: add virtual destructor for traversable_base Signed-off-by: Matthias Maennich <maennich@google.com>
101 lines
3.0 KiB
C++
101 lines
3.0 KiB
C++
// -*- mode: C++ -*-
|
|
//
|
|
// Copyright (C) 2013-2019 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/>.
|
|
|
|
/// @file
|
|
|
|
#ifndef __ABG_TRAVERSE_H__
|
|
#define __ABG_TRAVERSE_H__
|
|
|
|
#include "abg-fwd.h"
|
|
|
|
namespace abigail
|
|
{
|
|
|
|
namespace ir
|
|
{
|
|
|
|
/// The base class for the visitor type hierarchy used for traversing
|
|
/// a hierarchy of nodes.
|
|
///
|
|
/// Client code willing to get notified for a certain kind of node
|
|
/// during traversal might want to define a visitor class that inherit
|
|
/// \a node_visitor, define and overload a node_visitor::visit method
|
|
/// for it, like what is done for the ir_node_visitor::visit set of
|
|
/// functions, for traversing internal representation nodes.
|
|
struct node_visitor_base
|
|
{};
|
|
|
|
/// The interface for types which are feeling social and want to be
|
|
/// visited during the traversal of a hierarchy of nodes.
|
|
class traversable_base
|
|
{
|
|
bool visiting_;
|
|
|
|
protected:
|
|
|
|
/// This should returns false before and after the node has been
|
|
/// visiting. During the visiting of the node (and of its children)
|
|
/// this should return true.
|
|
///
|
|
/// @return true if the current node is being visited.
|
|
bool
|
|
visiting()
|
|
{return visiting_;}
|
|
|
|
/// The traversing code should be responsible of calling this, not
|
|
/// the user code.
|
|
///
|
|
/// This is the setter of the "visiting" flag of the node being
|
|
/// visited. If set to yes, it means the node is being visited.
|
|
/// False means either the node has not yet been visited, or it
|
|
/// has already been visited.
|
|
///
|
|
/// @param f the new value of the "visiting" flag.
|
|
void
|
|
visiting(bool f)
|
|
{visiting_ = f;}
|
|
|
|
public:
|
|
traversable_base()
|
|
: visiting_()
|
|
{}
|
|
|
|
virtual ~traversable_base() {}
|
|
|
|
/// This virtual method is overloaded and implemented by any single
|
|
/// type which instance is going to be visited during the traversal
|
|
/// of translation unit nodes.
|
|
///
|
|
/// The method visits a given node and, for scopes, visits their
|
|
/// member nodes. Visiting a node means calling the
|
|
/// ir_node_visitor::visit method with the node passed as an
|
|
/// argument.
|
|
///
|
|
/// @param v the visitor used during the traverse.
|
|
///
|
|
/// @return true if traversed until the end of the type tree, false
|
|
/// otherwise.
|
|
virtual bool traverse(node_visitor_base& v);
|
|
};
|
|
|
|
}// end namespace ir.
|
|
}//end namespace abigail
|
|
#endif //__ABG_TRAVERSE_H__
|