diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2011-09-19 16:19:25 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2011-09-19 16:19:25 +0200 |
commit | 55df757e98329e8e09afffe274ce2ceab269f8b3 (patch) | |
tree | 738b3a5b1c46e3b1b04184cfd9aeb32eb21af48a /odb/validator.cxx | |
parent | 6c01cad9cbfb6e69121d106226b2c50026f86fa9 (diff) |
Make processing top-level action, like validation and generation
Diffstat (limited to 'odb/validator.cxx')
-rw-r--r-- | odb/validator.cxx | 79 |
1 files changed, 70 insertions, 9 deletions
diff --git a/odb/validator.cxx b/odb/validator.cxx index 201caf1..7fb6a68 100644 --- a/odb/validator.cxx +++ b/odb/validator.cxx @@ -8,6 +8,7 @@ #include <iostream> #include <odb/traversal.hxx> +#include <odb/common.hxx> #include <odb/context.hxx> #include <odb/validator.hxx> @@ -165,6 +166,64 @@ namespace traversal::inherits inherits_; }; + struct view_data_member: object_members_base + { + view_data_member (bool& valid) + : object_members_base (false, false, true), valid_ (valid), dm_ (0) + { + } + + virtual void + traverse_simple (semantics::data_member& m) + { + if (context::object_pointer (m.type ())) + { + semantics::data_member& dm (dm_ != 0 ? *dm_ : m); + + cerr << dm.file () << ":" << dm.line () << ":" << dm.column () << ":" + << " error: view data member '" << member_prefix_ << m.name () + << "' is an object pointer" << endl; + + cerr << dm.file () << ":" << dm.line () << ":" << dm.column () << ":" + << ": info: views cannot contain object pointers" << endl; + + valid_ = false; + } + } + + virtual void + traverse_container (semantics::data_member& m, semantics::type&) + { + semantics::data_member& dm (dm_ != 0 ? *dm_ : m); + + cerr << dm.file () << ":" << dm.line () << ":" << dm.column () << ":" + << " error: view data member '" << member_prefix_ << m.name () + << "' is a container" << endl; + + cerr << dm.file () << ":" << dm.line () << ":" << dm.column () << ":" + << ": info: views cannot contain containers" << endl; + + valid_ = false; + } + + virtual void + traverse_composite (semantics::data_member* m, semantics::class_& c) + { + semantics::data_member* old_dm (dm_); + + if (dm_ == 0) + dm_ = m; + + object_members_base::traverse_composite (m, c); + + dm_ = old_dm; + } + + private: + bool& valid_; + semantics::data_member* dm_; // Direct view data member. + }; + // // struct value_type: traversal::type @@ -195,9 +254,11 @@ namespace options_ (ops), unit_ (unit), vt_ (vt), - member_ (valid) + member_ (valid), + view_member_ (valid) { *this >> names_ >> member_; + view_names_ >> view_member_; } virtual void @@ -439,6 +500,8 @@ namespace valid_ = false; } + + //names (c, view_names_); } virtual void @@ -514,14 +577,17 @@ namespace data_member member_; traversal::names names_; + + view_data_member view_member_; + traversal::names view_names_; }; } bool validator:: -validate (options const& ops, - semantics::unit& u, - semantics::path const&) +validate (options const& ops, semantics::unit& u, semantics::path const&) { + auto_ptr<context> ctx (create_context (cerr, u, ops)); + bool valid (true); traversal::unit unit; @@ -546,8 +612,3 @@ validate (options const& ops, return valid; } - -validator:: -validator () -{ -} |