diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-11-26 01:52:30 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-11-26 01:52:30 +0000 |
commit | 3a1493f24360dc1843435e65cab032300acf7611 (patch) | |
tree | 95d0207a11142e98041017b169c88549f5b0c7d4 | |
parent | 78ef3ab7ae59d142b46ca67e488deb1e98cf04dc (diff) | |
download | ATCD-3a1493f24360dc1843435e65cab032300acf7611.tar.gz |
ChangeLogTag: Tue Nov 25 19:46:07 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r-- | TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp | 187 | ||||
-rw-r--r-- | TAO/CIAO/CIDLC/ServantHeaderGenerator.hpp | 2 | ||||
-rw-r--r-- | TAO/CIAO/CIDLC/ServantSourceGenerator.cpp | 324 | ||||
-rw-r--r-- | TAO/CIAO/ChangeLog | 13 |
4 files changed, 390 insertions, 136 deletions
diff --git a/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp b/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp index ac185dc5362..3ba1711b2f8 100644 --- a/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp +++ b/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp @@ -276,7 +276,7 @@ namespace if (i->scope ()->dynamic_type<IDL2::SyntaxTree::FileScope> () != 0) { os << STRS[GLUE_NS] << endl - << "{" << endl; + << "{"; } // @@@ (JP) Need export macro and prefixable scoped name. @@ -286,7 +286,7 @@ namespace << "," << endl << STRS[INH_RCSB] << endl - << "{" << endl + << "{" << "public:" << endl; os << i->name ().simple () << "_Servant (" << endl @@ -311,17 +311,16 @@ namespace << "virtual CORBA::Object_ptr" << endl << "_get_component (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" - << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl; os << "protected:" << endl << "// Facet executor." << endl << i->name ().scope () << "::CCM_" << i->name ().simple () - << "_var executor_;" << endl << endl; + << "_var executor_;" << endl; os << "// Context object." << endl << "::Components::CCMContext_var ctx_;" << endl - << "};" << endl; + << "};" << endl << endl; // Close the CIAO_GLUE namespace, if we opened one. if (i->scope ()->dynamic_type<IDL2::SyntaxTree::FileScope> () != 0) @@ -344,13 +343,25 @@ namespace { private: string export_macro_; + Declarations const& declarations_; public: ContextPublicEmitter (ostream& os_, - string export_macro) + string export_macro, + Declarations const& declarations) : HeaderEmitterBase (os_), - export_macro_ (export_macro) + export_macro_ (export_macro), + declarations_ (declarations) + { + } + + virtual void + traverse (ComponentDefPtr const& c) { + if (declarations_.find (c)) + { + Traversal::ComponentDef::traverse (c); + } } virtual void @@ -360,7 +371,7 @@ namespace if (c->scope ()->dynamic_type<IDL2::SyntaxTree::FileScope> () != 0) { os << STRS[GLUE_NS] << endl - << "{" << endl; + << "{"; } os << "class " << export_macro_ << " " << c->name ().simple () @@ -370,60 +381,60 @@ namespace << endl << "public virtual TAO_Local_RefCounted_Object" << endl - << "{" << endl + << "{" << "public:" << endl; os << "// We will allow the servant glue code we generate to " << "access our state." << endl << "friend class " << c->name ().simple () << "_Servant;" - << endl << endl; + << endl; os << c->name ().simple () << "_Context (" << endl << "::Components::CCMHome_ptr home," << endl << "::CIAO::Session_Container *c," << endl - << c->name ().simple () << "_Servant *sv);" << endl << endl; + << c->name ().simple () << "_Servant *sv);" << endl; os << "virtual ~" << c->name ().simple () << "_Context (void);" - << endl << endl; + << endl; os << "// Operations from ::Components::CCMContext." << endl << endl; os << "virtual ::Components::Principal_ptr" << endl << "get_caller_principal (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl; os << "virtual ::Components::CCMHome_ptr" << endl << "get_CCM_home (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl ; os << "virtual CORBA::Boolean" << endl << "get_rollback_only (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_IS] << "));" << endl << endl; + << STRS[EXCP_IS] << "));" << endl; os << "virtual ::Components::Transaction::UserTransaction_ptr" << endl << "get_user_transaction (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_IS] << "));" << endl << endl; + << STRS[EXCP_IS] << "));" << endl; os << "virtual CORBA::Boolean" << endl << "is_caller_in_role (" << endl << "const char *role" << endl << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl; os << "virtual void" << endl << "set_rollback_only (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_IS] << "));" << endl << endl; + << STRS[EXCP_IS] << "));" << endl; os << "// Operations from ::Components::SessionContext interface." << endl << endl; @@ -433,7 +444,7 @@ namespace << STRS[ENV_SNGL_HDR] << ")" << endl << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_IS] << "));" << endl << endl; + << STRS[EXCP_IS] << "));" << endl; os << "// Operations for " << c->name ().simple () << " receptacles" << " and event sources," << endl @@ -450,7 +461,7 @@ namespace << "get_connection_" << d->name ().simple () << " (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl; } virtual void @@ -486,13 +497,27 @@ namespace public Traversal::PublishesDecl, public Traversal::EmitsDecl { + private: + Declarations const& declarations_; + public: - ContextProtectedMethodEmitter (ostream& os_) - : HeaderEmitterBase (os_) + ContextProtectedMethodEmitter (ostream& os_, + Declarations const& declarations) + : HeaderEmitterBase (os_), + declarations_ (declarations) { } virtual void + traverse (ComponentDefPtr const& c) + { + if (declarations_.find (c)) + { + Traversal::ComponentDef::traverse (c); + } + } + + virtual void pre (ComponentDefPtr const& c) { os << "protected:" << endl @@ -535,7 +560,7 @@ namespace << STRS[ENV_SNGL_HDR] << ")" << endl << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_NC] << "));" << endl << endl; + << STRS[EXCP_NC] << "));" << endl; } virtual void @@ -569,13 +594,26 @@ namespace public Traversal::PublishesDecl, public Traversal::EmitsDecl { + private: + Declarations const& declarations_; public: - ContextProtectedMemberEmitter (ostream& os_) - : HeaderEmitterBase (os_) + ContextProtectedMemberEmitter (ostream& os_, + Declarations const& declarations) + : HeaderEmitterBase (os_), + declarations_ (declarations) { } virtual void + traverse (ComponentDefPtr const& c) + { + if (declarations_.find (c)) + { + Traversal::ComponentDef::traverse (c); + } + } + + virtual void pre (ComponentDefPtr const& c) { os << "protected:" << endl; @@ -620,7 +658,7 @@ namespace << "servant_;" << endl << endl; os << c->name () << "_var" << endl - << "component_;" << endl; + << "component_;" << endl << endl; os << "};" << endl; @@ -649,27 +687,39 @@ namespace { private: string export_macro_; + Declarations const& declarations_; OperationEmitter& operation_emitter_; public: ServantPublicEmitter (ostream& os_, string export_macro, + Declarations const& declarations, OperationEmitter& operation_emitter) : HeaderEmitterBase (os_), export_macro_ (export_macro), + declarations_ (declarations), operation_emitter_ (operation_emitter) { } virtual void + traverse (ComponentDefPtr const& c) + { + if (declarations_.find (c)) + { + Traversal::ComponentDef::traverse (c); + } + } + + virtual void pre (ComponentDefPtr const& c) { // If we are at file scope, we create a namespace anyway. if (c->scope ()->dynamic_type<IDL2::SyntaxTree::FileScope> () != 0) { os << STRS[GLUE_NS] << endl - << "{" << endl; + << "{"; } // @@@ (JP) Need export macro and prefixable scoped name. @@ -678,7 +728,7 @@ namespace << ": public virtual POA_" << c->name ().in_file_scope () << "," << endl << STRS[INH_RCSB] << endl - << "{" << endl + << "{" << "public:" << endl; os << c->name ().simple () << "_Servant (" << endl @@ -747,7 +797,7 @@ namespace << "Consumer," << endl << STRS[INH_RCSB] << endl - << "{" << endl + << "{" << "public:" << endl; os << c->type ()->name ().simple () << "Consumer_" << c->name ().simple () @@ -1078,10 +1128,24 @@ namespace public Traversal::ProvidesDecl, public Traversal::ConsumesDecl { + private: + Declarations const& declarations_; + public: - ServantProtectedEmitter (ostream& os_) - : HeaderEmitterBase (os_) + ServantProtectedEmitter (ostream& os_, + Declarations const& declarations) + : HeaderEmitterBase (os_), + declarations_ (declarations) + { + } + + virtual void + traverse (ComponentDefPtr const& c) { + if (declarations_.find (c)) + { + Traversal::ComponentDef::traverse (c); + } } virtual void @@ -1096,21 +1160,21 @@ namespace << "context_;" << endl << endl; os << "::CIAO::Session_Container *" << endl - << "container_;" << endl << endl; + << "container_;" << endl; } virtual void traverse (ProvidesDeclPtr const& p) { os << p->type ()->name () << "_var" << endl - << "provide_" << p->name ().simple () << "_;" << endl << endl; + << "provide_" << p->name ().simple () << "_;" << endl; } virtual void traverse (ConsumesDeclPtr const& c) { os << c->type ()->name () << "Consumer_var" << endl - << "consumes_" << c->name ().simple () << "_;" << endl << endl; + << "consumes_" << c->name ().simple () << "_;" << endl; } virtual void @@ -1138,42 +1202,53 @@ namespace { private: string export_macro_; + Declarations const& declarations_; OperationEmitter& operation_emitter_; public: HomeEmitter (ostream& os_, string export_macro, + Declarations const& declarations, OperationEmitter& operation_emitter) : HeaderEmitterBase (os_), export_macro_ (export_macro), + declarations_ (declarations), operation_emitter_ (operation_emitter) { } virtual void + traverse (HomeDefPtr const& h) + { + if (declarations_.find (h)) + { + Traversal::HomeDef::traverse (h); + } + } + + virtual void pre (HomeDefPtr const& h) { // If we are at file scope, we create a namespace anyway. if (h->scope ()->dynamic_type<IDL2::SyntaxTree::FileScope> () != 0) { os << STRS[GLUE_NS] << endl - << "{" << endl; + << "{"; } - // @@@ (JP) Need export macro and prefixable scoped name. os << "class " << export_macro_ << " " << h->name ().simple () << "_Servant" << endl << ": public virtual POA_" << h->name ().in_file_scope () << "," << endl << STRS[INH_RCSB] << endl - << "{" << endl + << "{" << "public:" << endl; os << h->name ().simple () << "_Servant (" << endl << h->name ().scope () << "::CCM_" << h->name ().simple () << "_ptr exe," << endl - << "::CIAO::Session_Container *c);" << endl << endl; + << "::CIAO::Session_Container *c);" << endl; os << "virtual ~" << h->name ().simple () << "_Servant (void);" << endl << endl; @@ -1198,7 +1273,7 @@ namespace << STRS[ENV_SNGL_HDR] << ")" << endl << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << "::Components::CreateFailure));" << endl << endl; + << "::Components::CreateFailure));" << endl ; os << "// Operations for implicit home interface." << endl << endl; @@ -1207,19 +1282,19 @@ namespace << STRS[ENV_SNGL_HDR] << ")" << endl << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl - << "::Components::CreateFailure));" << endl << endl; + << "::Components::CreateFailure));" << endl; os << "// Operations for CCMHome interface." << endl << endl; os << "virtual ::CORBA::IRObject_ptr" << endl << "get_component_def (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl; os << "virtual ::CORBA::IRObject_ptr" << endl << "get_home_def (" << endl << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl << endl; + << STRS[EXCP_SNGL] << ";" << endl; os << "virtual void" << endl << "remove_component (" << endl @@ -1313,7 +1388,7 @@ namespace if (declarations_.contains_suborder (m->order ())) { os << STRS[GLUE_NS] << "_" << m->name ().simple () << endl - << "{" << endl; + << "{"; } } @@ -1326,8 +1401,6 @@ namespace } } }; - - } // =========================================================== @@ -1458,19 +1531,25 @@ ServantHeaderEmitter::generate (TranslationUnitPtr const& u) facet_selector.add_delegate (&facet_emitter); - ContextPublicEmitter context_public_emitter (os, export_macro_); + ContextPublicEmitter context_public_emitter (os, + export_macro_, + declarations_); - ContextProtectedMethodEmitter context_protected_method_emitter (os); + ContextProtectedMethodEmitter + context_protected_method_emitter (os, declarations_); - ContextProtectedMemberEmitter context_protected_member_emitter (os); + ContextProtectedMemberEmitter + context_protected_member_emitter (os, declarations_); ServantPublicEmitter servant_public_emitter (os, export_macro_, + declarations_, operation_emitter); + servant_public_emitter.add_scope_delegate (&get_attribute_emitter); servant_public_emitter.add_scope_delegate (&set_attribute_emitter); - ServantProtectedEmitter servant_protected_emitter (os); + ServantProtectedEmitter servant_protected_emitter (os, declarations_); // Discriminator for operation and factory // This is needed to select always the most-derived type of traversal @@ -1479,8 +1558,14 @@ ServantHeaderEmitter::generate (TranslationUnitPtr const& u) d.add (&operation_emitter); d.add (&factory_emitter); - HomeEmitter home_emitter (os, export_macro_, operation_emitter); + HomeEmitter home_emitter (os, + export_macro_, + declarations_, + operation_emitter); + home_emitter.add_scope_delegate (&d); + home_emitter.add_scope_delegate (&get_attribute_emitter); + home_emitter.add_scope_delegate (&set_attribute_emitter); Traversal::FileScope fs; NamespaceEmitter m (os, declarations_); diff --git a/TAO/CIAO/CIDLC/ServantHeaderGenerator.hpp b/TAO/CIAO/CIDLC/ServantHeaderGenerator.hpp index 31ae0e1ed0d..2d149e70787 100644 --- a/TAO/CIAO/CIDLC/ServantHeaderGenerator.hpp +++ b/TAO/CIAO/CIDLC/ServantHeaderGenerator.hpp @@ -23,7 +23,7 @@ protected: std::ostream& os; }; -// Emitter generates the servant source mapping for declarations collected +// Emitter generates the servant header mapping for declarations collected // by Collectors. Note that the original structure of modules is preserved. // diff --git a/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp b/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp index f8c029459ca..486cbb53aa3 100644 --- a/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp +++ b/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp @@ -406,8 +406,7 @@ namespace // FacetServantEmitter generates facet servant class definitions. // class FacetServantEmitter : public SourceEmitterBase, - public Traversal::UnconstrainedInterfaceDef, - public Traversal::AttributeDecl + public Traversal::UnconstrainedInterfaceDef { public: FacetServantEmitter (ostream& os_) @@ -443,12 +442,6 @@ namespace } virtual void - traverse (AttributeDeclPtr const& a) - { - // TODO - } - - virtual void post (UnconstrainedInterfaceDefPtr const& i) { os << "CORBA::Object_ptr" << endl @@ -498,13 +491,27 @@ namespace public Traversal::PublishesDecl, public Traversal::EmitsDecl { + private: + Declarations const& declarations_; + public: - ContextEmitter (ostream& os_) - : SourceEmitterBase (os_) + ContextEmitter (ostream& os_, + Declarations const& declarations) + : SourceEmitterBase (os_), + declarations_ (declarations) { } virtual void + traverse (ComponentDefPtr const& c) + { + if (declarations_.find (c)) + { + Traversal::ComponentDef::traverse (c); + } + } + + virtual void pre (ComponentDefPtr const& c) { // If we are at file scope, we create a namespace anyway. @@ -868,15 +875,22 @@ namespace class ServantFabricEmitter : public SourceEmitterBase, public Traversal::ComponentDef { + private: + Declarations const& declarations_; + public: - ServantFabricEmitter (ostream& os_) - : SourceEmitterBase (os_) + ServantFabricEmitter (ostream& os_, + Declarations const& declarations) + : SourceEmitterBase (os_), + declarations_ (declarations) { } virtual void traverse (ComponentDefPtr const& c) { + if (!declarations_.find (c)) return; + // If we are at file scope, we create a namespace anyway. if (c->scope ()->dynamic_type<IDL2::SyntaxTree::FileScope> () != 0) { @@ -952,10 +966,24 @@ namespace public Traversal::ComponentDef, public Traversal::ProvidesDecl { + private: + Declarations const& declarations_; + public: - NavigationEmitter (ostream& os_) - : SourceEmitterBase (os_) + NavigationEmitter (ostream& os_, + Declarations const& declarations) + : SourceEmitterBase (os_), + declarations_ (declarations) + { + } + + virtual void + traverse (ComponentDefPtr const& c) { + if (declarations_.find (c)) + { + Traversal::ComponentDef::traverse (c); + } } virtual void @@ -1037,9 +1065,55 @@ namespace << "the_other.in ()" << endl << STRS[ENV_ARG] << ");" << endl << "}" << endl << endl; + + os << "::Components::EmitterDescriptions *" << endl + << c->name ().simple () << "_Servant::get_all_emitters (" + << endl + << STRS[ENV_SNGL_SRC] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << "ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);" << endl + << "}" << endl << endl; + + os << "::Components::EmitterDescriptions *" << endl + << c->name ().simple () << "_Servant::get_named_emitters (" + << endl + << "const " << STRS[COMP_NAMES] << endl + << STRS[ENV_SRC] << ")" << endl + << STRS[EXCP_START] << endl + << STRS[EXCP_SYS] << "," << endl + << STRS[EXCP_IN] << "))" << endl + << "{" + << "ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);" << endl + << "}" << endl << endl; } }; - + + // + // Specialized from Traversal::ComponentDef so we can override + // traverse() and skip components not used in a composition. + // Individual port emitters can then be scope delegates of this. + // + class SelectedComponentEmitter : public Traversal::ComponentDef + { + private: + Declarations const& declarations_; + + public: + SelectedComponentEmitter (Declarations const& declarations) + : declarations_ (declarations) + { + } + + virtual void + traverse (ComponentDefPtr const& c) + { + if (declarations_.find (c)) + { + Traversal::ComponentDef::traverse (c); + } + } + }; // // Generates each of the provide_XXX operations. @@ -1116,10 +1190,24 @@ namespace public Traversal::ComponentDef, public Traversal::UsesDecl { + private: + Declarations const& declarations_; + public: - ReceptaclesGenericConnectionEmitter (ostream& os_) - : SourceEmitterBase (os_) + ReceptaclesGenericConnectionEmitter (ostream& os_, + Declarations const& declarations) + : SourceEmitterBase (os_), + declarations_ (declarations) + { + } + + virtual void + traverse (ComponentDefPtr const& c) { + if (declarations_.find (c)) + { + Traversal::ComponentDef::traverse (c); + } } virtual void @@ -1221,13 +1309,27 @@ namespace public Traversal::ComponentDef, public Traversal::UsesDecl { + private: + Declarations const& declarations_; + public: - ReceptaclesGenericDisconnectionEmitter (ostream& os_) - : SourceEmitterBase (os_) + ReceptaclesGenericDisconnectionEmitter (ostream& os_, + Declarations const& declarations) + : SourceEmitterBase (os_), + declarations_ (declarations) { } virtual void + traverse (ComponentDefPtr const& c) + { + if (declarations_.find (c)) + { + Traversal::ComponentDef::traverse (c); + } + } + + virtual void pre (ComponentDefPtr const& c) { os << "CORBA::Object_ptr" << endl @@ -1338,13 +1440,27 @@ namespace public Traversal::ComponentDef, public Traversal::ConsumesDecl { + private: + Declarations const& declarations_; + public: - ConsumerGenericEmitter (ostream& os_) - : SourceEmitterBase (os_) + ConsumerGenericEmitter (ostream& os_, + Declarations const& declarations) + : SourceEmitterBase (os_), + declarations_ (declarations) { } virtual void + traverse (ComponentDefPtr const& c) + { + if (declarations_.find (c)) + { + Traversal::ComponentDef::traverse (c); + } + } + + virtual void pre (ComponentDefPtr const& c) { os << "// Operations for Events interface." << endl << endl; @@ -1584,13 +1700,27 @@ namespace public Traversal::ComponentDef, public Traversal::PublishesDecl { + private: + Declarations const& declarations_; + public: - PublishesGenericSubscribeEmitter (ostream& os_) - : SourceEmitterBase (os_) + PublishesGenericSubscribeEmitter (ostream& os_, + Declarations const& declarations) + : SourceEmitterBase (os_), + declarations_ (declarations) { } virtual void + traverse (ComponentDefPtr const& c) + { + if (declarations_.find (c)) + { + Traversal::ComponentDef::traverse (c); + } + } + + virtual void pre (ComponentDefPtr const& c) { os << STRS[COMP_CK] << " *" << endl @@ -1650,13 +1780,27 @@ namespace public Traversal::ComponentDef, public Traversal::PublishesDecl { + private: + Declarations const& declarations_; + public: - PublishesGenericUnsubscribeEmitter (ostream& os_) - : SourceEmitterBase (os_) + PublishesGenericUnsubscribeEmitter (ostream& os_, + Declarations const& declarations) + : SourceEmitterBase (os_), + declarations_ (declarations) { } virtual void + traverse (ComponentDefPtr const& c) + { + if (declarations_.find (c)) + { + Traversal::ComponentDef::traverse (c); + } + } + + virtual void pre (ComponentDefPtr const& c) { os << STRS[COMP_ECB] << "_ptr" << endl @@ -1819,34 +1963,6 @@ namespace << STRS[ENV_SNGL_ARG] << ");" << endl << "}" << endl << endl; } - - virtual void - post (ComponentDefPtr const& c) - { - // @@ (diego) These are not implemented. Whenever they are, - // they'll require a treatment as all the other ports above. - - os << "::Components::EmitterDescriptions *" << endl - << c->name ().simple () << "_Servant::get_all_emitters (" - << endl - << STRS[ENV_SNGL_SRC] << ")" << endl - << STRS[EXCP_SNGL] << endl - << "{" - << "ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);" << endl - << "}" << endl << endl; - - os << "::Components::EmitterDescriptions *" << endl - << c->name ().simple () << "_Servant::get_named_emitters (" - << endl - << "const " << STRS[COMP_NAMES] << endl - << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << endl - << STRS[EXCP_SYS] << "," << endl - << STRS[EXCP_IN] << "))" << endl - << "{" - << "ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);" << endl - << "}" << endl << endl; - } }; // @@ -1857,19 +1973,24 @@ namespace public Traversal::ComponentDef { private: + Declarations const& declarations_; + ReturnTypeNameEmitter* return_type_name_emitter_; INArgTypeNameEmitter* inarg_type_name_emitter_; OUTArgTypeNameEmitter* outarg_type_name_emitter_; INOUTArgTypeNameEmitter* inoutarg_type_name_emitter_; public: - ServantCommonFinalizingEmitter - (ostream& os_, - ReturnTypeNameEmitter* return_type_name_emitter, - INArgTypeNameEmitter* inarg_type_name_emitter, - OUTArgTypeNameEmitter* outarg_type_name_emitter, - INOUTArgTypeNameEmitter* inoutarg_type_name_emitter) + ServantCommonFinalizingEmitter ( + ostream& os_, + Declarations const& declarations, + ReturnTypeNameEmitter* return_type_name_emitter, + INArgTypeNameEmitter* inarg_type_name_emitter, + OUTArgTypeNameEmitter* outarg_type_name_emitter, + INOUTArgTypeNameEmitter* inoutarg_type_name_emitter + ) : SourceEmitterBase (os_), + declarations_ (declarations), return_type_name_emitter_ (return_type_name_emitter), inarg_type_name_emitter_ (inarg_type_name_emitter), outarg_type_name_emitter_ (outarg_type_name_emitter), @@ -1878,6 +1999,15 @@ namespace } virtual void + traverse (ComponentDefPtr const& c) + { + if (declarations_.find (c)) + { + Traversal::ComponentDef::traverse (c); + } + } + + virtual void post (ComponentDefPtr const& c) { os << "// Operations for CCMObject interface." << endl << endl; @@ -2028,7 +2158,7 @@ namespace << "}" << endl << "}" << endl << endl; - os << "// Supported operations." << endl << endl; + os << "// Supported operations." << endl; SupportedOperationEmitter supported_operation_emitter ( os, @@ -2065,6 +2195,8 @@ namespace public Traversal::AttributeDecl //@@ will disappear { private: + Declarations const& declarations_; + ReturnTypeNameEmitter* return_type_name_emitter_; INArgTypeNameEmitter* inarg_type_name_emitter_; OUTArgTypeNameEmitter* outarg_type_name_emitter_; @@ -2072,11 +2204,13 @@ namespace public: HomeEmitter (ostream& os_, + Declarations const& declarations, ReturnTypeNameEmitter* return_type_name_emitter, INArgTypeNameEmitter* inarg_type_name_emitter, OUTArgTypeNameEmitter* outarg_type_name_emitter, INOUTArgTypeNameEmitter* inoutarg_type_name_emitter) : SourceEmitterBase (os_), + declarations_ (declarations), return_type_name_emitter_ (return_type_name_emitter), inarg_type_name_emitter_ (inarg_type_name_emitter), outarg_type_name_emitter_ (outarg_type_name_emitter), @@ -2085,6 +2219,15 @@ namespace } virtual void + traverse (HomeDefPtr const& h) + { + if (declarations_.find (h)) + { + Traversal::HomeDef::traverse (h); + } + } + + virtual void pre (HomeDefPtr const& h) { // If we are at file scope, we create a namespace anyway. @@ -2366,18 +2509,23 @@ namespace { private: string export_macro_; + Declarations const& declarations_; public: ServantSourceFinalizingEmitter (ostream& os_, - string export_macro) + string export_macro, + Declarations const& declarations) : SourceEmitterBase (os_), - export_macro_ (export_macro) + export_macro_ (export_macro), + declarations_ (declarations) { } virtual void traverse (HomeDefPtr const& h) { + if (!declarations_.find (h)) return; + os << "extern \"C\" " << export_macro_ << " ::PortableServer::Servant" << endl << "create" << h->name ().simple () << "_Servant (" << endl @@ -2418,10 +2566,11 @@ SourceEmitterBase::SourceEmitterBase (ostream& os_) } ServantSourceEmitter::ServantSourceEmitter ( - ostream& os_, - string export_macro, - CommandLine const& cl, - Declarations const& declarations) + ostream& os_, + string export_macro, + CommandLine const& cl, + Declarations const& declarations + ) : SourceEmitterBase (os_), export_macro_ (export_macro), cl_ (cl), @@ -2478,28 +2627,29 @@ ServantSourceEmitter::generate (TranslationUnitPtr const& u) FactoryEmitter factory_emitter (os, &inarg_type_name); - ServantFabricEmitter servant_fabric_emitter (os); + ServantFabricEmitter servant_fabric_emitter (os, declarations_); - NavigationEmitter navigation_emitter (os); + NavigationEmitter navigation_emitter (os, declarations_); FacetProvidesEmitter facet_provides_emitter (os); ReceptaclesGenericConnectionEmitter - receptacles_generic_connection_emitter (os); + receptacles_generic_connection_emitter (os, declarations_); ReceptaclesGenericDisconnectionEmitter - receptacles_generic_disconnection_emitter (os); + receptacles_generic_disconnection_emitter (os, declarations_); ReceptaclesEmitter receptacles_emitter (os); - ConsumerGenericEmitter consumer_generic_emitter (os); + ConsumerGenericEmitter consumer_generic_emitter (os, declarations_); ConsumerEmitter consumer_emitter (os); - PublishesGenericSubscribeEmitter publishes_generic_subscribe_emitter (os); + PublishesGenericSubscribeEmitter + publishes_generic_subscribe_emitter (os, declarations_); - PublishesGenericUnsubscribeEmitter - publishes_generic_unsubscribe_emitter (os); + PublishesGenericUnsubscribeEmitter + publishes_generic_unsubscribe_emitter (os, declarations_); PublishesEmitter publishes_emitter (os); @@ -2511,14 +2661,16 @@ ServantSourceEmitter::generate (TranslationUnitPtr const& u) FacetSelector facet_selector (os, declarations_); facet_selector.add_delegate (&facet_servant_emitter); - ContextEmitter context_emitter (os); + ContextEmitter context_emitter (os, declarations_); ServantCommonFinalizingEmitter - servant_common_finalizing_emitter (os, - &return_type_name, - &inarg_type_name, - &outarg_type_name, - &inoutarg_type_name); + servant_common_finalizing_emitter (os, + declarations_, + &return_type_name, + &inarg_type_name, + &outarg_type_name, + &inoutarg_type_name); + servant_common_finalizing_emitter.add_scope_delegate (&get_attribute_emitter); servant_common_finalizing_emitter.add_scope_delegate (&set_attribute_emitter); @@ -2530,17 +2682,21 @@ ServantSourceEmitter::generate (TranslationUnitPtr const& u) d.add (&factory_emitter); HomeEmitter home_emitter (os, + declarations_, &return_type_name, &inarg_type_name, &outarg_type_name, &inoutarg_type_name); home_emitter.add_scope_delegate (&d); + home_emitter.add_scope_delegate (&get_attribute_emitter); + home_emitter.add_scope_delegate (&set_attribute_emitter); - Traversal::ComponentDef component; + SelectedComponentEmitter component (declarations_); component.add_scope_delegate (&facet_provides_emitter); component.add_scope_delegate (&receptacles_emitter); component.add_scope_delegate (&consumer_emitter); component.add_scope_delegate (&publishes_emitter); + component.add_scope_delegate (&emits_emitter); Traversal::FileScope fs; NamespaceEmitter m (os, declarations_); @@ -2556,7 +2712,6 @@ ServantSourceEmitter::generate (TranslationUnitPtr const& u) fs.add_scope_delegate (&consumer_generic_emitter); fs.add_scope_delegate (&publishes_generic_subscribe_emitter); fs.add_scope_delegate (&publishes_generic_unsubscribe_emitter); - fs.add_scope_delegate (&emits_emitter); fs.add_scope_delegate (&home_emitter); fs.add_scope_delegate (&facet_selector); fs.add_scope_delegate (&servant_common_finalizing_emitter); @@ -2570,7 +2725,6 @@ ServantSourceEmitter::generate (TranslationUnitPtr const& u) m.add_scope_delegate (&consumer_generic_emitter); m.add_scope_delegate (&publishes_generic_subscribe_emitter); m.add_scope_delegate (&publishes_generic_unsubscribe_emitter); - m.add_scope_delegate (&emits_emitter); m.add_scope_delegate (&home_emitter); m.add_scope_delegate (&facet_selector); m.add_scope_delegate (&servant_common_finalizing_emitter); @@ -2582,7 +2736,9 @@ ServantSourceEmitter::generate (TranslationUnitPtr const& u) dispatch (u); // Start the finalizing phase - ServantSourceFinalizingEmitter finalizing_emitter (os, export_macro_); + ServantSourceFinalizingEmitter finalizing_emitter (os, + export_macro_, + declarations_); finalizing_emitter.dispatch (u); } diff --git a/TAO/CIAO/ChangeLog b/TAO/CIAO/ChangeLog index abe4d980279..14b9991d458 100644 --- a/TAO/CIAO/ChangeLog +++ b/TAO/CIAO/ChangeLog @@ -1,3 +1,16 @@ +Tue Nov 25 19:46:07 2003 Jeff Parsons <j.parsons@vanderbilt.edu> + + * CIDLC/ServantHeaderGenerator.hpp: + + Corrected a comment. + + * CIDLC/ServantHeaderGenerator.cpp: + * CIDLC/ServantSourceGenerator.cpp: + + Fixed servant code generation to output only for components + and homes that are used in a CIDL composition. Thanks to + Gary Duzan <gduzan@bbn.com> for reporting the problem. + Tue Nov 25 15:39:51 2003 Boris Kolpackov <boris@dre.vanderbilt.edu> * CCF/CCF/CompilerElements/FileSystem.hpp: |