aboutsummaryrefslogtreecommitdiff
path: root/xsde/cxx/serializer
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2011-09-14 14:35:19 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2011-09-14 14:35:19 +0200
commita32d89c25b80f443d93a050a979e465f4d1dc39e (patch)
tree9e168504996951118230d24056811c4c48bd938d /xsde/cxx/serializer
parent62cadf03af778b508bd684be19c6e6958b2fe52f (diff)
Fix bug in aggregate generation for derived lists
Diffstat (limited to 'xsde/cxx/serializer')
-rw-r--r--xsde/cxx/serializer/driver-source.cxx21
-rw-r--r--xsde/cxx/serializer/type-processor.cxx4
2 files changed, 20 insertions, 5 deletions
diff --git a/xsde/cxx/serializer/driver-source.cxx b/xsde/cxx/serializer/driver-source.cxx
index 8ae20d8..9a46364 100644
--- a/xsde/cxx/serializer/driver-source.cxx
+++ b/xsde/cxx/serializer/driver-source.cxx
@@ -28,10 +28,12 @@ namespace CXX
// For base types we only want member's types, but not the
// base itself.
//
- struct BaseType: Traversal::Complex, Context
+ struct BaseType: Traversal::Complex,
+ Traversal::List,
+ Context
{
- BaseType (Context& c)
- : Context (c)
+ BaseType (Context& c, Traversal::NodeBase& def)
+ : Context (c), def_ (def)
{
}
@@ -46,6 +48,15 @@ namespace CXX
contains_compositor (c);
}
}
+
+ virtual Void
+ traverse (SemanticGraph::List& l)
+ {
+ def_.dispatch (l.argumented ().type ());
+ }
+
+ private:
+ Traversal::NodeBase& def_;
};
struct SerializerDef: Traversal::Type,
@@ -111,7 +122,7 @@ namespace CXX
Context
{
SerializerDef (Context& c, TypeInstanceMap& map, InstanceSet& set)
- : Context (c), map_ (map), set_ (set), base_ (c)
+ : Context (c), map_ (map), set_ (set), base_ (c, *this)
{
*this >> inherits_ >> base_ >> inherits_;
@@ -640,7 +651,7 @@ namespace CXX
Context
{
SerializerConnect (Context& c, TypeInstanceMap& map)
- : Context (c), map_ (map), base_ (c)
+ : Context (c), map_ (map), base_ (c, *this)
{
*this >> inherits_ >> base_ >> inherits_;
diff --git a/xsde/cxx/serializer/type-processor.cxx b/xsde/cxx/serializer/type-processor.cxx
index 86a18aa..a07ff31 100644
--- a/xsde/cxx/serializer/type-processor.cxx
+++ b/xsde/cxx/serializer/type-processor.cxx
@@ -206,6 +206,8 @@ namespace CXX
{
Complex::names (c);
}
+
+ // @@ What about list?
};
//
@@ -225,6 +227,8 @@ namespace CXX
Complex::inherits (c);
}
+ // @@ What about list?
+
private:
Serializer::Type& type_;
Traversal::Inherits inherits_;