diff options
Diffstat (limited to 'TAO/CIAO/CIDLC/ExecImplSourceGenerator.cpp')
-rw-r--r-- | TAO/CIAO/CIDLC/ExecImplSourceGenerator.cpp | 625 |
1 files changed, 426 insertions, 199 deletions
diff --git a/TAO/CIAO/CIDLC/ExecImplSourceGenerator.cpp b/TAO/CIAO/CIDLC/ExecImplSourceGenerator.cpp index 34bb6866061..f9975a08afb 100644 --- a/TAO/CIAO/CIDLC/ExecImplSourceGenerator.cpp +++ b/TAO/CIAO/CIDLC/ExecImplSourceGenerator.cpp @@ -3,25 +3,100 @@ // cvs-id : $Id$ #include "ExecImplSourceGenerator.hpp" -#include "CorbaTypeNameEmitters.hpp" -#include "UtilityTypeNameEmitters.hpp" -#include "ParameterEmitter_T.hpp" -#include "AttributeSourceEmitters_T.hpp" -#include "CompositionEmitter.hpp" -#include "ModuleEmitter.hpp" -#include "InterfaceEmitter.hpp" #include "Literals.hpp" - -#include <ostream> +#include "TypeNameEmitter.hpp" #include "CCF/CodeGenerationKit/Regex.hpp" +#include <ostream> + using namespace CCF::CIDL; using namespace CCF::CIDL::SemanticGraph; using namespace StringLiterals; 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 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 << "}"; + } + }; + template <typename T> struct OperationEmitter : Traversal::Operation, EmitterBase { @@ -59,7 +134,7 @@ namespace virtual void raises_pre (Type&) { - os << STRS[EXCP_START] << " " + os << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl; } @@ -86,7 +161,7 @@ namespace Traversal::Belongs returns; operation_emitter.edge_traverser (returns); - NullReturnEmitter return_emitter (ctx); + NullReturnEmitter return_emitter (os); returns.node_traverser (return_emitter); operation_emitter.traverse (o); @@ -104,6 +179,222 @@ namespace T& scope_; }; + // 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 operations associated with attributes. + // @@@ (JP) Need to support exceptions. + template <typename T> + struct AttributeEmitter : Traversal::ReadWriteAttribute, + EmitterBase + { + AttributeEmitter (Context& c, T& scope) + : EmitterBase (c), + scope_ (scope), + write_type_name_emitter_ (c.os ()), + read_type_name_emitter_ (c.os ()), + return_emitter_ (c.os ()) + { + write_belongs_.node_traverser (write_type_name_emitter_); + read_belongs_.node_traverser (read_type_name_emitter_); + return_belongs_.node_traverser (return_emitter_); + } + + virtual void traverse (SemanticGraph::ReadWriteAttribute& a) + { + Traversal::ReadWriteAttribute::belongs (a, read_belongs_); + + os << endl + << scope_.name () << "_exec_i::" << a.name () + << " (" << endl + << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << STRS[YCH] << endl; + + Traversal::ReadWriteAttribute::belongs (a, return_belongs_); + + os << "}"; + + os << "void" << endl + << scope_.name () << "_exec_i::" << a.name () + << " (" << endl; + + Traversal::ReadWriteAttribute::belongs (a, write_belongs_); + + os << " /* " << a.name () << " */" << endl + << STRS[ENV_SRC_NOTUSED] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << STRS[YCH] + << "}"; + } + + protected: + T& scope_; + + private: + INArgTypeNameEmitter write_type_name_emitter_; + ReturnTypeNameEmitter read_type_name_emitter_; + NullReturnEmitter return_emitter_; + Traversal::Belongs write_belongs_; + Traversal::Belongs read_belongs_; + Traversal::Belongs return_belongs_; + }; + + // Generates operations associated with readonly attributes. + // @@@ (JP) Need to support exceptions. + template <typename T> + struct ReadOnlyAttributeEmitter : Traversal::ReadAttribute, + EmitterBase + { + ReadOnlyAttributeEmitter (Context& c, T& scope) + : EmitterBase (c), + scope_ (scope), + read_type_name_emitter_ (c.os ()), + return_emitter_ (c.os ()) + { + read_belongs_.node_traverser (read_type_name_emitter_); + return_belongs_.node_traverser (return_emitter_); + } + + virtual void traverse (SemanticGraph::ReadAttribute& a) + { + Traversal::ReadAttribute::belongs (a, read_belongs_); + + os << endl + << scope_.name () << "_exec_i::" << a.name () + << " (" << endl + << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl + << STRS[EXCP_SNGL] << endl + << "{" + << STRS[YCH] << endl; + + Traversal::ReadAttribute::belongs (a, return_belongs_); + + os << "}"; + } + + protected: + T& scope_; + + private: + ReturnTypeNameEmitter read_type_name_emitter_; + NullReturnEmitter return_emitter_; + Traversal::Belongs read_belongs_; + Traversal::Belongs return_belongs_; + }; + + struct InterfaceEmitter : Traversal::UnconstrainedInterface, + EmitterBase + { + InterfaceEmitter (Context& c) + : EmitterBase (c) + {} + + bool + add (UnconstrainedInterface& i) + { + return interfaces_.insert (&i).second; + } + + virtual void + traverse (UnconstrainedInterface& i) + { + if (add (i)) + { + Traversal::UnconstrainedInterface::traverse (i); + } + } + + private: + std::set<UnconstrainedInterface*> interfaces_; + }; + struct FacetEmitter : Traversal::UnconstrainedInterface, EmitterBase { @@ -116,17 +407,17 @@ namespace traverse (UnconstrainedInterface& i) { if (i.context ().count ("facet_impl_src_gen")) return; - + os << STRS[SEP] << endl << "// Facet Executor Implementation Class: " << i.name () << "_exec_i" << endl << STRS[SEP] << endl << endl; - - os << i.name () << "_exec_i::" + + os << i.name () << "_exec_i::" << i.name () << "_exec_i (void)" << endl << "{" << "}" - << i.name () << "_exec_i::~" + << i.name () << "_exec_i::~" << i.name () << "_exec_i (void)" << endl << "{" << "}" @@ -140,13 +431,10 @@ namespace interface_emitter.edge_traverser (defines_); interface_emitter.edge_traverser (inherits_); - bool exec_src = true; - AttributeSourceEmitter<UnconstrainedInterface> attribute_emitter ( - ctx, - i, - exec_src - ); + AttributeEmitter<UnconstrainedInterface> attribute_emitter (ctx, i); + ReadOnlyAttributeEmitter<UnconstrainedInterface> read_only_attribute_emitter (ctx, i); defines_.node_traverser (attribute_emitter); + defines_.node_traverser (read_only_attribute_emitter); OperationEmitter<UnconstrainedInterface> operation_emitter (ctx, i); defines_.node_traverser (operation_emitter); @@ -159,25 +447,15 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - bool for_exec_src = true; - ParameterEmitter<Traversal::InParameter> in_param ( - ctx, - for_exec_src - ); - ParameterEmitter<Traversal::InOutParameter> inout_param ( - ctx, - for_exec_src - ); - ParameterEmitter<Traversal::OutParameter> out_param ( - ctx, - for_exec_src - ); + 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); @@ -186,9 +464,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); @@ -196,7 +474,7 @@ namespace inherits (i, inherits_); names (i, defines_); } - + i.context ().set ("facet_impl_src_gen", true); } }; @@ -207,9 +485,9 @@ namespace { ExecPortsEmitter (Context& c, SemanticGraph::Component& scope) : EmitterBase (c), - enclosing_type_name_emitter_ (c), - simple_type_name_emitter_ (c), - type_name_emitter_ (c), + enclosing_type_name_emitter_ (c.os ()), + simple_type_name_emitter_ (c.os ()), + type_name_emitter_ (c.os ()), scope_ (scope) { enclosing_belongs_.node_traverser (enclosing_type_name_emitter_); @@ -221,13 +499,13 @@ namespace traverse (SemanticGraph::Provider& p) { Traversal::ProviderData::belongs (p, enclosing_belongs_); - + os << "::CCM_"; Traversal::ProviderData::belongs (p, simple_belongs_); - + os << "_ptr" << endl - << scope_.name () << "_exec_i::get_" + << scope_.name () << "_exec_i::get_" << p.name () << " (" << endl << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl << STRS[EXCP_SNGL] << endl @@ -236,11 +514,11 @@ namespace << "return "; Traversal::ProviderData::belongs (p, enclosing_belongs_); - + os << "::CCM_"; Traversal::ProviderData::belongs (p, simple_belongs_); - + os << "::_nil ();" << endl << "}"; } @@ -248,8 +526,11 @@ namespace virtual void traverse (SemanticGraph::Consumer& c) { + // @@@ (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 << "void" << endl - << scope_.name () << "_exec_i::push_" + << scope_.name () << "_exec_i::push_" << c.name () << " (" << endl; Traversal::ConsumerData::belongs (c, belongs_); @@ -265,7 +546,7 @@ namespace private: EnclosingTypeNameEmitter enclosing_type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; - FullTypeNameEmitter type_name_emitter_; + TypeNameEmitter type_name_emitter_; Traversal::Belongs enclosing_belongs_; Traversal::Belongs simple_belongs_; Traversal::Belongs belongs_; @@ -309,12 +590,12 @@ namespace << "// Component Executor Implementation Class: " << t.name () << "_exec_i" << endl << STRS[SEP] << endl << endl; - - os << t.name () << "_exec_i::" + + os << t.name () << "_exec_i::" << t.name () << "_exec_i (void)" << endl << "{" << "}" - << t.name () << "_exec_i::~" + << t.name () << "_exec_i::~" << t.name () << "_exec_i (void)" << endl << "{" << "}"; @@ -338,13 +619,10 @@ namespace interface_emitter.edge_traverser (defines); interface_emitter.edge_traverser (interface_inherits); - bool exec_src = true; - AttributeSourceEmitter<SemanticGraph::Component> attribute_emitter ( - ctx, - t, - exec_src - ); + AttributeEmitter<SemanticGraph::Component> attribute_emitter (ctx, t); + ReadOnlyAttributeEmitter<SemanticGraph::Component> read_only_attribute_emitter (ctx, t); defines.node_traverser (attribute_emitter); + defines.node_traverser (read_only_attribute_emitter); OperationEmitter<SemanticGraph::Component> operation_emitter (ctx, t); defines.node_traverser (operation_emitter); @@ -357,25 +635,15 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - bool for_exec_src = true; - ParameterEmitter<Traversal::InParameter> in_param ( - ctx, - for_exec_src - ); - ParameterEmitter<Traversal::InOutParameter> inout_param ( - ctx, - for_exec_src - ); - ParameterEmitter<Traversal::OutParameter> out_param ( - ctx, - for_exec_src - ); + 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); @@ -384,9 +652,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); @@ -407,19 +675,16 @@ namespace Traversal::Defines defines; component_emitter.edge_traverser (defines); - bool exec_src = true; - AttributeSourceEmitter<SemanticGraph::Component> attribute_emitter ( - ctx, - t, - exec_src - ); + AttributeEmitter<SemanticGraph::Component> attribute_emitter (ctx, t); + ReadOnlyAttributeEmitter<SemanticGraph::Component> read_only_attribute_emitter (ctx, t); defines.node_traverser (attribute_emitter); + defines.node_traverser (read_only_attribute_emitter); component_emitter.traverse (t); } os << "// Port operations." << endl << endl; - + { Traversal::Component component_emitter; @@ -436,33 +701,33 @@ namespace component_emitter.traverse (t); } - + os << "// Operations from Components::SessionComponent" << endl << endl; os << "void" << endl << t.name () << "_exec_i::set_session_context (" << endl << STRS[COMP_SC] << "_ptr ctx" << endl << STRS[ENV_SRC] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_CE] << "))" << endl << "{" << "this->context_ =" << endl - << " " << t.name () << "_Context::_narrow (" << endl - << " ctx" << endl - << " " << STRS[ENV_ARG] <<");" + << t.name () << "_Context::_narrow (" << endl + << "ctx" << endl + << STRS[ENV_ARG] <<");" << "ACE_CHECK;" << endl; os << "if (this->context_ == 0)" << endl << "{" - << "ACE_THROW ( ::CORBA::INTERNAL ());" + << "ACE_THROW (CORBA::INTERNAL ());" << "}" << "}"; os << "void" << endl << t.name () << "_exec_i::ciao_preactivate (" << endl << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_CE] << "))" << endl << "{" @@ -472,7 +737,7 @@ namespace os << "void" << endl << t.name () << "_exec_i::ciao_postactivate (" << endl << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_CE] << "))" << endl << "{" @@ -482,7 +747,7 @@ namespace os << "void" << endl << t.name () << "_exec_i::ccm_activate (" << endl << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_CE] << "))" << endl << "{" @@ -492,7 +757,7 @@ namespace os << "void" << endl << t.name () << "_exec_i::ccm_passivate (" << endl << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_CE] << "))" << endl << "{" @@ -502,7 +767,7 @@ namespace os << "void" << endl << t.name () << "_exec_i::ccm_remove (" << endl << STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_CE] << "))" << endl << "{" @@ -547,8 +812,8 @@ namespace { FactoryOperationEmitter (Context& c, SemanticGraph::Home& scope) : EmitterBase (c), - enclosing_type_name_emitter_ (c), - simple_type_name_emitter_ (c), + enclosing_type_name_emitter_ (c.os ()), + simple_type_name_emitter_ (c.os ()), scope_ (scope) { enclosing_returns_.node_traverser (enclosing_type_name_emitter_); @@ -595,7 +860,7 @@ namespace virtual void raises_pre (SemanticGraph::HomeFactory&) { - os << STRS[EXCP_START] << " " + os << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl; } @@ -611,13 +876,13 @@ namespace os << "{" << STRS[YCH] << endl << "return "; - + Traversal::HomeFactory::returns (hf, enclosing_returns_); - + os << "::CCM_"; - + Traversal::HomeFactory::returns (hf, simple_returns_); - + os << "::_nil ();" << "}"; } @@ -627,7 +892,7 @@ namespace { os << "," << endl; } - + private: EnclosingTypeNameEmitter enclosing_type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; @@ -641,8 +906,8 @@ namespace { FinderOperationEmitter (Context& c, SemanticGraph::Home& scope) : EmitterBase (c), - enclosing_type_name_emitter_ (c), - simple_type_name_emitter_ (c), + enclosing_type_name_emitter_ (c.os ()), + simple_type_name_emitter_ (c.os ()), scope_ (scope) { enclosing_returns_.node_traverser (enclosing_type_name_emitter_); @@ -689,7 +954,7 @@ namespace virtual void raises_pre (SemanticGraph::HomeFinder&) { - os << STRS[EXCP_START] << " " + os << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl; } @@ -705,13 +970,13 @@ namespace os << "{" << STRS[YCH] << endl << "return "; - + Traversal::HomeFinder::returns (hf, enclosing_returns_); - + os << "::CCM_"; - + Traversal::HomeFinder::returns (hf, simple_returns_); - + os << "::_nil ();" << "}"; } @@ -721,7 +986,7 @@ namespace { os << "," << endl; } - + private: EnclosingTypeNameEmitter enclosing_type_name_emitter_; SimpleTypeNameEmitter simple_type_name_emitter_; @@ -744,12 +1009,12 @@ namespace << "// Home Executor Implementation Class: " << t.name () << "_exec_i" << endl << STRS[SEP] << endl << endl; - - os << t.name () << "_exec_i::" + + os << t.name () << "_exec_i::" << t.name () << "_exec_i (void)" << endl << "{" << "}" - << t.name () << "_exec_i::~" + << t.name () << "_exec_i::~" << t.name () << "_exec_i (void)" << endl << "{" << "}"; @@ -773,13 +1038,10 @@ namespace interface_emitter.edge_traverser (defines); interface_emitter.edge_traverser (interface_inherits); - bool exec_src = true; - AttributeSourceEmitter<SemanticGraph::Home> attribute_emitter ( - ctx, - t, - exec_src - ); + AttributeEmitter<SemanticGraph::Home> attribute_emitter (ctx, t); + ReadOnlyAttributeEmitter<SemanticGraph::Home> read_only_attribute_emitter (ctx, t); defines.node_traverser (attribute_emitter); + defines.node_traverser (read_only_attribute_emitter); OperationEmitter<SemanticGraph::Home> operation_emitter (ctx, t); defines.node_traverser (operation_emitter); @@ -792,25 +1054,15 @@ namespace operation_emitter.edge_traverser (returns); operation_emitter.edge_traverser (raises); - bool for_exec_src = true; - ParameterEmitter<Traversal::InParameter> in_param ( - ctx, - for_exec_src - ); - ParameterEmitter<Traversal::InOutParameter> inout_param ( - ctx, - for_exec_src - ); - ParameterEmitter<Traversal::OutParameter> out_param ( - ctx, - for_exec_src - ); + 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); @@ -819,9 +1071,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); @@ -851,25 +1103,15 @@ namespace home_operation_emitter.edge_traverser (returns); home_operation_emitter.edge_traverser (raises); - bool for_exec_src = true; - ParameterEmitter<Traversal::InParameter> in_param ( - ctx, - for_exec_src - ); - ParameterEmitter<Traversal::InOutParameter> inout_param ( - ctx, - for_exec_src - ); - ParameterEmitter<Traversal::OutParameter> out_param ( - ctx, - for_exec_src - ); + 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); @@ -878,9 +1120,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); @@ -918,25 +1160,15 @@ namespace finder_operation_emitter.edge_traverser (returns); finder_operation_emitter.edge_traverser (raises); - bool for_exec_src = true; - ParameterEmitter<Traversal::InParameter> in_param ( - ctx, - for_exec_src - ); - ParameterEmitter<Traversal::InOutParameter> inout_param ( - ctx, - for_exec_src - ); - ParameterEmitter<Traversal::OutParameter> out_param ( - ctx, - for_exec_src - ); + 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); @@ -945,9 +1177,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); @@ -968,13 +1200,10 @@ namespace Traversal::Defines defines; home_emitter.edge_traverser (defines); - bool exec_src = true; - AttributeSourceEmitter<SemanticGraph::Home> attribute_emitter ( - ctx, - t, - exec_src - ); + AttributeEmitter<SemanticGraph::Home> attribute_emitter (ctx, t); + ReadOnlyAttributeEmitter<SemanticGraph::Home> read_only_attribute_emitter (ctx, t); defines.node_traverser (attribute_emitter); + defines.node_traverser (read_only_attribute_emitter); home_emitter.traverse (t); } @@ -983,44 +1212,42 @@ namespace << STRS[COMP_EC] << "_ptr" << endl << t.name () << "_exec_i::create (" << endl << STRS[ENV_SNGL_SRC] << ")" << endl - << STRS[EXCP_START] << " " + << STRS[EXCP_START] << endl << STRS[EXCP_SYS] << "," << endl << STRS[EXCP_CE] << "))" << endl << "{" << STRS[COMP_EC] << "_ptr retval =" << endl - << " " << STRS[COMP_EC] << "::_nil ();" << endl + << STRS[COMP_EC] << "::_nil ();" << endl << "ACE_NEW_THROW_EX (" << endl << "retval," << endl; - + Traversal::Home home_emitter; - + Traversal::Manages manages_; home_emitter.edge_traverser (manages_); - - SimpleTypeNameEmitter manages_emitter (ctx); + + SimpleTypeNameEmitter manages_emitter (os); manages_.node_traverser (manages_emitter); - + home_emitter.traverse (t); - + os << "_exec_i," << endl - << "::CORBA::NO_MEMORY ());" + << "CORBA::NO_MEMORY ());" << STRS[ACE_CR] << " (" << STRS[COMP_EC] << "::_nil ());" << endl - << "return retval;" + << "return retval;" << "}"; } - + virtual void post (Type& t) { os << "extern \"C\" " << ctx.export_macro () << " ::Components::HomeExecutorBase_ptr" << endl - << "create" - << regex::perl_s (t.scoped_name ().str (), "/::/_/") - << "_Impl (void)" << endl + << "create" << t.name () << "_Impl (void)" << endl << "{" << "::Components::HomeExecutorBase_ptr retval =" << endl - << " ::Components::HomeExecutorBase::_nil ();" << endl + << "::Components::HomeExecutorBase::_nil ();" << endl << "ACE_NEW_RETURN (" << endl << "retval," << endl << t.name () << "_exec_i," << endl @@ -1057,7 +1284,7 @@ ExecImplSourceEmitter::pre (TranslationUnit&) "_exec.h"); file_name = regex::perl_s (file_name, - "/^(.+?)(\\.(idl|cidl|cdl))?$/$1" + "/(\\.(idl|cidl|cdl))?$/" + file_suffix + "/"); @@ -1070,7 +1297,7 @@ ExecImplSourceEmitter::generate (TranslationUnit& u) { pre (u); - Context c (os, export_macro_, cl_); + Context c (os, export_macro_); Traversal::TranslationUnit unit; @@ -1119,7 +1346,7 @@ ExecImplSourceEmitter::generate (TranslationUnit& u) Traversal::Implements implements; component_executor.edge_traverser (implements); home_executor.edge_traverser (implements); - + //-- ComponentExecImplEmitter component_exec_impl_emitter (c); HomeExecImplEmitter home_exec_impl_emitter (c); @@ -1127,7 +1354,7 @@ ExecImplSourceEmitter::generate (TranslationUnit& u) implements.node_traverser (home_exec_impl_emitter); unit.traverse (u); - + post (u); } |