diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2012-01-08 17:27:40 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2012-01-08 17:27:40 +0200 |
commit | 4fd6bca4e75870958ea61b94e0a1e60e78cd91bc (patch) | |
tree | 2119cae72f45e1ceff1982d8364b4b678ac4ee69 /odb/validator.cxx | |
parent | 7cd11b5f604c7d786261568aa31cd2ae3638f61e (diff) |
Add support for defining composite value type as class template instantiations
Diffstat (limited to 'odb/validator.cxx')
-rw-r--r-- | odb/validator.cxx | 37 |
1 files changed, 32 insertions, 5 deletions
diff --git a/odb/validator.cxx b/odb/validator.cxx index 8a94357..94fe1da 100644 --- a/odb/validator.cxx +++ b/odb/validator.cxx @@ -290,7 +290,7 @@ namespace cerr << c.file () << ":" << c.line () << ":" << c.column () << ": " << "error: unable to resolve member function '" << name << "' " << "specified with '#pragma db callback' for class '" - << c.name () << "'" << endl; + << context::class_name (c) << "'" << endl; valid_ = false; } @@ -331,7 +331,7 @@ namespace { // @@ Should we use hint here? // - string name (b.fq_name ()); + string name (context::class_fq_name (b)); cerr << c.file () << ":" << c.line () << ":" << c.column () << ":" << " error: base class '" << name << "' is a view or value type" @@ -540,7 +540,7 @@ namespace { // @@ Should we use hint here? // - string name (b.fq_name ()); + string name (context::class_fq_name (b)); cerr << c.file () << ":" << c.line () << ":" << c.column () << ":" << " error: base class '" << name << "' is an object, " @@ -619,7 +619,7 @@ namespace { // @@ Should we use hint here? // - string name (b.fq_name ()); + string name (context::class_fq_name (b)); cerr << c.file () << ":" << c.line () << ":" << c.column () << ":" << " error: base class '" << name << "' is a view or object " @@ -689,6 +689,26 @@ namespace traversal::names names_; }; + struct typedefs1: typedefs + { + typedefs1 (traversal::declares& d) + : typedefs (true), declares_ (d) + { + } + + void + traverse (semantics::typedefs& t) + { + if (check (t)) + traversal::typedefs::traverse (t); + else + declares_.traverse (t); + } + + private: + traversal::declares& declares_; + }; + // // Pass 2. // @@ -875,6 +895,7 @@ validate (options const& ops, 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, ops, u, vt); @@ -882,13 +903,16 @@ validate (options const& ops, 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); } @@ -896,17 +920,20 @@ validate (options const& ops, { traversal::unit unit; traversal::defines unit_defines; + typedefs unit_typedefs (true); traversal::namespace_ ns; - value_type vt (valid); class2 c (valid, ops, u); unit >> unit_defines >> ns; unit_defines >> c; + unit >> unit_typedefs >> c; traversal::defines ns_defines; + typedefs ns_typedefs (true); ns >> ns_defines >> ns; ns_defines >> c; + ns >> ns_typedefs >> c; unit.dispatch (u); } |