elf_file.hh elf_file.ii \
expected-at.cc expected.hh \
files.cc files.hh \
- highlevel_check.cc highlevel_check.hh \
+ highlevel_check.cc highlevel_check.hh highlevel_check.ii \
main.cc \
messages.cc messages.hh \
misc.cc misc.hh \
checkdescriptor const *_m_cd;
public:
- die_check_context (checkdescriptor const *cd, dwarflint &lint,
+ die_check_context (highlevel_check_i *check,
+ checkdescriptor const *cd,
+ dwarflint &lint,
die_check_registrar const ®istrar)
: _m_cd (cd)
{
stack.push_back ((*it)->descriptor ());
popper p (stack);
if (lint.rules ().should_check (stack))
- push_back ((*it)->create (stack, lint));
+ push_back ((*it)->create (check, stack, lint));
}
}
check_die_tree::check_die_tree (checkstack &stack, dwarflint &lint)
: highlevel_check<check_die_tree> (stack, lint)
{
- die_check_context ctx (descriptor (), lint, *dwarflint::die_registrar ());
+ die_check_context ctx (this, descriptor (), lint, *dwarflint::die_registrar ());
for (all_dies_iterator<dwarf> it = all_dies_iterator<dwarf> (dw);
it != all_dies_iterator<dwarf> (); ++it)
dwarflint::die_registrar ()->push_back (this);
}
- virtual die_check *create (checkstack &stack, dwarflint &lint)
+ virtual die_check *create (highlevel_check_i *check,
+ checkstack &stack, dwarflint &lint)
{
- return new T (stack, lint);
+ return new T (check, stack, lint);
}
virtual checkdescriptor const *descriptor () const
return &cd;
}
- check_duplicate_DW_tag_variable (checkstack &, dwarflint &) {}
+ check_duplicate_DW_tag_variable (highlevel_check_i *,
+ checkstack &, dwarflint &) {}
virtual void
die (all_dies_iterator<dwarf> const &it)
#include "checkrule.hh"
#include "check_registrar.hh"
#include "dwarflint.ii"
+#include "highlevel_check.ii"
// Classes for full-blown check passes.
struct main_check_item
{
virtual checkdescriptor const *descriptor () const = 0;
virtual ~die_check_item () {}
- virtual die_check *create (checkstack &stack, dwarflint &lint) = 0;
+ virtual die_check *create (highlevel_check_i *check,
+ checkstack &stack, dwarflint &lint) = 0;
};
class die_check_registrar
~open_highlevel_dwarf ();
};
+struct highlevel_check_i
+{
+ open_highlevel_dwarf *_m_loader;
+ Dwarf *const c_dw;
+ elfutils::dwarf const &dw;
+
+ highlevel_check_i (checkstack &stack, dwarflint &lint)
+ : _m_loader (lint.check (stack, _m_loader))
+ , c_dw (_m_loader->c_dw)
+ , dw (_m_loader->dw)
+ {}
+};
+
template<class T>
class highlevel_check
: public check<highlevel_check<T> >
+ , public highlevel_check_i
{
open_highlevel_dwarf *_m_loader;
public:
static checkdescriptor const *descriptor () {
static checkdescriptor cd
(checkdescriptor::create ("highlevel_check")
- .prereq<typeof (*_m_loader)> ());
+ .prereq<typeof (*highlevel_check_i::_m_loader)> ());
return &cd;
}
- Dwarf *const c_dw;
- elfutils::dwarf const &dw;
-
highlevel_check (checkstack &stack, dwarflint &lint)
- : _m_loader (lint.check (stack, _m_loader))
- , c_dw (_m_loader->c_dw)
- , dw (_m_loader->dw)
+ : highlevel_check_i (stack, lint)
{}
};
--- /dev/null
+class highlevel_check_i;