diff options
Diffstat (limited to 'xsde/cxx/serializer/driver-source.cxx')
-rw-r--r-- | xsde/cxx/serializer/driver-source.cxx | 21 |
1 files changed, 16 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_; |