aboutsummaryrefslogtreecommitdiff
path: root/odb/validator.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2012-01-08 17:27:40 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2012-01-08 17:27:40 +0200
commit4fd6bca4e75870958ea61b94e0a1e60e78cd91bc (patch)
tree2119cae72f45e1ceff1982d8364b4b678ac4ee69 /odb/validator.cxx
parent7cd11b5f604c7d786261568aa31cd2ae3638f61e (diff)
Add support for defining composite value type as class template instantiations
Diffstat (limited to 'odb/validator.cxx')
-rw-r--r--odb/validator.cxx37
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);
}