diff options
Diffstat (limited to 'TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp')
-rw-r--r-- | TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp | 1041 |
1 files changed, 847 insertions, 194 deletions
diff --git a/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp b/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp index 795fd3dfd5b..58b73386c0f 100644 --- a/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp +++ b/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp @@ -3,16 +3,8 @@ // cvs-id : $Id$ #include "ServantHeaderGenerator.hpp" -#include "CorbaTypeNameEmitters.hpp" -#include "UtilityTypeNameEmitters.hpp" -#include "AttributeHeaderEmitters.hpp" -#include "OperationHeaderEmitters.hpp" -#include "ParameterEmitter_T.hpp" -#include "CompositionEmitter.hpp" -#include "ModuleEmitter.hpp" -#include "InterfaceEmitter.hpp" +#include "TypeNameEmitter.hpp" #include "Literals.hpp" -#include "Upcase.hpp" #include <ostream> @@ -25,8 +17,475 @@ using namespace StringLiterals; using namespace CCF::CIDL; using namespace CCF::CIDL::SemanticGraph; +using std::string; + +namespace +{ + // On some platforms toupper can be something other than a + // function. + int + upcase (int c) + { + return std::toupper (c); + } +} + namespace { + class Context + { + public: + Context (std::ostream& os, + string export_macro) + : os_ (os), + export_macro_ (export_macro) + { + } + + std::ostream& + os () + { + return os_; + } + + string + export_macro () + { + return export_macro_; + } + + private: + std::ostream& os_; + string export_macro_; + }; + + class EmitterBase + { + public: + EmitterBase (Context& c) + : ctx (c), + os (ctx.os ()) + { + } + + protected: + Context& ctx; + std::ostream& os; + }; + + struct ModuleEmitter : Traversal::Module, EmitterBase + { + ModuleEmitter (Context& c) + : EmitterBase (c) + { + } + + virtual void + pre (Type& t) + { + os << "namespace " << t.name () << "{"; + } + + virtual void + post (Type&) + { + os << "}"; + } + }; + + struct OperationEmitter : Traversal::Operation, EmitterBase + { + OperationEmitter (Context& c) + : EmitterBase (c) + {} + + virtual void + pre (Type&) + { + os << "virtual "; + } + + virtual void + name (Type& o) + { + os << endl << o.name (); + } + + virtual void + receives_pre (Type&) + { + os << " (" << endl; + } + + virtual void + receives_none (Type&) + { + os << " (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl; + } + + virtual void + receives_post (Type&) + { + os << endl << STRS[ENV_HDR] << ")" << endl; + } + + virtual void + raises_pre (Type&) + { + os << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl; + } + + virtual void + raises_none (Type&) + { + os << STRS[EXCP_SNGL]; + } + + virtual void + raises_post (Type&) + { + os << "))"; + } + + virtual void + post (Type&) + { + os << ";" << endl << endl; + } + + virtual void + comma (Type&) + { + os << "," << endl; + } + }; + + // For generating parameter names. + template <typename T> + struct ParameterEmitter : T + { + ParameterEmitter (std::ostream& os_) + : os (os_) + {} + + virtual void + name (typename T::Type& p) + { + os << " " << p.name (); + } + + private: + std::ostream& os; + }; + + // Generic scoped typename emitter used by various other emitters. + struct TypeNameEmitter : Traversal::Type + { + TypeNameEmitter (std::ostream& os_) + : os (os_) + {} + + virtual void + traverse (SemanticGraph::Type& t) + { + os << t.scoped_name (); + } + + private: + std::ostream& os; + }; + + // Generic local typename emitter used by various other emitters. + struct SimpleTypeNameEmitter : Traversal::Type + { + SimpleTypeNameEmitter (std::ostream& os_) + : os (os_) + {} + + virtual void + traverse (SemanticGraph::Type& t) + { + os << t.name (); + } + + private: + std::ostream& os; + }; + + // Generate name of type's enclosing scope. + struct EnclosingTypeNameEmitter : Traversal::Type + { + EnclosingTypeNameEmitter (std::ostream& os_) + : os (os_) + {} + + virtual void + traverse (SemanticGraph::Type& t) + { + os << t.scoped_name ().scope_name (); + } + + private: + std::ostream& os; + }; + + // Emits typename minus the leading double colon. + struct StrippedTypeNameEmitter : Traversal::Type + { + StrippedTypeNameEmitter (std::ostream& os_) + : os (os_) + {} + + virtual void + traverse (SemanticGraph::Type& t) + { + ScopedName scoped (t.scoped_name ()); + os << Name (scoped.begin () + 1, scoped.end ()); + } + + private: + std::ostream& os; + }; + + // Generates the set operation of a ReadWriteAttribute. + struct WriteAttributeEmitter : Traversal::ReadWriteAttribute, + EmitterBase + { + WriteAttributeEmitter (Context& c) + : EmitterBase (c), + write_type_name_emitter_ (c.os ()), + type_name_emitter_ (c.os ()) + { + write_belongs_.node_traverser (write_type_name_emitter_); + + edge_traverser (set_raises_); + set_raises_.node_traverser (type_name_emitter_); + } + + virtual void + pre (SemanticGraph::ReadWriteAttribute&) + { + os << "virtual void" << endl; + } + + virtual void + name (SemanticGraph::ReadWriteAttribute& a) + { + os << a.name () << " (" << endl; + + Traversal::ReadWriteAttribute::belongs (a, write_belongs_); + + 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&) + { + os << ";" << endl << endl; + } + + virtual void + comma (SemanticGraph::ReadWriteAttribute&) + { + os << "," << endl; + } + + private: + INArgTypeNameEmitter write_type_name_emitter_; + TypeNameEmitter type_name_emitter_; + Traversal::Belongs write_belongs_; + Traversal::SetRaises set_raises_; + }; + + // Generates operations associated with attributes. + struct AttributeEmitter : Traversal::ReadAttribute, + Traversal::ReadWriteAttribute, + EmitterBase + { + AttributeEmitter (Context& c) + : EmitterBase (c), + 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 "; + + 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&) + { + } + + virtual void + post (SemanticGraph::ReadAttribute&) + { + 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, + EmitterBase + { + InterfaceEmitter (Context& c) + : EmitterBase (c) + {} + + bool + add (Interface& i) + { + return interfaces_.insert (&i).second; + } + + virtual void + traverse (Interface& i) + { + if (add (i)) + { + Traversal::Interface::traverse (i); + } + } + + private: + std::set<Interface*> interfaces_; + }; + struct FacetEmitter : Traversal::UnconstrainedInterface, EmitterBase { @@ -63,7 +522,7 @@ namespace interface_emitter.edge_traverser (inherits_); // Works for both read/write and readonly attributes. - AttributeHeaderEmitter attribute_emitter (ctx); + AttributeEmitter attribute_emitter (ctx); defines_.node_traverser (attribute_emitter); OperationEmitter operation_emitter (ctx); @@ -77,15 +536,15 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (ctx); - ParameterEmitter<Traversal::InOutParameter> inout_param (ctx); - ParameterEmitter<Traversal::OutParameter> out_param (ctx); + ParameterEmitter<Traversal::InParameter> in_param (os); + ParameterEmitter<Traversal::InOutParameter> inout_param (os); + ParameterEmitter<Traversal::OutParameter> out_param (os); receives.node_traverser (in_param); receives.node_traverser (inout_param); receives.node_traverser (out_param); - ReturnTypeNameEmitter return_type_emitter (ctx); - FullTypeNameEmitter type_name_emitter (ctx); + ReturnTypeNameEmitter return_type_emitter (os); + TypeNameEmitter type_name_emitter (os); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -94,9 +553,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (ctx); - INOUTArgTypeNameEmitter inout_arg_emitter (ctx); - OUTArgTypeNameEmitter out_arg_emitter (ctx); + INArgTypeNameEmitter in_arg_emitter (os); + INOUTArgTypeNameEmitter inout_arg_emitter (os); + OUTArgTypeNameEmitter out_arg_emitter (os); in_belongs.node_traverser (in_arg_emitter); inout_belongs.node_traverser (inout_arg_emitter); out_belongs.node_traverser (out_arg_emitter); @@ -110,6 +569,7 @@ namespace << "_get_component (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl << STRS[EXCP_SNGL] << ";" << endl + << endl << "protected:" << endl << "// Facet executor." << endl << i.scoped_name ().scope_name ()<< "::CCM_" << i.name () @@ -142,7 +602,7 @@ namespace { PortsEmitterPublic (Context& c) : EmitterBase (c), - type_name_emitter_ (c) + type_name_emitter_ (c.os ()) { belongs_.node_traverser (type_name_emitter_); } @@ -212,7 +672,7 @@ namespace { PortsEmitterProtected (Context& c) : EmitterBase (c), - type_name_emitter_ (c) + type_name_emitter_ (c.os ()) { belongs_.node_traverser (type_name_emitter_); } @@ -227,9 +687,9 @@ namespace os << "Consumer_ptr c" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_AC] << "));" << endl; + << STRS[EXCP_AC] << "));" << endl << endl; os << "virtual "; @@ -238,9 +698,9 @@ namespace os << "Consumer_ptr" << endl << "disconnect_" << e.name () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_NC] << "));" << endl; + << STRS[EXCP_NC] << "));" << endl << endl; } virtual void @@ -253,10 +713,10 @@ namespace os << "_ptr" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_AC] << "," << endl - << STRS[EXCP_IC] << "));" << endl; + << STRS[EXCP_IC] << "));" << endl << endl; os << "virtual "; @@ -265,9 +725,9 @@ namespace os << "_ptr" << endl << "disconnect_" << u.name () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_NC] << "));" << endl; + << STRS[EXCP_NC] << "));" << endl << endl; } virtual void @@ -280,10 +740,10 @@ namespace os << "_ptr" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_ECL] << "," << endl - << STRS[EXCP_IC] << "));" << endl; + << STRS[EXCP_IC] << "));" << endl << endl; os << "virtual "; @@ -293,9 +753,9 @@ namespace << "disconnect_" << u.name () << " (" << endl << "::Components::Cookie * ck" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_IC] << "));" << endl; + << STRS[EXCP_IC] << "));" << endl << endl; } virtual void @@ -308,18 +768,18 @@ namespace os << "Consumer_ptr c" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_ECL] << "));" << endl; + << STRS[EXCP_ECL] << "));" << endl << endl; os << "// CIAO-specific." << endl << STRS[COMP_CK] << " *" << endl << "subscribe_" << p.name () << "_generic (" << endl << STRS[COMP_ECB] << "_ptr c" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_ECL] << "));" << endl; + << STRS[EXCP_ECL] << "));" << endl << endl; os << "virtual "; @@ -329,13 +789,13 @@ namespace << "unsubscribe_" << p.name () << " (" << endl << STRS[COMP_CK] << " *ck" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_IC] << "));" << endl; + << STRS[EXCP_IC] << "));" << endl << endl; } private: - FullTypeNameEmitter type_name_emitter_; + TypeNameEmitter type_name_emitter_; Traversal::Belongs belongs_; }; @@ -347,7 +807,7 @@ namespace { PortsEmitterMembers (Context& c) : EmitterBase (c), - type_name_emitter_ (c) + type_name_emitter_ (c.os ()) { belongs_.node_traverser (type_name_emitter_); } @@ -359,7 +819,7 @@ namespace os << "Consumer_var" << endl << "ciao_emits_" << e.name () << "_consumer_;" - << endl; + << endl << endl; } virtual void @@ -370,7 +830,7 @@ namespace Traversal::SingleUserData::belongs (u, belongs_); os << "_var" << endl - << "ciao_uses_" << u.name () << "_;" << endl; + << "ciao_uses_" << u.name () << "_;" << endl << endl; } virtual void @@ -382,7 +842,7 @@ namespace Traversal::MultiUserData::belongs (u, belongs_); os << "_var>" << endl - << "ciao_uses_" << u.name () << "_;" << endl; + << "ciao_uses_" << u.name () << "_;" << endl << endl; } virtual void @@ -394,16 +854,16 @@ namespace os << "Consumer_var>" << endl << "ciao_publishes_" << p.name () << "_map_;" - << endl; + << endl << endl; os << "ACE_Active_Map_Manager<" << endl << STRS[COMP_ECB] << "_var>" << endl << "ciao_publishes_" << p.name () << "_generic_map_;" - << endl; + << endl << endl; } private: - FullTypeNameEmitter type_name_emitter_; + TypeNameEmitter type_name_emitter_; Traversal::Belongs belongs_; }; @@ -603,9 +1063,9 @@ namespace { PortsEmitterPublic (Context& c) : EmitterBase (c), - type_name_emitter_ (c), - simple_type_name_emitter_ (c), - stripped_type_name_emitter_ (c) + type_name_emitter_ (c.os ()), + simple_type_name_emitter_ (c.os ()), + stripped_type_name_emitter_ (c.os ()) { belongs_.node_traverser (type_name_emitter_); simple_belongs_.node_traverser (simple_type_name_emitter_); @@ -622,7 +1082,7 @@ namespace os << "_ptr" << endl << "provide_" << p.name () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; + << STRS[EXCP_SNGL] << ";" << endl << endl; } virtual void @@ -635,10 +1095,10 @@ namespace os << "_ptr c" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_AC] << "," << endl - << STRS[EXCP_IC] << "));" << endl; + << STRS[EXCP_IC] << "));" << endl << endl; os << "virtual "; @@ -647,9 +1107,9 @@ namespace os << "_ptr" << endl << "disconnect_" << u.name () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_NC] << "));" << endl; + << STRS[EXCP_NC] << "));" << endl << endl; os << "virtual "; @@ -658,7 +1118,7 @@ namespace os << "_ptr" << endl << "get_connection_" << u.name () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; + << STRS[EXCP_SNGL] << ";" << endl << endl; } virtual void @@ -671,10 +1131,10 @@ namespace os << "_ptr c" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_ECL] << "," << endl - << STRS[EXCP_IC] << "));" << endl; + << STRS[EXCP_IC] << "));" << endl << endl; os << "virtual "; @@ -684,14 +1144,14 @@ namespace << "disconnect_" << u.name () << " (" << endl << "::Components::Cookie * ck" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_IC] << "));" << endl; + << STRS[EXCP_IC] << "));" << endl << endl; os << "virtual " << u.scoped_name () << "Connections *" << endl << "get_connections_" << u.name () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; + << STRS[EXCP_SNGL] << ";" << endl << endl; } virtual void @@ -721,15 +1181,18 @@ namespace << endl << c.scoped_name ().scope_name ().scope_name () << "::CCM_" << c.scoped_name ().scope_name ().simple_name () - << "_Context_ptr c);" << endl; + << "_Context_ptr c);" << endl << endl; os << "virtual ~"; Traversal::ConsumerData::belongs (c, simple_belongs_); os << "Consumer_" - << c.name () << "_Servant (void);" << endl; + << c.name () << "_Servant (void);" << endl << endl; + // @@@ (JP) May need to generate this for the eventtype's ancestors + // as well (the spec is vague on this point). If so, we need the + // CIDL compiler to support valuetype/eventtype inheritance. os << "virtual void" << endl << "push_"; @@ -741,39 +1204,39 @@ namespace os << " *evt" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; + << STRS[EXCP_SNGL] << ";" << endl << endl; os << "// Inherited from " << STRS[COMP_ECB] << "." << endl << "virtual void" << endl - << "push_event ( ::Components::EventBase *ev" << endl + << "push_event (::Components::EventBase *ev" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_BET] << "));" << endl; + << STRS[EXCP_BET] << "));" << endl << endl; os << "// CIAO-specific in " << STRS[COMP_ECB] << "." << endl << "virtual CORBA::Boolean" << endl << "ciao_is_substitutable (" << endl << "const char *event_repo_id" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; + << STRS[EXCP_SNGL] << ";" << endl << endl; os << "// Get component implementation." << endl << "virtual CORBA::Object_ptr" << endl << "_get_component (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; + << STRS[EXCP_SNGL] << ";" << endl << endl; os << "protected:" << endl << c.scoped_name ().scope_name ().scope_name () << "::CCM_" << c.scoped_name ().scope_name ().simple_name () << "_var" << endl - << "executor_;" << endl; + << "executor_;" << endl << endl; os << c.scoped_name ().scope_name ().scope_name () << "::CCM_" << c.scoped_name ().scope_name ().simple_name () << "_Context_var" << endl - << "ctx_;" << endl; + << "ctx_;" << endl << endl; os << "};"; @@ -784,7 +1247,7 @@ namespace os << "Consumer_ptr" << endl << "get_consumer_" << c.name () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; + << STRS[EXCP_SNGL] << ";" << endl << endl; } virtual void @@ -797,9 +1260,9 @@ namespace os << "Consumer_ptr c" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_AC] << "));" << endl; + << STRS[EXCP_AC] << "));" << endl << endl; os << "virtual "; @@ -808,9 +1271,9 @@ namespace os << "Consumer_ptr" << endl << "disconnect_" << e.name () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_NC] << "));" << endl; + << STRS[EXCP_NC] << "));" << endl << endl; } virtual void @@ -823,18 +1286,18 @@ namespace os << "Consumer_ptr c" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_ECL] << "));" << endl; + << STRS[EXCP_ECL] << "));" << endl << endl; os << "// CIAO-specific." << endl << STRS[COMP_CK] << " *" << endl << "subscribe_" << p.name () << "_generic (" << endl << STRS[COMP_ECB] << "_ptr c" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_ECL] << "));" << endl; + << STRS[EXCP_ECL] << "));" << endl << endl; os << "virtual "; @@ -844,13 +1307,13 @@ namespace << "unsubscribe_" << p.name () << " (" << endl << STRS[COMP_CK] << " *ck" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_IC] << "));" << endl; + << STRS[EXCP_IC] << "));" << endl << endl; } private: - FullTypeNameEmitter type_name_emitter_; + TypeNameEmitter type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; StrippedTypeNameEmitter stripped_type_name_emitter_; Traversal::Belongs belongs_; @@ -864,7 +1327,7 @@ namespace { PortsEmitterProtected (Context& c) : EmitterBase (c), - type_name_emitter_ (c) + type_name_emitter_ (c.os ()) { belongs_.node_traverser (type_name_emitter_); } @@ -875,7 +1338,7 @@ namespace Traversal::ProviderData::belongs (p, belongs_); os << "_var" << endl - << "provide_" << p.name () << "_;" << endl; + << "provide_" << p.name () << "_;" << endl << endl; } virtual void @@ -884,11 +1347,11 @@ namespace Traversal::ConsumerData::belongs (c, belongs_); os << "Consumer_var" << endl - << "consumes_" << c.name () << "_;" << endl; + << "consumes_" << c.name () << "_;" << endl << endl; } private: - FullTypeNameEmitter type_name_emitter_; + TypeNameEmitter type_name_emitter_; Traversal::Belongs belongs_; }; @@ -902,9 +1365,9 @@ namespace { PortsEmitterPrivate (Context& c) : EmitterBase (c), - type_name_emitter_ (c), - simple_type_name_emitter_ (c), - stripped_type_name_emitter_ (c) + type_name_emitter_ (c.os ()), + simple_type_name_emitter_ (c.os ()), + stripped_type_name_emitter_ (c.os ()) { belongs_.node_traverser (type_name_emitter_); simple_belongs_.node_traverser (simple_type_name_emitter_); @@ -917,7 +1380,7 @@ namespace os << "::CORBA::Object_ptr" << endl << "provide_" << p.name () << "_i (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; + << STRS[EXCP_SNGL] << ";" << endl << endl; } virtual void @@ -936,7 +1399,7 @@ namespace os << "::Components::EventConsumerBase_ptr" << endl << "get_consumer_" << c.name () << "_i (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; + << STRS[EXCP_SNGL] << ";" << endl << endl; } virtual void @@ -950,7 +1413,7 @@ namespace } private: - FullTypeNameEmitter type_name_emitter_; + TypeNameEmitter type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; StrippedTypeNameEmitter stripped_type_name_emitter_; Traversal::Belongs belongs_; @@ -986,7 +1449,7 @@ namespace << " " << t.scoped_name ().scope_name () << "::CCM_" << t.name () << "_var," << endl << " " << t.name () << "_Context" << endl - << " > comp_svnt_base;" << endl; + << " > comp_svnt_base;" << endl << endl; os << t.name () << "_Servant (" << endl << t.scoped_name ().scope_name () << "::CCM_" << t.name () @@ -994,14 +1457,15 @@ namespace << "::Components::CCMHome_ptr h," << endl << "const char *ins_name," << endl << "::CIAO::Home_Servant_Impl_Base *hs," << endl - << "::CIAO::Session_Container *c);" << endl; + << "::CIAO::Session_Container *c);" << endl << endl; - os << "virtual ~" << t.name () << "_Servant (void);" << endl; + os << "virtual ~" << t.name () << "_Servant (void);" + << endl << endl; os << "virtual void" << endl << "set_attributes (" << endl << "const ::Components::ConfigValues &descr" << endl - << STRS[ENV_SRC] << ");" << endl; + << STRS[ENV_SRC] << ");" << endl << endl; os << "// Supported operations." << endl << endl; @@ -1024,7 +1488,7 @@ namespace interface_emitter.edge_traverser (interface_inherits); // Works for both read/write and readonly attributes. - AttributeHeaderEmitter attribute_emitter (ctx); + AttributeEmitter attribute_emitter (ctx); defines.node_traverser (attribute_emitter); OperationEmitter operation_emitter (ctx); @@ -1038,15 +1502,15 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (ctx); - ParameterEmitter<Traversal::InOutParameter> inout_param (ctx); - ParameterEmitter<Traversal::OutParameter> out_param (ctx); + ParameterEmitter<Traversal::InParameter> in_param (os); + ParameterEmitter<Traversal::InOutParameter> inout_param (os); + ParameterEmitter<Traversal::OutParameter> out_param (os); receives.node_traverser (in_param); receives.node_traverser (inout_param); receives.node_traverser (out_param); - ReturnTypeNameEmitter return_type_emitter (ctx); - FullTypeNameEmitter type_name_emitter (ctx); + ReturnTypeNameEmitter return_type_emitter (os); + TypeNameEmitter type_name_emitter (os); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -1055,9 +1519,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (ctx); - INOUTArgTypeNameEmitter inout_arg_emitter (ctx); - OUTArgTypeNameEmitter out_arg_emitter (ctx); + INArgTypeNameEmitter in_arg_emitter (os); + INOUTArgTypeNameEmitter inout_arg_emitter (os); + OUTArgTypeNameEmitter out_arg_emitter (os); in_belongs.node_traverser (in_arg_emitter); inout_belongs.node_traverser (inout_arg_emitter); out_belongs.node_traverser (out_arg_emitter); @@ -1099,7 +1563,7 @@ namespace component_emitter.edge_traverser (component_inherits); // Works for both read/write and readonly attributes. - AttributeHeaderEmitter attribute_emitter (ctx); + AttributeEmitter attribute_emitter (ctx); defines.node_traverser (attribute_emitter); component_emitter.traverse (t); @@ -1112,29 +1576,24 @@ namespace << "const char *name," << endl << "CORBA::Object_ptr connection" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IN] << "," << endl << STRS[EXCP_IC] << "," << endl << STRS[EXCP_AC] << "," << endl - << STRS[EXCP_ECL] << "));" << endl; + << STRS[EXCP_ECL] << "));" << endl << endl; os << "virtual CORBA::Object_ptr" << endl << "disconnect (" << endl << "const char *name," << endl << STRS[COMP_CK] << " *ck" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IN] << "," << endl << STRS[EXCP_IC] << "," << endl << STRS[EXCP_CR] << "," << endl - << STRS[EXCP_NC] << "));" << endl; - - os << "virtual " << STRS[COMP_RD] << " *" << endl - << "get_all_receptacles (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; + << STRS[EXCP_NC] << "));" << endl << endl; os << "// Operations for Events interface." << endl << endl; @@ -1143,59 +1602,40 @@ namespace << "const char *publisher_name," << endl << STRS[COMP_ECB] << "_ptr subscriber" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IN] << "," << endl << STRS[EXCP_IC] << "," << endl - << STRS[EXCP_ECL] << "));" << endl; + << STRS[EXCP_ECL] << "));" << endl << endl; os << "virtual " << STRS[COMP_ECB] << "_ptr" << endl << "unsubscribe (" << endl << "const char *publisher_name," << endl << STRS[COMP_CK] << " *ck" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IN] << "," << endl - << STRS[EXCP_IC] << "));" << endl; + << STRS[EXCP_IC] << "));" << endl << endl; os << "virtual void" << endl << "connect_consumer (" << endl << "const char *emitter_name," << endl << STRS[COMP_ECB] << "_ptr consumer" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_IN] << "," << endl << STRS[EXCP_AC] << "," << endl - << STRS[EXCP_IC] << "));" << endl; + << STRS[EXCP_IC] << "));" << endl << endl; - os << "virtual " << STRS[COMP_ECB] << "_ptr" << endl - << "disconnect_consumer (" << endl - << "const char *source_name" << endl - << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " - << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_IN] << "," << endl - << STRS[EXCP_NC] << "));" << endl; - - os << "virtual " << STRS[COMP_PD] << " *" << endl - << "get_all_publishers (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; - - os << "virtual " << STRS[COMP_ED] << " *" << endl - << "get_all_emitters (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; - - os << "// CIAO specific operations on the servant. " << endl + os << "// CIAO specific operations on the servant " << endl << "CORBA::Object_ptr" << endl << "get_facet_executor (" << endl << "const char *name" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_START] << " " - << STRS[EXCP_SYS]<< "));" << endl; + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS]<< "));" << endl << endl; os << "private:" << endl << endl; @@ -1216,13 +1656,13 @@ namespace component_emitter.traverse (t); } - os << "const char *ins_name_;" << endl; + os << "const char *ins_name_;" << endl << endl; os << "private:" << endl << endl << "void" << endl << "populate_port_tables (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; + << STRS[EXCP_SNGL] << ";" << endl << endl; // Generate private operations for ports. { @@ -1255,15 +1695,211 @@ namespace HomeEmitter (Context& c, CommandLine const& cl) : EmitterBase (c), cl_ (cl), - type_name_emitter_ (c), - simple_type_name_emitter_ (c), - enclosing_type_name_emitter_ (c) + type_name_emitter_ (c.os ()), + simple_type_name_emitter_ (c.os ()), + enclosing_type_name_emitter_ (c.os ()) { manages_.node_traverser (type_name_emitter_); simple_manages_.node_traverser (simple_type_name_emitter_); enclosing_manages_.node_traverser (enclosing_type_name_emitter_); } + // Nested classes used by this emitter. + private: + // HomeFactory and HomeFinder are tied to Operation in + // the front end. Since we want to treat them differently + // than regular operations in a home (we want to generate + // base class factory operations returning the base component, + // for example), we use this class for regular home operations + // that overrides HomeFactory and HomeFinder traversals + // to do nothing. + struct HomeOperationEmitter : OperationEmitter, + Traversal::HomeFactory, + Traversal::HomeFinder + { + HomeOperationEmitter (Context& c) + : OperationEmitter (c) + {} + + virtual void + traverse (SemanticGraph::HomeFactory&) + { + } + + virtual void + traverse (SemanticGraph::HomeFinder&) + { + } + }; + + struct FactoryOperationEmitter : Traversal::HomeFactory, + EmitterBase + { + FactoryOperationEmitter (Context& c) + : EmitterBase (c) + {} + + virtual void + pre (SemanticGraph::HomeFactory&) + { + os << "virtual "; + } + + virtual void + returns (SemanticGraph::HomeFactory& t) + { + ReturnTypeNameEmitter returns_emitter (os); + Traversal::Returns returns_; + returns_.node_traverser (returns_emitter); + + Traversal::HomeFactory::returns (t, returns_); + + os << endl; + } + + virtual void + name (SemanticGraph::HomeFactory& t) + { + os << t.name (); + } + + virtual void + receives_none (SemanticGraph::HomeFactory&) + { + os << " (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl; + } + + virtual void + receives_pre (SemanticGraph::HomeFactory&) + { + os << " (" << endl; + } + + virtual void + receives_post (SemanticGraph::HomeFactory&) + { + os << endl << STRS[ENV_HDR] << ")" << endl; + } + + virtual void + raises_none (SemanticGraph::HomeFactory&) + { + os << STRS[EXCP_SNGL]; + } + + virtual void + raises_pre (SemanticGraph::HomeFactory&) + { + os << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl; + } + + virtual void + raises_post (SemanticGraph::HomeFactory&) + { + os << "))"; + } + + virtual void + post (SemanticGraph::HomeFactory&) + { + os << ";" << endl << endl; + } + + virtual void + comma (SemanticGraph::HomeFactory&) + { + os << "," << endl; + } + }; + + struct FinderOperationEmitter : Traversal::HomeFinder, + EmitterBase + { + FinderOperationEmitter (Context& c) + : EmitterBase (c), + returns_emitter_ (c.os ()) + { + returns_.node_traverser (returns_emitter_); + } + + virtual void + pre (SemanticGraph::HomeFinder&) + { + os << "virtual "; + } + + virtual void + returns (SemanticGraph::HomeFinder& t) + { + Traversal::HomeFinder::returns (t, returns_); + + os << endl; + } + + virtual void + name (SemanticGraph::HomeFinder& t) + { + os << t.name (); + } + + virtual void + receives_none (SemanticGraph::HomeFinder&) + { + os << " (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl; + } + + virtual void + receives_pre (SemanticGraph::HomeFinder&) + { + os << " (" << endl; + } + + virtual void + receives_post (SemanticGraph::HomeFinder&) + { + os << endl << STRS[ENV_HDR] << ")" << endl; + } + + virtual void + raises_none (SemanticGraph::HomeFinder&) + { + os << STRS[EXCP_SNGL]; + } + + virtual void + raises_pre (SemanticGraph::HomeFinder&) + { + os << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl; + } + + virtual void + raises_post (SemanticGraph::HomeFinder&) + { + os << "))"; + } + + virtual void + post (SemanticGraph::HomeFinder&) + { + os << ";" << endl << endl; + } + + virtual void + comma (SemanticGraph::HomeFinder&) + { + os << "," << endl; + } + + private: + ReturnTypeNameEmitter returns_emitter_; + Traversal::Returns returns_; + }; + + public: virtual void pre (Type& t) { os << "class " << ctx.export_macro () << " " << t.name () @@ -1359,18 +1995,19 @@ namespace Traversal::Home::manages (t, simple_manages_); os << "_Servant" << endl - << " > home_svnt_base;" << endl; + << " > home_svnt_base;" << endl << endl; os << t.name () << "_Servant (" << endl << t.scoped_name ().scope_name () << "::CCM_" << t.name () << "_ptr exe," << endl << "const char *ins_name," << endl - << "::CIAO::Session_Container *c);" << endl; + << "::CIAO::Session_Container *c);" << endl << endl; - os << "virtual ~" << t.name () << "_Servant (void);" << endl; + os << "virtual ~" << t.name () << "_Servant (void);" + << endl << endl; // Generate home operations. - os << "// Home operations." << endl; + os << "// Home operations." << endl << endl; { Traversal::Home home_emitter; @@ -1392,15 +2029,15 @@ namespace home_operation_emitter.edge_traverser (returns); home_operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (ctx); - ParameterEmitter<Traversal::InOutParameter> inout_param (ctx); - ParameterEmitter<Traversal::OutParameter> out_param (ctx); + ParameterEmitter<Traversal::InParameter> in_param (os); + ParameterEmitter<Traversal::InOutParameter> inout_param (os); + ParameterEmitter<Traversal::OutParameter> out_param (os); receives.node_traverser (in_param); receives.node_traverser (inout_param); receives.node_traverser (out_param); - ReturnTypeNameEmitter return_type_emitter (ctx); - FullTypeNameEmitter type_name_emitter (ctx); + ReturnTypeNameEmitter return_type_emitter (os); + TypeNameEmitter type_name_emitter (os); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -1409,9 +2046,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (ctx); - INOUTArgTypeNameEmitter inout_arg_emitter (ctx); - OUTArgTypeNameEmitter out_arg_emitter (ctx); + INArgTypeNameEmitter in_arg_emitter (os); + INOUTArgTypeNameEmitter inout_arg_emitter (os); + OUTArgTypeNameEmitter out_arg_emitter (os); in_belongs.node_traverser (in_arg_emitter); inout_belongs.node_traverser (inout_arg_emitter); out_belongs.node_traverser (out_arg_emitter); @@ -1449,15 +2086,15 @@ namespace finder_operation_emitter.edge_traverser (returns); finder_operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (ctx); - ParameterEmitter<Traversal::InOutParameter> inout_param (ctx); - ParameterEmitter<Traversal::OutParameter> out_param (ctx); + ParameterEmitter<Traversal::InParameter> in_param (os); + ParameterEmitter<Traversal::InOutParameter> inout_param (os); + ParameterEmitter<Traversal::OutParameter> out_param (os); receives.node_traverser (in_param); receives.node_traverser (inout_param); receives.node_traverser (out_param); - ReturnTypeNameEmitter return_type_emitter (ctx); - FullTypeNameEmitter type_name_emitter (ctx); + ReturnTypeNameEmitter return_type_emitter (os); + TypeNameEmitter type_name_emitter (os); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -1466,9 +2103,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (ctx); - INOUTArgTypeNameEmitter inout_arg_emitter (ctx); - OUTArgTypeNameEmitter out_arg_emitter (ctx); + INArgTypeNameEmitter in_arg_emitter (os); + INOUTArgTypeNameEmitter inout_arg_emitter (os); + OUTArgTypeNameEmitter out_arg_emitter (os); in_belongs.node_traverser (in_arg_emitter); inout_belongs.node_traverser (inout_arg_emitter); out_belongs.node_traverser (out_arg_emitter); @@ -1490,7 +2127,7 @@ namespace home_emitter.edge_traverser (home_inherits); // Works for both read/write and readonly attributes. - AttributeHeaderEmitter attribute_emitter (ctx); + AttributeEmitter attribute_emitter (ctx); defines.node_traverser (attribute_emitter); home_emitter.traverse (t); @@ -1516,7 +2153,7 @@ namespace interface_emitter.edge_traverser (inherits); // Works for both read/write and readonly attributes. - AttributeHeaderEmitter attribute_emitter (ctx); + AttributeEmitter attribute_emitter (ctx); defines.node_traverser (attribute_emitter); OperationEmitter operation_emitter (ctx); @@ -1530,15 +2167,15 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - ParameterEmitter<Traversal::InParameter> in_param (ctx); - ParameterEmitter<Traversal::InOutParameter> inout_param (ctx); - ParameterEmitter<Traversal::OutParameter> out_param (ctx); + ParameterEmitter<Traversal::InParameter> in_param (os); + ParameterEmitter<Traversal::InOutParameter> inout_param (os); + ParameterEmitter<Traversal::OutParameter> out_param (os); receives.node_traverser (in_param); receives.node_traverser (inout_param); receives.node_traverser (out_param); - ReturnTypeNameEmitter return_type_emitter (ctx); - FullTypeNameEmitter type_name_emitter (ctx); + ReturnTypeNameEmitter return_type_emitter (os); + TypeNameEmitter type_name_emitter (os); returns.node_traverser (return_type_emitter); raises.node_traverser (type_name_emitter); @@ -1547,9 +2184,9 @@ namespace inout_param.edge_traverser (inout_belongs); out_param.edge_traverser (out_belongs); - INArgTypeNameEmitter in_arg_emitter (ctx); - INOUTArgTypeNameEmitter inout_arg_emitter (ctx); - OUTArgTypeNameEmitter out_arg_emitter (ctx); + INArgTypeNameEmitter in_arg_emitter (os); + INOUTArgTypeNameEmitter inout_arg_emitter (os); + OUTArgTypeNameEmitter out_arg_emitter (os); in_belongs.node_traverser (in_arg_emitter); inout_belongs.node_traverser (inout_arg_emitter); out_belongs.node_traverser (out_arg_emitter); @@ -1562,9 +2199,7 @@ namespace os << "extern \"C\" " << ctx.export_macro () << " ::PortableServer::Servant" << endl - << "create" - << regex::perl_s (t.scoped_name ().str (), "/::/_/") - << "_Servant (" << endl + << "create" << t.name () << "_Servant (" << endl << "::Components::HomeExecutorBase_ptr p," << endl << "CIAO::Session_Container *c," << endl << "const char *ins_name" << endl @@ -1573,7 +2208,7 @@ namespace private: CommandLine const& cl_; - FullTypeNameEmitter type_name_emitter_; + TypeNameEmitter type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; EnclosingTypeNameEmitter enclosing_type_name_emitter_; Traversal::Manages manages_; @@ -1581,6 +2216,26 @@ namespace Traversal::Manages enclosing_manages_; }; + struct CompositionEmitter : Traversal::Composition, EmitterBase + { + CompositionEmitter (Context& c) + : EmitterBase (c) + { + } + + virtual void + pre (Type& t) + { + os << STRS[CIDL_NS] << t.name () << "{"; + } + + virtual void + post (Type&) + { + os << "}"; + } + }; + struct IncludesEmitter : Traversal::QuoteIncludes, Traversal::BracketIncludes, EmitterBase @@ -1595,7 +2250,7 @@ namespace { os << "#include \"" << regex::perl_s (qi.file ().string (), - "/^(.+?)(\\.(idl|cidl|cdl))?$/$1S.h/") + "/(\\.(idl|cidl|cdl))?$/S.h/") << "\"" << endl << endl; } @@ -1604,7 +2259,7 @@ namespace { os << "#include \"" << regex::perl_s (bi.file ().string (), - "/^(.+?)(\\.(idl|cidl|cdl))?$/$1S.h/") + "/(\\.(idl|cidl|cdl))?$/S.h/") << "\"" << endl; } @@ -1651,9 +2306,7 @@ ServantHeaderEmitter::pre (TranslationUnit&) string guard = "CIAO_GLUE_SESSION_" + regex::perl_s (uc_file_name, - "/^(.+?)(\\.(IDL|CIDL|CDL))?$/$1" - + uc_file_suffix - + "/"); + "/(\\.(IDL|CIDL|CDL))?$/" + uc_file_suffix + "/"); // Replace any remaining '.' with '_'. guard = regex::perl_s (guard, "/\\./_/"); @@ -1674,7 +2327,8 @@ ServantHeaderEmitter::pre (TranslationUnit&) // @@@ (JP) I guess it's a safe assumption that the tail of the // suffix will be .idl. string suffix = cl_.get_value ("lem-file-suffix", "E.idl"); - suffix = regex::perl_s (suffix, "/^(.+?)(\\.idl)?$/$1/"); + suffix = regex::perl_s (suffix, + "/(\\.idl)?$//"); // @@@ (JP) No way of knowing if the IDL compiler had command line // option(s) to change C.h and/or S.h. We could add command line options @@ -1682,7 +2336,7 @@ ServantHeaderEmitter::pre (TranslationUnit&) // they are in synch with the IDL compiler's options. os << "#include \"" << regex::perl_s (file_name, - "/^(.+?)(\\.(idl|cidl|cdl))?$/$1" + suffix + "C.h/") + "/(\\.(idl|cidl|cdl))?$/" + suffix + "C.h/") << "\"" << endl << endl; @@ -1704,7 +2358,8 @@ ServantHeaderEmitter::pre (TranslationUnit&) << "#include \"ciao/" << (swapping ? "Swapping_Servant_Home_Impl_T.h" : "Home_Servant_Impl_T.h") - << "\"" << endl << endl; + << "\"" << endl + << "#include \"ace/Active_Map_Manager_T.h\"" << endl << endl; } void @@ -1712,7 +2367,7 @@ ServantHeaderEmitter::generate (TranslationUnit& u) { pre (u); - Context c (os, export_macro_, cl_); + Context c (os, export_macro_); Traversal::TranslationUnit unit; @@ -1819,9 +2474,7 @@ ServantHeaderEmitter::post (TranslationUnit&) string guard = "CIAO_GLUE_SESSION_" + regex::perl_s (uc_file_name, - "/^(.+?)(\\.(IDL|CIDL|CDL))?$/$1" - + uc_file_suffix - + "/"); + "/(\\.(IDL|CIDL|CDL))?$/" + uc_file_suffix + "/"); guard = regex::perl_s (guard, "/\\./_/"); |