diff options
Diffstat (limited to 'TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp')
-rw-r--r-- | TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp | 233 |
1 files changed, 184 insertions, 49 deletions
diff --git a/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp b/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp index ef34163f4d2..a7ac846a071 100644 --- a/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp +++ b/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp @@ -228,76 +228,216 @@ namespace private: std::ostream& os; }; - - // Generates operations associated with attributes. - // @@@ (JP) Need to support exceptions. - struct AttributeEmitter : Traversal::ReadWriteAttribute, - EmitterBase + + // Generates the set operation of a ReadWriteAttribute. + struct WriteAttributeEmitter : Traversal::ReadWriteAttribute, + EmitterBase { - AttributeEmitter (Context& c) + WriteAttributeEmitter (Context& c) : EmitterBase (c), write_type_name_emitter_ (c.os ()), - read_type_name_emitter_ (c.os ()) + type_name_emitter_ (c.os ()) { write_belongs_.node_traverser (write_type_name_emitter_); - read_belongs_.node_traverser (read_type_name_emitter_); + + edge_traverser (set_raises_); + set_raises_.node_traverser (type_name_emitter_); } - - virtual void traverse (SemanticGraph::ReadWriteAttribute& a) + + virtual void + pre (SemanticGraph::ReadWriteAttribute&) { - os << "virtual "; - - Traversal::ReadWriteAttribute::belongs (a, read_belongs_); - - os << endl - << a.name () << " (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; - - os << "virtual void" << endl - << a.name () << " (" << endl; - + os << "virtual void" << endl; + } + + virtual void + name (SemanticGraph::ReadWriteAttribute& a) + { + os << a.name () << " (" << endl; + Traversal::ReadWriteAttribute::belongs (a, write_belongs_); - - os << endl - << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + + os << " " << a.name () << endl + << STRS[ENV_HDR] << ")" << endl; + } + + virtual void + get_raises (SemanticGraph::ReadWriteAttribute&) + { + } + + virtual void + set_raises_none (SemanticGraph::ReadWriteAttribute&) + { + os << STRS[EXCP_SNGL]; + } + + virtual void + set_raises_pre (SemanticGraph::ReadWriteAttribute&) + { + os << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl; + } + + virtual void + set_raises_post (SemanticGraph::ReadWriteAttribute&) + { + os << "))"; + } + + virtual void + post (SemanticGraph::ReadWriteAttribute& a) + { + os << ";" << endl << endl; } + virtual void + comma (SemanticGraph::ReadWriteAttribute&) + { + os << "," << endl; + } + private: INArgTypeNameEmitter write_type_name_emitter_; - ReturnTypeNameEmitter read_type_name_emitter_; + TypeNameEmitter type_name_emitter_; Traversal::Belongs write_belongs_; - Traversal::Belongs read_belongs_; + Traversal::SetRaises set_raises_; }; - // Generates operations associated with readonly attributes. - // @@@ (JP) Need to support exceptions. - struct ReadOnlyAttributeEmitter : Traversal::ReadAttribute, - EmitterBase + // Generates operations associated with attributes. + struct AttributeEmitter : Traversal::ReadAttribute, + Traversal::ReadWriteAttribute, + EmitterBase { - ReadOnlyAttributeEmitter (Context& c) + AttributeEmitter (Context& c) : EmitterBase (c), - read_type_name_emitter_ (c.os ()) + read_type_name_emitter_ (c.os ()), + type_name_emitter_ (c.os ()) { read_belongs_.node_traverser (read_type_name_emitter_); + + edge_traverser (get_raises_); + get_raises_.node_traverser (type_name_emitter_); } + + // ReadWriteAttribute + // + virtual void + pre (SemanticGraph::ReadWriteAttribute& a) + { + os << "virtual "; - virtual void traverse (SemanticGraph::ReadAttribute& a) + Traversal::ReadWriteAttribute::belongs (a, read_belongs_); + + os << endl; + } + + virtual void + name (SemanticGraph::ReadWriteAttribute& a) + { + os << a.name () << " (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl; + } + + virtual void + get_raises_none (SemanticGraph::ReadWriteAttribute&) + { + os << STRS[EXCP_SNGL]; + } + + virtual void + get_raises_pre (SemanticGraph::ReadWriteAttribute&) + { + os << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl; + } + + virtual void + get_raises_post (SemanticGraph::ReadWriteAttribute&) + { + os << "))"; + } + + virtual void + set_raises (SemanticGraph::ReadWriteAttribute&) + { + } + + virtual void + post (SemanticGraph::ReadWriteAttribute& a) + { + os << ";" << endl << endl; + + WriteAttributeEmitter write_attribute_emitter (ctx); + write_attribute_emitter.traverse (a); + } + + virtual void + comma (SemanticGraph::ReadWriteAttribute&) + { + os << "," << endl; + } + + // ReadAttribute + // + virtual void + pre (SemanticGraph::ReadAttribute& a) { os << "virtual "; Traversal::ReadAttribute::belongs (a, read_belongs_); + + os << endl; + } + + virtual void + name (SemanticGraph::ReadAttribute& a) + { + os << a.name () << " (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl; + } + + virtual void + get_raises_none (SemanticGraph::ReadAttribute&) + { + os << STRS[EXCP_SNGL]; + } + + virtual void + get_raises_pre (SemanticGraph::ReadAttribute&) + { + os << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl; + } + + virtual void + get_raises_post (SemanticGraph::ReadAttribute&) + { + os << "))"; + } + + virtual void + set_raises (SemanticGraph::ReadAttribute&) + { + } - os << endl - << a.name () << " (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + virtual void + post (SemanticGraph::ReadAttribute& a) + { + os << ";" << endl << endl; } + virtual void + comma (SemanticGraph::ReadAttribute&) + { + os << "," << endl; + } + private: ReturnTypeNameEmitter read_type_name_emitter_; + TypeNameEmitter type_name_emitter_; Traversal::Belongs read_belongs_; + Traversal::GetRaises get_raises_; }; struct InterfaceEmitter : Traversal::Interface, @@ -367,10 +507,9 @@ namespace interface_emitter.edge_traverser (defines_); interface_emitter.edge_traverser (inherits_); + // Works for both read/write and readonly attributes. AttributeEmitter attribute_emitter (ctx); - ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx); defines_.node_traverser (attribute_emitter); - defines_.node_traverser (read_only_attribute_emitter); OperationEmitter operation_emitter (ctx); defines_.node_traverser (operation_emitter); @@ -1319,10 +1458,9 @@ namespace interface_emitter.edge_traverser (defines); interface_emitter.edge_traverser (interface_inherits); + // Works for both read/write and readonly attributes. AttributeEmitter attribute_emitter (ctx); - ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx); defines.node_traverser (attribute_emitter); - defines.node_traverser (read_only_attribute_emitter); OperationEmitter operation_emitter (ctx); defines.node_traverser (operation_emitter); @@ -1395,10 +1533,9 @@ namespace component_emitter.edge_traverser (defines); component_emitter.edge_traverser (component_inherits); + // Works for both read/write and readonly attributes. AttributeEmitter attribute_emitter (ctx); - ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx); defines.node_traverser (attribute_emitter); - defines.node_traverser (read_only_attribute_emitter); component_emitter.traverse (t); } @@ -1962,10 +2099,9 @@ namespace home_emitter.edge_traverser (defines); home_emitter.edge_traverser (home_inherits); + // Works for both read/write and readonly attributes. AttributeEmitter attribute_emitter (ctx); - ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx); defines.node_traverser (attribute_emitter); - defines.node_traverser (read_only_attribute_emitter); home_emitter.traverse (t); } @@ -1989,10 +2125,9 @@ namespace interface_emitter.edge_traverser (defines); interface_emitter.edge_traverser (inherits); + // Works for both read/write and readonly attributes. AttributeEmitter attribute_emitter (ctx); - ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx); defines.node_traverser (attribute_emitter); - defines.node_traverser (read_only_attribute_emitter); OperationEmitter operation_emitter (ctx); defines.node_traverser (operation_emitter); |