summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-11-26 01:52:30 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-11-26 01:52:30 +0000
commit3a1493f24360dc1843435e65cab032300acf7611 (patch)
tree95d0207a11142e98041017b169c88549f5b0c7d4
parent78ef3ab7ae59d142b46ca67e488deb1e98cf04dc (diff)
downloadATCD-3a1493f24360dc1843435e65cab032300acf7611.tar.gz
ChangeLogTag: Tue Nov 25 19:46:07 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r--TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp187
-rw-r--r--TAO/CIAO/CIDLC/ServantHeaderGenerator.hpp2
-rw-r--r--TAO/CIAO/CIDLC/ServantSourceGenerator.cpp324
-rw-r--r--TAO/CIAO/ChangeLog13
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: