Make abg-fwd.h use *_sptr typedefs

Until now, the abg-fwd.h where the necessary forward generic
declarations where put didn't contain the convenience typedefs of the
form foo_sptr that designate a shared pointer to type foo.

This patch moves these convenience typedefs as well as the missing
forward declarations from abg-ir.h to abg-fwd.h.  The patch also
adjusts the function declarations in abg-fwd.h to make them use these
convenience typedefs.

	* include/abg-ir.h: Move convience typedef declarations and some
	necessary forward declarations to ...
	* include/abg-fwd.h: ... here.
	(is_enum_type, is_var_decl): Take a pointer to type_or_decl_base.
	(lookup_type_in_scope): Return a type_base_sptr.
	(lookup_type_through_scopes): Introduce this to later replace the
	overload of lookup_type_in_translation_unit that takes a list of
	strings.
	(lookup_type_in_scope): Return a type_base_sptr, not a
	decl_base_sptr.
	* src/abg-ir.cc (lookup_type_in_scope, lookup_node_in_scope)
	(lookup_var_decl_in_scope): Adjust.
	(is_enum_type, is_var_decl): Take a pointer to type_or_decl_base.
	(lookup_node_in_scope): Return a type_or_decl_base_sptr.
	(lookup_type_in_scope): Return a type_base_sptr.
	(lookup_node_in_translation_unit): Return a
	type_or_decl_base_sptr.
	(lookup_type_through_scopes): Replace
	lookup_type_in_translation_unit.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
This commit is contained in:
Dodji Seketeli 2016-12-21 20:50:08 +01:00
parent 6167026544
commit bca3f9d163
3 changed files with 392 additions and 386 deletions

File diff suppressed because it is too large Load Diff

View File

