mirror of
git://sourceware.org/git/libabigail.git
synced 2024-12-23 10:12:25 +00:00
165434a9d7
* include/abg-ir.h (ir_traversable_base): New type to be the base of IR nodes that are to be traversed. Extends traversable_base. Its ir_traversable_base::traversable() method takes an ir_node_visitor&. (ir_node_visitor::visit): Change these virtual overloads to take pointers to IR nodes, rather than references. This will be useful to e.g, store these IR nodes in containers on the side for some algorithms to work. That is going to be useful later to, e.g. build symbol tables on the side, using the visitor interface. (class decl_base): Make this inherit ir_traversable_base. * src/abg-ir.cc (*::traverse): Adjust comments and the call the ir_node_visitor::visit call. Use the ir_traversable_base type rather than traversable_base. (ir_traversable_base::traverse): Define. (ir_node_visitor::visit): Change these overloads to take pointers rather than reference to ir nodes. * tests/test-walker.cc (name_printing_visitor::visit): Adjust to take pointers rather than references. Signed-off-by: Dodji Seketeli <dodji@redhat.com>
63 lines
1.7 KiB
C++
63 lines
1.7 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/>.
|
|
|
|
#include <string>
|
|
#include <fstream>
|
|
#include <iostream>
|
|
#include <cstdlib>
|
|
#include "abg-ir.h"
|
|
#include "abg-reader.h"
|
|
#include "test-utils.h"
|
|
|
|
using std::string;
|
|
using std::ofstream;
|
|
using std::cerr;
|
|
using std::cout;
|
|
|
|
struct name_printing_visitor : public abigail::ir_node_visitor
|
|
{
|
|
void
|
|
visit(abigail::class_decl* klass)
|
|
{cout << "class name: " << klass->get_name() << "\n";}
|
|
|
|
void
|
|
visit(abigail::namespace_decl* ns)
|
|
{cout << "namespace name: " << ns->get_name() << "\n";}
|
|
};
|
|
|
|
int
|
|
main(int argc, char **argv)
|
|
{
|
|
if (argc < 2)
|
|
return 0;
|
|
|
|
string file_name = argv[1];
|
|
|
|
abigail::translation_unit tu(file_name);
|
|
if (!abigail::xml_reader::read_translation_unit_from_file(tu))
|
|
{
|
|
cerr << "failed to read " << file_name << "\n";
|
|
return 1;
|
|
}
|
|
|
|
name_printing_visitor v;
|
|
tu.traverse(v);
|
|
}
|