summaryrefslogtreecommitdiffstats
path: root/dwarflint/dwarflint.cc
diff options
context:
space:
mode:
authorPetr Machata <[email protected]>2010-09-07 23:08:05 +0200
committerPetr Machata <[email protected]>2010-09-07 23:08:05 +0200
commita5411525fce00015f6911094b1013f50b16426ae (patch)
treedb07f98ba2312896bebfac9bbfd51f3b061422c6 /dwarflint/dwarflint.cc
parent5ed27fdb82c2b21ca7d7ee2bf7f888e425cd99f0 (diff)
dwarflint: Add a lowlevel_checks pass
- which is where low-level checks are explicitly requested - and what highlevel checks, also explicitly, depend on
Diffstat (limited to 'dwarflint/dwarflint.cc')
-rw-r--r--dwarflint/dwarflint.cc32
1 files changed, 30 insertions, 2 deletions
diff --git a/dwarflint/dwarflint.cc b/dwarflint/dwarflint.cc
index cc11924e..f2116a82 100644
--- a/dwarflint/dwarflint.cc
+++ b/dwarflint/dwarflint.cc
@@ -97,13 +97,41 @@ dwarflint::check_registrar::enroll (dwarflint &lint)
}
}
+namespace
+{
+ template <class T> void include (T &to, checkdescriptor const *cd);
+
+ template <class T>
+ void add_deps (T &to, checkdescriptor const *cd)
+ {
+ for (typename T::const_iterator it = cd->prereq ().begin ();
+ it != cd->prereq ().end (); ++it)
+ include (to, *it);
+ }
+
+ template <class T>
+ void include (T &to, checkdescriptor const *cd)
+ {
+ if (cd->hidden ())
+ add_deps (to, cd);
+ else
+ to.insert (cd);
+ }
+}
+
void
dwarflint::check_registrar::list_checks () const
{
+ typedef std::set<checkdescriptor const *> descset;
+ descset descriptors;
for (std::vector <item *>::const_iterator it = _m_items.begin ();
it != _m_items.end (); ++it)
+ include (descriptors, (*it)->descriptor ());
+
+ for (descset::const_iterator it = descriptors.begin ();
+ it != descriptors.end (); ++it)
{
- checkdescriptor const &cd = (*it)->descriptor ();
+ checkdescriptor const &cd = **it;
if (be_verbose)
std::cout << "=== " << cd.name () << " ===";
else
@@ -122,7 +150,7 @@ dwarflint::check_registrar::list_checks () const
if (be_verbose)
{
- checkgroups const &prereq = cd.prereq ();
+ prereqs const &prereq = cd.prereq ();
if (!prereq.empty ())
std::cout << "prerequisites: " << prereq << std::endl;
char const *desc = cd.description ();