summaryrefslogtreecommitdiff
path: root/TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp')
-rw-r--r--TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp726
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, "/\\./_/");