aboutsummaryrefslogtreecommitdiff
path: root/odb/validator.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'odb/validator.cxx')
-rw-r--r--odb/validator.cxx102
1 files changed, 58 insertions, 44 deletions
diff --git a/odb/validator.cxx b/odb/validator.cxx
index b0a6492..597da01 100644
--- a/odb/validator.cxx
+++ b/odb/validator.cxx
@@ -11,6 +11,8 @@
#include <odb/context.hxx>
#include <odb/validator.hxx>
+#include <odb/relational/validator.hxx>
+
using namespace std;
namespace
@@ -1230,61 +1232,73 @@ void validator::
validate (options const& ops,
features& f,
semantics::unit& u,
- semantics::path const&,
+ semantics::path const& p,
unsigned short pass)
{
- auto_ptr<context> ctx (create_context (cerr, u, ops, f, 0));
-
bool valid (true);
- if (pass == 1)
- {
- traversal::unit unit;
- traversal::defines unit_defines;
- traversal::declares unit_declares;
- typedefs1 unit_typedefs (unit_declares);
- traversal::namespace_ ns;
- value_type vt (valid);
- class1 c (valid, vt);
-
- unit >> unit_defines >> ns;
- unit_defines >> c;
- unit >> unit_declares >> vt;
- unit >> unit_typedefs >> c;
-
- traversal::defines ns_defines;
- traversal::declares ns_declares;
- typedefs1 ns_typedefs (ns_declares);
-
- ns >> ns_defines >> ns;
- ns_defines >> c;
- ns >> ns_declares >> vt;
- ns >> ns_typedefs >> c;
-
- unit.dispatch (u);
- }
- else
{
- traversal::unit unit;
- traversal::defines unit_defines;
- typedefs unit_typedefs (true);
- traversal::namespace_ ns;
- class2 c (valid);
+ auto_ptr<context> ctx (create_context (cerr, u, ops, f, 0));
+
+ if (pass == 1)
+ {
+ traversal::unit unit;
+ traversal::defines unit_defines;
+ traversal::declares unit_declares;
+ typedefs1 unit_typedefs (unit_declares);
+ traversal::namespace_ ns;
+ value_type vt (valid);
+ class1 c (valid, vt);
+
+ unit >> unit_defines >> ns;
+ unit_defines >> c;
+ unit >> unit_declares >> vt;
+ unit >> unit_typedefs >> c;
+
+ traversal::defines ns_defines;
+ traversal::declares ns_declares;
+ typedefs1 ns_typedefs (ns_declares);
+
+ ns >> ns_defines >> ns;
+ ns_defines >> c;
+ ns >> ns_declares >> vt;
+ ns >> ns_typedefs >> c;
+
+ unit.dispatch (u);
+ }
+ else
+ {
+ traversal::unit unit;
+ traversal::defines unit_defines;
+ typedefs unit_typedefs (true);
+ traversal::namespace_ ns;
+ class2 c (valid);
- unit >> unit_defines >> ns;
- unit_defines >> c;
- unit >> unit_typedefs >> c;
+ unit >> unit_defines >> ns;
+ unit_defines >> c;
+ unit >> unit_typedefs >> c;
- traversal::defines ns_defines;
- typedefs ns_typedefs (true);
+ traversal::defines ns_defines;
+ typedefs ns_typedefs (true);
- ns >> ns_defines >> ns;
- ns_defines >> c;
- ns >> ns_typedefs >> c;
+ ns >> ns_defines >> ns;
+ ns_defines >> c;
+ ns >> ns_typedefs >> c;
- unit.dispatch (u);
+ unit.dispatch (u);
+ }
}
if (!valid)
throw failed ();
+
+ try
+ {
+ relational::validator v;
+ v.validate (ops, f, u, p, pass);
+ }
+ catch (relational::validator::failed const&)
+ {
+ throw failed ();
+ }
}