@ -107,29 +107,6 @@ namespace ir
// Inject some std::tr1 types in here.
using std::tr1::unordered_map;
/// Convenience typedef for a shared pointer to a @ref corpus.
typedef shared_ptr<corpus> corpus_sptr;
/// Convenience typedef for a weak pointer to a @ref corpus.
typedef weak_ptr<corpus> corpus_wptr;
/// A convenience typedef for a shared_ptr to @ref type_or_decl_base.
typedef shared_ptr<type_or_decl_base> type_or_decl_base_sptr;
/// Convenience typedef for a shared pointer on a @ref type_base
typedef shared_ptr<type_base> type_base_sptr;
/// Convenience typedef for a shared pointer on a @ref type_decl.
typedef shared_ptr<type_decl> type_decl_sptr;
class class_or_union;
typedef shared_ptr<class_or_union> class_or_union_sptr;
typedef weak_ptr<class_or_union> class_or_union_wptr;
/// Convenience typedef for a shared pointer to an @ref environment
typedef shared_ptr<environment> environment_sptr;
/// This is an abstraction of the set of resources necessary to manage
/// several aspects of the internal representations of the Abigail
/// library.
@ -321,40 +298,6 @@ public:
unsigned& line, unsigned& column) const;
};
struct ir_node_visitor;
/// Convenience typedef for a shared pointer on a @ref
/// translation_unit type.
typedef shared_ptr<translation_unit> translation_unit_sptr;
/// Convenience typedef for a vector of @ref translation_unit_sptr.
typedef std::vector<translation_unit_sptr> translation_units;
/// Convenience typedef for a weak pointer on a @ref type_base
typedef weak_ptr<type_base> type_base_wptr;
/// Convenience typedef for a smart pointer on @ref decl_base.
typedef shared_ptr<decl_base> decl_base_sptr;
class function_type;
class function_decl;
/// Convenience typedef for a shared pointer on a @ref function_type
typedef shared_ptr<function_type> function_type_sptr;
/// Convenience typedef fo a vector of @ref function_type_sptr
typedef vector<function_type_sptr> function_types_type;
/// Convenience typedef for a weak pointer on a @ref function_type
typedef weak_ptr<function_type> function_type_wptr;
struct ir_traversable_base;
/// Convenience typedef for a shared pointer to @ref
/// ir_traversable_base.
typedef shared_ptr<ir_traversable_base> ir_traversable_base_sptr;
/// The base of an entity of the intermediate representation that is
/// to be traversed.
struct ir_traversable_base : public traversable_base
@ -925,17 +868,6 @@ public:
virtual ~context_rel();
};// end class context_rel
class class_decl;
/// Convenience typedef for a shared pointer on a @ref class_decl
typedef shared_ptr<class_decl> class_decl_sptr;
/// Convenience typedef for a vector of @ref class_decl_sptr
typedef vector<class_decl_sptr> classes_type;
/// Convenience typedef for a weak pointer on a @ref class_decl.
typedef weak_ptr<class_decl> class_decl_wptr;
/// A bitfield that gives callers of abigail::ir::equals() some
/// insight about how different two internal representation artifacts
/// are.
@ -1265,9 +1197,6 @@ operator<<(std::ostream&, decl_base::binding);
bool
equals(const scope_decl&, const scope_decl&, change_kind*);
/// Convenience typedef for a shared pointer on a @ref scope_decl.
typedef shared_ptr<scope_decl> scope_decl_sptr;
/// A declaration that introduces a scope.
class scope_decl : public virtual decl_base
{
@ -1369,9 +1298,6 @@ struct scope_decl::hash
operator()(const scope_decl* d) const;
};
/// Convenience typedef for shared pointer on @ref global_scope.
typedef shared_ptr<global_scope> global_scope_sptr;
/// This abstracts the global scope of a given translation unit.
///
/// Only one instance of this class must be present in a given
@ -1604,9 +1530,6 @@ public:
virtual ~scope_type_decl();
};
/// Convenience typedef for a shared pointer on namespace_decl.
typedef shared_ptr<namespace_decl> namespace_decl_sptr;
/// The abstraction of a namespace declaration
class namespace_decl : public scope_decl
{
@ -1632,8 +1555,6 @@ public:
bool
equals(const qualified_type_def&, const qualified_type_def&, change_kind*);
typedef shared_ptr<qualified_type_def> qualified_type_def_sptr;
/// The abstraction of a qualified type.
class qualified_type_def : public virtual type_base, public virtual decl_base
{
@ -1722,9 +1643,6 @@ operator<<(std::ostream&, qualified_type_def::CV);
bool
equals(const pointer_type_def&, const pointer_type_def&, change_kind*);
/// Convenience typedef for a shared pointer on a @ref pointer_type_def
typedef shared_ptr<pointer_type_def> pointer_type_def_sptr;
/// The abstraction of a pointer type.
class pointer_type_def : public virtual type_base, public virtual decl_base
{
@ -1780,8 +1698,6 @@ operator!=(const pointer_type_def_sptr&, const pointer_type_def_sptr&);
bool
equals(const reference_type_def&, const reference_type_def&, change_kind*);
/// Convenience typedef for a shared pointer on a @ref reference_type_def
typedef shared_ptr<reference_type_def> reference_type_def_sptr;
/// Abstracts a reference type.
class reference_type_def : public virtual type_base, public virtual decl_base
@ -1838,9 +1754,6 @@ operator!=(const reference_type_def_sptr&, const reference_type_def_sptr&);
bool
equals(const array_type_def&, const array_type_def&, change_kind*);
/// Convenience typedef for a shared pointer on a @ref array_type_def
typedef shared_ptr<array_type_def> array_type_def_sptr;
/// The abstraction of an array type.
class array_type_def : public virtual type_base, public virtual decl_base
{
@ -1974,9 +1887,6 @@ public:
bool
equals(const enum_type_decl&, const enum_type_decl&, change_kind*);
/// Convenience typedef for shared pointer on enum_type_decl.
typedef shared_ptr<enum_type_decl> enum_type_decl_sptr;
/// Abstracts a declaration for an enum type.
class enum_type_decl : public virtual type_base, public virtual decl_base
{
@ -2104,12 +2014,6 @@ public:
bool
equals(const typedef_decl&, const typedef_decl&, change_kind*);
/// Convenience typedef for a shared pointer on a @ref typedef_decl.
typedef shared_ptr<typedef_decl> typedef_decl_sptr;
/// Convenience typedef for a weak pointer on a @ref typedef_decl.
typedef weak_ptr<typedef_decl> typedef_decl_wptr;
/// The abstraction of a typedef declaration.
class typedef_decl : public virtual type_base, public virtual decl_base
{
@ -2156,11 +2060,6 @@ public:
virtual ~typedef_decl();
};// end class typedef_decl
class dm_context_rel;
/// A convenience typedef for a shared pointer to dm_context_rel.
typedef shared_ptr<dm_context_rel> dm_context_rel_sptr;
/// The abstraction for a data member context relationship. This
/// relates a data member to its parent class.
///
@ -2231,9 +2130,6 @@ public:
bool
equals(const var_decl&, const var_decl&, change_kind*);
/// Convenience typedef for a shared pointer on a @ref var_decl
typedef shared_ptr<var_decl> var_decl_sptr;
/// Abstracts a variable declaration.
class var_decl : public virtual decl_base
{
@ -2321,9 +2217,6 @@ public:
bool
equals(const function_decl&, const function_decl&, change_kind*);
/// Convenience typedef for a shared pointer on a @ref function_decl
typedef shared_ptr<function_decl> function_decl_sptr;
/// Abstraction for a function declaration.
class function_decl : public virtual decl_base
{
@ -2646,8 +2539,6 @@ struct function_type::hash
operator()(const function_type_sptr t) const;
};// end struct function_type::hash
/// Convenience typedef for shared pointer to @ref method_type.
typedef shared_ptr<method_type> method_type_sptr;
/// Abstracts the type of a class member function.
class method_type : public function_type
{
@ -2704,15 +2595,6 @@ public:
get_method_type_name(const method_type& fn_type, bool internal);
};// end class method_type.
/// Convenience typedef for shared pointer to template parameter
typedef shared_ptr<template_parameter> template_parameter_sptr;
/// Convenience typedef for a shared pointer to @ref template_decl
typedef shared_ptr<template_decl> template_decl_sptr;
/// Convenience typedef for a weak pointer to template_decl
typedef weak_ptr<template_decl> template_decl_wptr;
/// The base class of templates.
class template_decl : public virtual decl_base
{
@ -2744,9 +2626,6 @@ public:
virtual ~template_decl();
};//end class template_decl
/// Convenience typedef for a shared_ptr to @ref template_parameter
typedef shared_ptr<template_parameter> template_parameter_sptr;
/// Base class for a template parameter. Client code should use the
/// more specialized type_template_parameter,
/// non_type_template_parameter and template_template_parameter below.
@ -2796,9 +2675,6 @@ struct template_decl::hash
operator()(const template_decl& t) const;
};// end struct template_decl::hash
/// Convenience typedef for a shared pointer to @ref type_tparameter.
typedef shared_ptr<type_tparameter> type_tparameter_sptr;
/// Abstracts a type template parameter.
class type_tparameter : public template_parameter, public virtual type_decl
{
@ -2832,10 +2708,6 @@ public:
virtual ~type_tparameter();
};// end class type_tparameter.
/// Convenience typedef for shared pointer to @ref
/// non_type_template_parameter
typedef shared_ptr<non_type_tparameter> non_type_tparameter_sptr;
/// Abstracts non type template parameters.
class non_type_tparameter : public template_parameter, public virtual decl_base
{
@ -2885,9 +2757,6 @@ struct non_type_tparameter::hash
class template_tparameter;
/// Convenience typedef for a shared_ptr to @ref template_tparameter.
typedef shared_ptr<template_tparameter> template_tparameter_sptr;
/// Abstracts a template template parameter.
class template_tparameter : public type_tparameter, public template_decl
{
@ -2920,9 +2789,6 @@ public:
virtual ~template_tparameter();
};
/// Convenience typedef for shared pointer to type_composition
typedef shared_ptr<type_composition> type_composition_sptr;
/// This abstracts a composition of types based on template type
/// parameters. The result of the composition is a type that can be
/// referred to by a template non-type parameter. Instances of this
@ -2967,9 +2833,6 @@ struct type_composition::hash
}; //struct type_composition::hash
/// Convenience typedef for a shared pointer on a @ref function_tdecl
typedef shared_ptr<function_tdecl> function_tdecl_sptr;
/// Abstract a function template declaration.
class function_tdecl : public template_decl, public scope_decl
{
@ -3021,9 +2884,6 @@ public:
virtual ~function_tdecl();
}; // end class function_tdecl.
/// Convenience typedef for a shared pointer on a @ref class_tdecl
typedef shared_ptr<class_tdecl> class_tdecl_sptr;
/// Abstract a class template.
class class_tdecl : public template_decl, public scope_decl
{
@ -3121,9 +2981,6 @@ public:
operator==(const member_base& o) const;
};// end class member_base
class method_decl;
typedef shared_ptr<method_decl> method_decl_sptr;
/// Abstraction of the declaration of a method.
class method_decl : public function_decl
{
@ -3217,14 +3074,6 @@ public:
virtual ~method_decl();
};// end class method_decl
class member_function_template;
typedef shared_ptr<member_function_template> member_function_template_sptr;
typedef vector<member_function_template_sptr> member_function_templates;
class member_class_template;
typedef shared_ptr<member_class_template> member_class_template_sptr;
typedef vector<member_class_template_sptr> member_class_templates;
/// The base type of @ref class_decl and @ref union_decl
class class_or_union : public scope_type_decl
{
@ -3672,8 +3521,6 @@ is_class_base_spec(type_or_decl_base*);
class_decl::base_spec_sptr
is_class_base_spec(type_or_decl_base_sptr);
typedef shared_ptr<union_decl> union_decl_sptr;
/// Abstracts a union type declaration.
class union_decl : public class_or_union
{
@ -3723,12 +3570,6 @@ method_decl_sptr
copy_member_function(const union_decl_sptr& union_type,
const method_decl* f);
class mem_fn_context_rel;
/// A convenience typedef for a shared pointer to @ref
/// mem_fn_context_rel.
typedef shared_ptr<mem_fn_context_rel> mem_fn_context_rel_sptr;
/// Abstraction of a member function context relationship. This
/// relates a member function to its parent class.
class mem_fn_context_rel : public context_rel

View File

@ -5858,18 +5858,9 @@ is_typedef(type_base* t)
///
/// @return the enum_type_decl_sptr if @p d is an enum, nil otherwise.
enum_type_decl_sptr
is_enum_type(const decl_base_sptr& d)
is_enum_type(const type_or_decl_base_sptr& d)
{return dynamic_pointer_cast<enum_type_decl>(d);}
/// Test if a type is an enum_type_decl
///
/// @param t the type to test for.
///
/// @return the enum_type_decl_sptr if @p t is an enum, nil otherwise.
enum_type_decl_sptr
is_enum_type(const type_base_sptr& t)
{return dynamic_pointer_cast<enum_type_decl>(t);}
/// Test if a type is a class. This function looks through typedefs.
///
/// @parm t the type to consider.
@ -6138,7 +6129,7 @@ is_var_decl(const type_or_decl_base* tod)
/// @return the var_decl_sptr iff decl is a variable declaration; nil
/// otherwise.
var_decl_sptr
is_var_decl(const shared_ptr<decl_base> decl)
is_var_decl(const type_or_decl_base_sptr& decl)
{return dynamic_pointer_cast<var_decl>(decl);}
/// Tests if a declaration is a namespace declaration.
@ -6588,7 +6579,7 @@ synthesize_function_type_from_translation_unit(const function_type& fn_type,
/// @param skope the scope to look into.
///
/// @return the declaration of the type if found, NULL otherwise.
const decl_base_sptr
const type_base_sptr
lookup_type_in_scope(const string& fqn,
const scope_decl_sptr& skope)
{
@ -6710,11 +6701,11 @@ convert_node_to_decl(var_decl_sptr node)
/// @return the declaration of the looked up node, or NULL if it
/// wasn't found.
template<typename NodeKind>
static const decl_base_sptr
static const type_or_decl_base_sptr
lookup_node_in_scope(const list<string>& fqn,
const scope_decl_sptr& skope)
{
decl_base_sptr resulting_decl;
type_or_decl_base_sptr resulting_decl;
shared_ptr<NodeKind> node;
bool it_is_last = false;
scope_decl_sptr cur_scope = skope, new_scope, scope;
@ -6749,7 +6740,7 @@ lookup_node_in_scope(const list<string>& fqn,
if (cl->get_is_declaration_only()
&& !cl->get_definition_of_declaration())
continue;
resulting_decl = convert_node_to_decl(node);
resulting_decl = node;
break;
}
}
@ -6770,10 +6761,10 @@ lookup_node_in_scope(const list<string>& fqn,
/// @param skope the scope to look into.
///
/// @return the declaration of the type found.
const decl_base_sptr
const type_base_sptr
lookup_type_in_scope(const list<string>& comps,
const scope_decl_sptr& scope)
{return lookup_node_in_scope<type_base>(comps, scope);}
{return is_type(lookup_node_in_scope<type_base>(comps, scope));}
/// lookup a type in a scope.
///
@ -6872,7 +6863,7 @@ lookup_type_in_scope(const type_base_sptr type,
const decl_base_sptr
lookup_var_decl_in_scope(const std::list<string>& comps,
const scope_decl_sptr& skope)
{return lookup_node_in_scope<var_decl>(comps, skope);}
{return is_var_decl(lookup_node_in_scope<var_decl>(comps, skope));}
/// Lookup an IR node from a translation unit.
///
@ -6886,7 +6877,7 @@ lookup_var_decl_in_scope(const std::list<string>& comps,
///
/// @return the declaration of the IR node found, NULL otherwise.
template<typename NodeKind>
static const decl_base_sptr
static const type_or_decl_base_sptr
lookup_node_in_translation_unit(const list<string>& fqn,
const translation_unit& tu)
{return lookup_node_in_scope<NodeKind>(fqn, tu.get_global_scope());}
@ -6899,10 +6890,10 @@ lookup_node_in_translation_unit(const list<string>& fqn,
/// @param tu the translation unit to perform lookup from.
///
/// @return the declaration of the IR node found, NULL otherwise.
const decl_base_sptr
lookup_type_in_translation_unit(const list<string>& fqn,
const translation_unit& tu)
{return lookup_node_in_translation_unit<type_base>(fqn, tu);}
type_base_sptr
lookup_type_through_scopes(const list<string>& fqn,
const translation_unit& tu)
{return is_type(lookup_node_in_translation_unit<type_base>(fqn,tu));}
/// Lookup a class type from a translation unit.
///