diff options
Diffstat (limited to 'TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp')
-rw-r--r-- | TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp | 726 |
1 files changed, 625 insertions, 101 deletions
diff --git a/TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp b/TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp index 30c6ae09566..6ab0814e449 100644 --- a/TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp +++ b/TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp @@ -3,16 +3,8 @@ // cvs-id : $Id$ #include "ExecImplHeaderGenerator.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> @@ -26,6 +18,351 @@ using namespace CCF::CIDL::SemanticGraph; 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 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 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; + } + + 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 operations associated with attributes. + // @@@ (JP) Need to support exceptions. + struct AttributeEmitter : Traversal::ReadWriteAttribute, + EmitterBase + { + AttributeEmitter (Context& c) + : EmitterBase (c), + write_type_name_emitter_ (c.os ()), + read_type_name_emitter_ (c.os ()) + { + write_belongs_.node_traverser (write_type_name_emitter_); + read_belongs_.node_traverser (read_type_name_emitter_); + } + + virtual void traverse (SemanticGraph::ReadWriteAttribute& a) + { + os << "virtual "; + + Traversal::ReadWriteAttribute::belongs (a, read_belongs_); + + os << endl + << a.name () << " (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl + << STRS[EXCP_SNGL] << ";" << endl; + + os << "virtual void" << endl + << a.name () << " (" << endl; + + Traversal::ReadWriteAttribute::belongs (a, write_belongs_); + + os << endl + << STRS[ENV_HDR] << ")" << endl + << STRS[EXCP_SNGL] << ";" << endl; + } + + private: + INArgTypeNameEmitter write_type_name_emitter_; + ReturnTypeNameEmitter read_type_name_emitter_; + Traversal::Belongs write_belongs_; + Traversal::Belongs read_belongs_; + }; + + // Generates operations associated with readonly attributes. + // @@@ (JP) Need to support exceptions. + struct ReadOnlyAttributeEmitter : Traversal::ReadAttribute, + EmitterBase + { + ReadOnlyAttributeEmitter (Context& c) + : EmitterBase (c), + read_type_name_emitter_ (c.os ()) + { + read_belongs_.node_traverser (read_type_name_emitter_); + } + + virtual void traverse (SemanticGraph::ReadAttribute& a) + { + os << "virtual "; + + Traversal::ReadAttribute::belongs (a, read_belongs_); + + os << endl + << a.name () << " (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl + << STRS[EXCP_SNGL] << ";" << endl; + } + + private: + ReturnTypeNameEmitter read_type_name_emitter_; + Traversal::Belongs read_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 { @@ -38,12 +375,12 @@ namespace traverse (UnconstrainedInterface& i) { if (i.context ().count ("facet_impl_hdr_gen")) return; - + os << "class " << ctx.export_macro () << " " << i.name () << "_exec_i" << endl - << " : public virtual " << i.scoped_name ().scope_name () + << ": public virtual " << i.scoped_name ().scope_name () << "::CCM_" << i.name () << "," << endl - << " public virtual TAO_Local_RefCounted_Object" << endl + << "public virtual TAO_Local_RefCounted_Object" << endl << "{" << "public:" << endl << i.name () << "_exec_i (void);" @@ -58,8 +395,10 @@ namespace interface_emitter.edge_traverser (defines_); interface_emitter.edge_traverser (inherits_); - AttributeHeaderEmitter attribute_emitter (ctx); + AttributeEmitter attribute_emitter (ctx); + ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx); defines_.node_traverser (attribute_emitter); + defines_.node_traverser (read_only_attribute_emitter); OperationEmitter operation_emitter (ctx); defines_.node_traverser (operation_emitter); @@ -72,15 +411,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); @@ -89,9 +428,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); @@ -99,9 +438,9 @@ namespace inherits (i, inherits_); names (i, defines_); } - + os << "};"; - + i.context ().set ("facet_impl_hdr_gen", true); } }; @@ -112,9 +451,9 @@ namespace { ExecPortsEmitter (Context& c) : 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 ()) { enclosing_belongs_.node_traverser (enclosing_type_name_emitter_); simple_belongs_.node_traverser (simple_type_name_emitter_); @@ -127,34 +466,37 @@ namespace os << "virtual "; Traversal::ProviderData::belongs (p, enclosing_belongs_); - + os << "::CCM_"; Traversal::ProviderData::belongs (p, simple_belongs_); - + os << "_ptr" << endl - << "get_" << p.name () << " (" << endl - << STRS[ENV_SNGL_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; + << "get_" << p.name () << " (" << endl + << STRS[ENV_SNGL_HDR] << ")" << endl + << STRS[EXCP_SNGL] << ";" << endl; } 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 << "virtual void" << endl - << "push_" << c.name () << " (" << endl; + << "push_" << c.name () << " (" << endl; Traversal::ConsumerData::belongs (c, belongs_); os << " *ev" << endl - << STRS[ENV_HDR] << ")" << endl - << STRS[EXCP_SNGL] << ";" << endl; + << STRS[ENV_HDR] << ")" << endl + << STRS[EXCP_SNGL] << ";" << endl; } 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_; @@ -196,8 +538,8 @@ namespace os << "class " << ctx.export_macro () << " " << t.name () << "_exec_i" << endl - << " : public virtual " << exec_.name () << "," << endl - << " public virtual TAO_Local_RefCounted_Object" << endl + << ": public virtual " << exec_.name () << "," << endl + << "public virtual TAO_Local_RefCounted_Object" << endl << "{" << "public:" << endl << t.name () << "_exec_i (void);" @@ -222,8 +564,10 @@ namespace interface_emitter.edge_traverser (defines); interface_emitter.edge_traverser (interface_inherits); - AttributeHeaderEmitter attribute_emitter (ctx); + AttributeEmitter attribute_emitter (ctx); + ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx); defines.node_traverser (attribute_emitter); + defines.node_traverser (read_only_attribute_emitter); OperationEmitter operation_emitter (ctx); defines.node_traverser (operation_emitter); @@ -236,15 +580,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); @@ -253,9 +597,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); @@ -276,14 +620,16 @@ namespace Traversal::Defines defines; component_emitter.edge_traverser (defines); - AttributeHeaderEmitter attribute_emitter (ctx); + AttributeEmitter attribute_emitter (ctx); + ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx); defines.node_traverser (attribute_emitter); + defines.node_traverser (read_only_attribute_emitter); component_emitter.traverse (t); } os << "// Port operations." << endl << endl; - + { Traversal::Component component_emitter; @@ -300,7 +646,7 @@ namespace component_emitter.traverse (t); } - + os << "// Operations from Components::SessionComponent" << endl << endl; os << "virtual void" << endl @@ -354,7 +700,7 @@ namespace << t.name () << "_Context *context_;" << endl << "};"; } - + private: ComponentExecutor& exec_; }; @@ -370,16 +716,195 @@ namespace implements (Type& i) { Traversal::ComponentExecutor component_executor; - + Traversal::Implements implements; component_executor.edge_traverser (implements); - + ComponentExecImplEmitter component_exec_impl_emitter (ctx, i); implements.node_traverser (component_exec_impl_emitter); - + component_executor.traverse (i); } }; + + // 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, + Traversal::Home, + EmitterBase + { + FactoryOperationEmitter (Context& c) + : EmitterBase (c) + {} + + virtual void + pre (SemanticGraph::HomeFactory&) + { + os << "virtual "; + } + + virtual void + returns (SemanticGraph::HomeFactory&) + { + os << STRS[COMP_EC] << "_ptr" << endl; + } + + virtual void + name (SemanticGraph::HomeFactory& hf) + { + os << hf.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; + } + + virtual void + comma (SemanticGraph::HomeFactory&) + { + os << "," << endl; + } + }; + + struct FinderOperationEmitter : Traversal::HomeFinder, + EmitterBase + { + FinderOperationEmitter (Context& c) + : EmitterBase (c) + {} + + virtual void + pre (SemanticGraph::HomeFinder&) + { + os << "virtual "; + } + + virtual void + returns (SemanticGraph::HomeFinder&) + { + os << STRS[COMP_EC] << "_ptr" << 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; + } + }; struct HomeExecImplEmitter : Traversal::Home, EmitterBase { @@ -394,8 +919,8 @@ namespace { os << "class " << ctx.export_macro () << " " << t.name () << "_exec_i" << endl - << " : public virtual " << exec_.name () << "," << endl - << " public virtual TAO_Local_RefCounted_Object" << endl + << ": public virtual " << exec_.name () << "," << endl + << "public virtual TAO_Local_RefCounted_Object" << endl << "{" << "public:" << endl << t.name () << "_exec_i (void);" @@ -420,8 +945,10 @@ namespace interface_emitter.edge_traverser (defines); interface_emitter.edge_traverser (interface_inherits); - AttributeHeaderEmitter attribute_emitter (ctx); + AttributeEmitter attribute_emitter (ctx); + ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx); defines.node_traverser (attribute_emitter); + defines.node_traverser (read_only_attribute_emitter); OperationEmitter operation_emitter (ctx); defines.node_traverser (operation_emitter); @@ -434,15 +961,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); @@ -451,9 +978,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); @@ -483,15 +1010,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); @@ -500,9 +1027,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); @@ -525,9 +1052,8 @@ namespace Traversal::Defines defines; home_emitter.edge_traverser (defines); - bool for_exec = true; - FactoryOperationEmitter factory_operation_emitter (ctx, for_exec); - FinderOperationEmitter finder_operation_emitter (ctx, for_exec); + FactoryOperationEmitter factory_operation_emitter (ctx); + FinderOperationEmitter finder_operation_emitter (ctx); defines.node_traverser (factory_operation_emitter); defines.node_traverser (finder_operation_emitter); @@ -541,15 +1067,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); @@ -558,9 +1084,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); @@ -581,8 +1107,10 @@ namespace Traversal::Defines defines; home_emitter.edge_traverser (defines); - AttributeHeaderEmitter attribute_emitter (ctx); + AttributeEmitter attribute_emitter (ctx); + ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx); defines.node_traverser (attribute_emitter); + defines.node_traverser (read_only_attribute_emitter); home_emitter.traverse (t); } @@ -603,15 +1131,13 @@ namespace 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; } - + private: HomeExecutor& exec_; }; - + struct HomeExecutorEmitter : Traversal::HomeExecutor, EmitterBase { HomeExecutorEmitter (Context& c) @@ -623,13 +1149,13 @@ namespace implements (Type& i) { Traversal::HomeExecutor home_executor; - + Traversal::Implements implements; home_executor.edge_traverser (implements); - + HomeExecImplEmitter home_exec_impl_emitter (ctx, i); implements.node_traverser (home_exec_impl_emitter); - + home_executor.traverse (i); } }; @@ -675,9 +1201,7 @@ ExecImplHeaderEmitter::pre (TranslationUnit&) string guard = "CIAO_" + 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, "/\\./_/"); @@ -690,7 +1214,7 @@ ExecImplHeaderEmitter::pre (TranslationUnit&) "_svnt.h"); string svnt_file_name = regex::perl_s (file_name, - "/^(.+?)(\\.(idl|cidl|cdl))?$/$1" + "/(\\.(idl|cidl|cdl))?$/" + file_suffix + "/"); @@ -699,10 +1223,10 @@ ExecImplHeaderEmitter::pre (TranslationUnit&) os << "#if !defined (ACE_LACKS_PRAGMA_ONCE)" << endl << "# pragma once" << endl << "#endif /* ACE_LACKS_PRAGMA_ONCE */" << endl << endl; - + string default_export_include = regex::perl_s (file_name, - "/^(.+?)(\\.(idl|cidl|cdl))?$/$1_exec_export.h/"); + "/(\\.(idl|cidl|cdl))?$/_exec_export.h/"); string export_include = cl_.get_value ("exec-export-include", default_export_include); @@ -720,7 +1244,7 @@ ExecImplHeaderEmitter::generate (TranslationUnit& u) { pre (u); - Context c (os, export_macro_, cl_); + Context c (os, export_macro_); Traversal::TranslationUnit unit; @@ -779,7 +1303,7 @@ void ExecImplHeaderEmitter::post (TranslationUnit&) { if (file_.empty ()) return; - + string uc_file_name = file_.leaf (); std::transform (uc_file_name.begin (), @@ -798,7 +1322,7 @@ ExecImplHeaderEmitter::post (TranslationUnit&) string guard = "CIAO_" + regex::perl_s (uc_file_name, - "/^(.+?)(\\.(IDL|CIDL))?$/$1" + uc_file_suffix + "/"); + "/(\\.(IDL|CIDL))?$/" + uc_file_suffix + "/"); guard = regex::perl_s (guard, "/\\./_/"); |