summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-03-17 14:44:19 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2006-03-17 14:44:19 +0000
commit72abb7a2d472ed5847e05fe9a47bc7d77ae44f20 (patch)
tree3a4285035b66dde76ae484455ccd8a07451471e6
parent87faef7a0d6b82edbbab2ec64af539c7607e8db6 (diff)
downloadATCD-72abb7a2d472ed5847e05fe9a47bc7d77ae44f20.tar.gz
ChangeLogTag: Fri Mar 17 14:23:53 UTC 2006 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r--TAO/CIAO/CIDLC/AttributeHeaderEmitters.cpp199
-rw-r--r--TAO/CIAO/CIDLC/AttributeHeaderEmitters.hpp119
-rw-r--r--TAO/CIAO/CIDLC/AttributeSourceEmitters_T.hpp366
-rw-r--r--TAO/CIAO/CIDLC/CIDLC.mpc18
-rw-r--r--TAO/CIAO/CIDLC/CompositionEmitter.cpp27
-rw-r--r--TAO/CIAO/CIDLC/CompositionEmitter.hpp26
-rw-r--r--TAO/CIAO/CIDLC/CorbaTypeNameEmitters.cpp2235
-rw-r--r--TAO/CIAO/CIDLC/CorbaTypeNameEmitters.hpp511
-rw-r--r--TAO/CIAO/CIDLC/DescriptorGenerator.cpp6
-rw-r--r--TAO/CIAO/CIDLC/EmitterBase.cpp11
-rw-r--r--TAO/CIAO/CIDLC/EmitterBase.hpp20
-rw-r--r--TAO/CIAO/CIDLC/EmitterContext.cpp45
-rw-r--r--TAO/CIAO/CIDLC/EmitterContext.hpp35
-rw-r--r--TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp676
-rw-r--r--TAO/CIAO/CIDLC/ExecImplSourceGenerator.cpp543
-rw-r--r--TAO/CIAO/CIDLC/ExecutorMappingGenerator.cpp10
-rw-r--r--TAO/CIAO/CIDLC/InterfaceEmitter.cpp26
-rw-r--r--TAO/CIAO/CIDLC/InterfaceEmitter.hpp30
-rw-r--r--TAO/CIAO/CIDLC/Literals.cpp14
-rw-r--r--TAO/CIAO/CIDLC/Literals.hpp12
-rw-r--r--TAO/CIAO/CIDLC/ModuleEmitter.cpp22
-rw-r--r--TAO/CIAO/CIDLC/ModuleEmitter.hpp24
-rw-r--r--TAO/CIAO/CIDLC/OperationHeaderEmitters.cpp267
-rw-r--r--TAO/CIAO/CIDLC/OperationHeaderEmitters.hpp151
-rw-r--r--TAO/CIAO/CIDLC/ParameterEmitter_T.hpp33
-rw-r--r--TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp1020
-rw-r--r--TAO/CIAO/CIDLC/ServantSourceGenerator.cpp1787
-rw-r--r--TAO/CIAO/CIDLC/Upcase.hpp21
-rw-r--r--TAO/CIAO/CIDLC/UtilityTypeNameEmitters.cpp57
-rw-r--r--TAO/CIAO/CIDLC/UtilityTypeNameEmitters.hpp56
-rw-r--r--TAO/CIAO/ChangeLog67
-rw-r--r--TAO/CIAO/ciao/CCM_Core.mpc1
-rw-r--r--TAO/CIAO/ciao/Servant_Impl_Base.cpp206
-rw-r--r--TAO/CIAO/ciao/Servant_Impl_Base.h101
-rw-r--r--TAO/CIAO/ciao/Servant_Impl_Utils_T.cpp138
35 files changed, 5957 insertions, 2923 deletions
diff --git a/TAO/CIAO/CIDLC/AttributeHeaderEmitters.cpp b/TAO/CIAO/CIDLC/AttributeHeaderEmitters.cpp
new file mode 100644
index 00000000000..2442ef3f958
--- /dev/null
+++ b/TAO/CIAO/CIDLC/AttributeHeaderEmitters.cpp
@@ -0,0 +1,199 @@
+// file : CIDLC/AttributeHeaderEmitters.cpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "AttributeHeaderEmitters.hpp"
+#include "Literals.hpp"
+
+using namespace StringLiterals;
+
+WriteAttributeHeaderEmitter::WriteAttributeHeaderEmitter (Context& c)
+ : EmitterBase (c),
+ write_type_name_emitter_ (c),
+ type_name_emitter_ (c)
+{
+ write_belongs_.node_traverser (write_type_name_emitter_);
+
+ edge_traverser (set_raises_);
+ set_raises_.node_traverser (type_name_emitter_);
+}
+
+void
+WriteAttributeHeaderEmitter::pre (SemanticGraph::ReadWriteAttribute&)
+{
+ os << "void" << endl;
+}
+
+void
+WriteAttributeHeaderEmitter::name (SemanticGraph::ReadWriteAttribute& a)
+{
+ os << a.name () << " (" << endl;
+
+ Traversal::ReadWriteAttribute::belongs (a, write_belongs_);
+
+ os << " " << a.name () << endl
+ << STRS[ENV_HDR] << ")" << endl;
+}
+
+void
+WriteAttributeHeaderEmitter::get_raises (SemanticGraph::ReadWriteAttribute&)
+{
+}
+
+void
+WriteAttributeHeaderEmitter::set_raises_none (SemanticGraph::ReadWriteAttribute&)
+{
+ os << STRS[EXCP_SNGL];
+}
+
+void
+WriteAttributeHeaderEmitter::set_raises_pre (SemanticGraph::ReadWriteAttribute&)
+{
+ os << STRS[EXCP_START] << " "
+ << STRS[EXCP_SYS] << "," << endl;
+}
+
+void
+WriteAttributeHeaderEmitter::set_raises_post (SemanticGraph::ReadWriteAttribute&)
+{
+ os << "))";
+}
+
+void
+WriteAttributeHeaderEmitter::post (SemanticGraph::ReadWriteAttribute&)
+{
+ os << ";" << endl;
+}
+
+void
+WriteAttributeHeaderEmitter::comma (SemanticGraph::ReadWriteAttribute&)
+{
+ os << "," << endl;
+}
+
+// ============================================================
+
+AttributeHeaderEmitter::AttributeHeaderEmitter (Context& c)
+ : EmitterBase (c),
+ read_type_name_emitter_ (c),
+ type_name_emitter_ (c)
+{
+ read_belongs_.node_traverser (read_type_name_emitter_);
+
+ edge_traverser (get_raises_);
+ get_raises_.node_traverser (type_name_emitter_);
+}
+
+// ReadWriteAttribute
+//
+void
+AttributeHeaderEmitter::pre (SemanticGraph::ReadWriteAttribute& a)
+{
+ os << "virtual ";
+
+ Traversal::ReadWriteAttribute::belongs (a, read_belongs_);
+
+ os << endl;
+}
+
+void
+AttributeHeaderEmitter::name (SemanticGraph::ReadWriteAttribute& a)
+{
+ os << a.name () << " (" << endl
+ << STRS[ENV_SNGL_HDR] << ")" << endl;
+}
+
+void
+AttributeHeaderEmitter::get_raises_none (SemanticGraph::ReadWriteAttribute&)
+{
+ os << STRS[EXCP_SNGL];
+}
+
+void
+AttributeHeaderEmitter::get_raises_pre (SemanticGraph::ReadWriteAttribute&)
+{
+ os << STRS[EXCP_START] << " "
+ << STRS[EXCP_SYS] << "," << endl;
+}
+
+void
+AttributeHeaderEmitter::get_raises_post (SemanticGraph::ReadWriteAttribute&)
+{
+ os << "))";
+}
+
+void
+AttributeHeaderEmitter::set_raises (SemanticGraph::ReadWriteAttribute&)
+{
+}
+
+void
+AttributeHeaderEmitter::post (SemanticGraph::ReadWriteAttribute& a)
+{
+ os << ";" << endl;
+
+ WriteAttributeHeaderEmitter write_attribute_emitter (ctx);
+ write_attribute_emitter.traverse (a);
+}
+
+void
+AttributeHeaderEmitter::comma (SemanticGraph::ReadWriteAttribute&)
+{
+ os << "," << endl;
+}
+
+// ReadAttribute
+//
+void
+AttributeHeaderEmitter::pre (SemanticGraph::ReadAttribute& a)
+{
+ os << "virtual ";
+
+ Traversal::ReadAttribute::belongs (a, read_belongs_);
+
+ os << endl;
+}
+
+void
+AttributeHeaderEmitter::name (SemanticGraph::ReadAttribute& a)
+{
+ os << a.name () << " (" << endl
+ << STRS[ENV_SNGL_HDR] << ")" << endl;
+}
+
+void
+AttributeHeaderEmitter::get_raises_none (SemanticGraph::ReadAttribute&)
+{
+ os << STRS[EXCP_SNGL];
+}
+
+void
+AttributeHeaderEmitter::get_raises_pre (SemanticGraph::ReadAttribute&)
+{
+ os << STRS[EXCP_START] << " "
+ << STRS[EXCP_SYS] << "," << endl;
+}
+
+void
+AttributeHeaderEmitter::get_raises_post (SemanticGraph::ReadAttribute&)
+{
+ os << "))";
+}
+
+void
+AttributeHeaderEmitter::set_raises (SemanticGraph::ReadAttribute&)
+{
+}
+
+void
+AttributeHeaderEmitter::post (SemanticGraph::ReadAttribute&)
+{
+ os << ";" << endl;
+}
+
+void
+AttributeHeaderEmitter::comma (SemanticGraph::ReadAttribute&)
+{
+ os << "," << endl;
+}
+
diff --git a/TAO/CIAO/CIDLC/AttributeHeaderEmitters.hpp b/TAO/CIAO/CIDLC/AttributeHeaderEmitters.hpp
new file mode 100644
index 00000000000..f4318ad0073
--- /dev/null
+++ b/TAO/CIAO/CIDLC/AttributeHeaderEmitters.hpp
@@ -0,0 +1,119 @@
+// file : CIDLC/AttributeHeaderEmitters.hpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef ATTRIBUTEHEADEREMITTERS_HPP
+#define ATTRIBUTEHEADEREMITTERS_HPP
+
+#include "CCF/CIDL/SemanticGraph.hpp"
+#include "CCF/CIDL/Traversal.hpp"
+
+#include "CorbaTypeNameEmitters.hpp"
+#include "UtilityTypeNameEmitters.hpp"
+#include "EmitterBase.hpp"
+
+using namespace CCF::CIDL;
+using namespace CCF::CIDL::SemanticGraph;
+
+struct WriteAttributeHeaderEmitter : Traversal::ReadWriteAttribute,
+ EmitterBase
+{
+ WriteAttributeHeaderEmitter (Context& c);
+
+ virtual void
+ pre (SemanticGraph::ReadWriteAttribute&);
+
+ virtual void
+ name (SemanticGraph::ReadWriteAttribute&);
+
+ virtual void
+ get_raises (SemanticGraph::ReadWriteAttribute&);
+
+ virtual void
+ set_raises_none (SemanticGraph::ReadWriteAttribute&);
+
+ virtual void
+ set_raises_pre (SemanticGraph::ReadWriteAttribute&);
+
+ virtual void
+ set_raises_post (SemanticGraph::ReadWriteAttribute&);
+
+ virtual void
+ post (SemanticGraph::ReadWriteAttribute&);
+
+ virtual void
+ comma (SemanticGraph::ReadWriteAttribute&);
+
+ private:
+ INArgTypeNameEmitter write_type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
+ Traversal::Belongs write_belongs_;
+ Traversal::SetRaises set_raises_;
+};
+
+struct AttributeHeaderEmitter : Traversal::ReadAttribute,
+ Traversal::ReadWriteAttribute,
+ EmitterBase
+{
+ AttributeHeaderEmitter (Context&);
+
+ // ReadWriteAttribute
+ //
+ virtual void
+ pre (SemanticGraph::ReadWriteAttribute&);
+
+ virtual void
+ name (SemanticGraph::ReadWriteAttribute&);
+
+ virtual void
+ get_raises_none (SemanticGraph::ReadWriteAttribute&);
+
+ virtual void
+ get_raises_pre (SemanticGraph::ReadWriteAttribute&);
+
+ virtual void
+ get_raises_post (SemanticGraph::ReadWriteAttribute&);
+
+ virtual void
+ set_raises (SemanticGraph::ReadWriteAttribute&);
+
+ virtual void
+ post (SemanticGraph::ReadWriteAttribute&);
+
+ virtual void
+ comma (SemanticGraph::ReadWriteAttribute&);
+
+ // ReadAttribute
+ //
+ virtual void
+ pre (SemanticGraph::ReadAttribute&);
+
+ virtual void
+ name (SemanticGraph::ReadAttribute&);
+
+ virtual void
+ get_raises_none (SemanticGraph::ReadAttribute&);
+
+ virtual void
+ get_raises_pre (SemanticGraph::ReadAttribute&);
+
+ virtual void
+ get_raises_post (SemanticGraph::ReadAttribute&);
+
+ virtual void
+ set_raises (SemanticGraph::ReadAttribute&);
+
+ virtual void
+ post (SemanticGraph::ReadAttribute&);
+
+ virtual void
+ comma (SemanticGraph::ReadAttribute&);
+
+private:
+ ReturnTypeNameEmitter read_type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
+ Traversal::Belongs read_belongs_;
+ Traversal::GetRaises get_raises_;
+};
+
+#endif // ATTRIBUTEHEADEREMITTERS_HPP
diff --git a/TAO/CIAO/CIDLC/AttributeSourceEmitters_T.hpp b/TAO/CIAO/CIDLC/AttributeSourceEmitters_T.hpp
new file mode 100644
index 00000000000..d7079b3908b
--- /dev/null
+++ b/TAO/CIAO/CIDLC/AttributeSourceEmitters_T.hpp
@@ -0,0 +1,366 @@
+// file : CIDLC/AttributeSourceEmitters_T.hpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef ATTRIBUTESOURCEEMITTERS_T_HPP
+#define ATTRIBUTESOURCEEMITTERS_T_HPP
+
+#include "CCF/CIDL/SemanticGraph.hpp"
+#include "CCF/CIDL/Traversal.hpp"
+
+#include "CorbaTypeNameEmitters.hpp"
+#include "UtilityTypeNameEmitters.hpp"
+
+using namespace CCF::CIDL;
+using namespace CCF::CIDL::SemanticGraph;
+
+template <typename T>
+struct WriteAttributeSourceEmitter : Traversal::ReadWriteAttribute,
+ EmitterBase
+{
+ WriteAttributeSourceEmitter (Context& c,
+ T& scope,
+ bool swapping,
+ bool exec_src)
+ : EmitterBase (c),
+ scope_ (scope),
+ write_type_name_emitter_ (c),
+ type_name_emitter_ (c),
+ swapping_ (swapping),
+ exec_src_ (exec_src)
+ {
+ write_belongs_.node_traverser (write_type_name_emitter_);
+ edge_traverser (set_raises_);
+ set_raises_.node_traverser (type_name_emitter_);
+ }
+
+ virtual void
+ gen_swapping_set ()
+ {
+ os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
+ << "ACE_CHECK;" << endl;
+ }
+
+ virtual void
+ pre (SemanticGraph::ReadWriteAttribute&)
+ {
+ os << "void" << endl;
+ }
+
+ virtual void
+ name (SemanticGraph::ReadWriteAttribute& a)
+ {
+ os << scope_.name ()
+ << (exec_src_ ? "_exec_i::" : "_Servant::")
+ << a.name () << " (" << endl;
+
+ Traversal::ReadWriteAttribute::belongs (a, write_belongs_);
+
+ os << (exec_src_ ? " /* " : " ")
+ << a.name ()
+ << (exec_src_ ? " */" : "") << endl
+ << (exec_src_ ? STRS[ENV_SRC_NOTUSED] : STRS[ENV_SRC])
+ << ")" << endl;
+ }
+
+ virtual void
+ get_raises (SemanticGraph::ReadWriteAttribute&)
+ {
+ }
+
+ virtual void
+ set_raises_none (SemanticGraph::ReadWriteAttribute&)
+ {
+ os << STRS[EXCP_SNGL];
+ }
+
+ virtual void
+ set_raises_pre (SemanticGraph::ReadWriteAttribute&)
+ {
+ os << STRS[EXCP_START] << " "
+ << STRS[EXCP_SYS] << "," << endl;
+ }
+
+ virtual void
+ set_raises_post (SemanticGraph::ReadWriteAttribute&)
+ {
+ os << "))" << endl;
+ }
+
+ virtual void
+ post (SemanticGraph::ReadWriteAttribute& a)
+ {
+ os << "{";
+
+ if (exec_src_)
+ {
+ os << STRS[YCH];
+ }
+ else
+ {
+ if (swapping_)
+ {
+ this->gen_swapping_set ();
+ }
+
+ os << "this->executor_->" << a.name () << " (" << endl
+ << a.name () << endl
+ << STRS[ENV_ARG] << ");" << endl;
+ }
+
+ os << "}";
+ }
+
+ virtual void
+ comma (SemanticGraph::ReadWriteAttribute&)
+ {
+ os << "," << endl;
+ }
+
+protected:
+ T& scope_;
+ Traversal::Belongs write_belongs_;
+
+private:
+ INArgTypeNameEmitter write_type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
+ Traversal::SetRaises set_raises_;
+ bool swapping_;
+ bool exec_src_;
+};
+
+template <typename T>
+struct AttributeSourceEmitter : Traversal::ReadAttribute,
+ Traversal::ReadWriteAttribute,
+ EmitterBase
+{
+ AttributeSourceEmitter (Context& c, T& scope, bool exec_src = false)
+ : EmitterBase (c),
+ scope_ (scope),
+ read_type_name_emitter_ (c),
+ type_name_emitter_ (c),
+ return_emitter_ (c),
+ ace_check_return_emitter_ (c),
+ exec_src_ (exec_src)
+ {
+ read_belongs_.node_traverser (read_type_name_emitter_);
+ return_belongs_.node_traverser (return_emitter_);
+ ace_check_return_belongs_.node_traverser (ace_check_return_emitter_);
+ edge_traverser (get_raises_);
+ get_raises_.node_traverser (type_name_emitter_);
+ }
+
+ // ReadWriteAttribute
+ //
+
+ // Overridden by facet attribute emitter in servant source generator.
+ virtual void
+ gen_swapping_get (SemanticGraph::ReadWriteAttribute& a)
+ {
+ os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");";
+
+ Traversal::ReadWriteAttribute::belongs (a, ace_check_return_belongs_);
+
+ os << endl;
+ }
+
+ // Overridden by facet attribute emitter in servant source generator.
+ virtual void
+ gen_write_operation (SemanticGraph::ReadWriteAttribute& a,
+ bool swapping)
+ {
+ WriteAttributeSourceEmitter<T> write_attribute_emitter (ctx,
+ scope_,
+ swapping,
+ exec_src_);
+ write_attribute_emitter.traverse (a);
+ }
+
+ virtual void
+ pre (SemanticGraph::ReadWriteAttribute& a)
+ {
+ Traversal::ReadWriteAttribute::belongs (a, read_belongs_);
+
+ os << endl;
+ }
+
+ virtual void
+ name (SemanticGraph::ReadWriteAttribute& a)
+ {
+ os << scope_.name ()
+ << (exec_src_ ? "_exec_i::" : "_Servant::")
+ << a.name () << " (" << endl
+ << (exec_src_ ? STRS[ENV_SNGL_SRC_NOTUSED] : STRS[ENV_SNGL_SRC])
+ << ")" << endl;
+ }
+
+ virtual void
+ get_raises_none (SemanticGraph::ReadWriteAttribute&)
+ {
+ os << STRS[EXCP_SNGL] << endl;
+ }
+
+ virtual void
+ get_raises_pre (SemanticGraph::ReadWriteAttribute&)
+ {
+ os << STRS[EXCP_START] << " "
+ << STRS[EXCP_SYS] << "," << endl;
+ }
+
+ virtual void
+ get_raises_post (SemanticGraph::ReadWriteAttribute&)
+ {
+ os << "))" << endl;
+ }
+
+ virtual void
+ set_raises (SemanticGraph::ReadWriteAttribute&)
+ {
+ }
+
+ virtual void
+ post (SemanticGraph::ReadWriteAttribute& a)
+ {
+ bool swapping = false;
+
+ os << "{";
+
+ if (exec_src_)
+ {
+ os << STRS[YCH] << endl;
+
+ Traversal::ReadWriteAttribute::belongs (a, return_belongs_);
+ }
+ else
+ {
+ string swap_option = ctx.cl ().get_value ("custom-container", "");
+ swapping = (swap_option == "upgradeable");
+
+ if (swapping)
+ {
+ this->gen_swapping_get (a);
+ }
+
+ os << "return this->executor_->" << a.name () << " (" << endl
+ << STRS[ENV_SNGL_ARG] << ");";
+ }
+
+ os << "}";
+
+ this->gen_write_operation (a, swapping);
+ }
+
+ virtual void
+ comma (SemanticGraph::ReadWriteAttribute&)
+ {
+ os << "," << endl;
+ }
+
+ // ReadAttribute
+ //
+
+ // Overridden by facet attribute emitter in servant source generator.
+ virtual void
+ gen_swapping_get (SemanticGraph::ReadAttribute& a)
+ {
+ os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");";
+
+ Traversal::ReadAttribute::belongs (a, ace_check_return_belongs_);
+
+ os << endl;
+ }
+
+ virtual void
+ pre (SemanticGraph::ReadAttribute& a)
+ {
+ Traversal::ReadAttribute::belongs (a, read_belongs_);
+
+ os << endl;
+ }
+
+ virtual void
+ name (SemanticGraph::ReadAttribute& a)
+ {
+ os << scope_.name ()
+ << (exec_src_ ? "_exec_i::" : "_Servant::")
+ << a.name () << " (" << endl
+ << (exec_src_ ? STRS[ENV_SNGL_SRC_NOTUSED] : STRS[ENV_SNGL_SRC])
+ << ")" << endl;
+ }
+
+ virtual void
+ get_raises_none (SemanticGraph::ReadAttribute&)
+ {
+ os << STRS[EXCP_SNGL] << endl;
+ }
+
+ virtual void
+ get_raises_pre (SemanticGraph::ReadAttribute&)
+ {
+ os << STRS[EXCP_START] << " "
+ << STRS[EXCP_SYS] << "," << endl;
+ }
+
+ virtual void
+ get_raises_post (SemanticGraph::ReadAttribute&)
+ {
+ os << "))" << endl;
+ }
+
+ virtual void
+ set_raises (SemanticGraph::ReadAttribute&)
+ {
+ }
+
+ virtual void
+ post (SemanticGraph::ReadAttribute& a)
+ {
+ bool swapping = false;
+
+ os << "{";
+
+ if (exec_src_)
+ {
+ os << STRS[YCH] << endl;
+
+ Traversal::ReadAttribute::belongs (a, return_belongs_);
+ }
+ else
+ {
+ string swap_option = ctx.cl ().get_value ("custom-container", "");
+ swapping = (swap_option == "upgradeable");
+
+ if (swapping)
+ {
+ this->gen_swapping_get (a);
+ }
+
+ os << "return this->executor_->" << a.name () << " (" << endl
+ << STRS[ENV_SNGL_ARG] << ");";
+ }
+
+ os << "}";
+ }
+
+ virtual void
+ comma (SemanticGraph::ReadAttribute&)
+ {
+ os << "," << endl;
+ }
+
+protected:
+ T& scope_;
+
+private:
+ ReturnTypeNameEmitter read_type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
+ NullReturnEmitter return_emitter_;
+ AceCheckReturnEmitter ace_check_return_emitter_;
+ Traversal::Belongs read_belongs_;
+ Traversal::Belongs return_belongs_;
+ Traversal::Belongs ace_check_return_belongs_;
+ Traversal::GetRaises get_raises_;
+ bool exec_src_;
+};
+
+#endif // ATTRIBUTESOURCEEMITTERS_T_HPP
diff --git a/TAO/CIAO/CIDLC/CIDLC.mpc b/TAO/CIAO/CIDLC/CIDLC.mpc
index 9a153b3858f..034bf35a71b 100644
--- a/TAO/CIAO/CIDLC/CIDLC.mpc
+++ b/TAO/CIAO/CIDLC/CIDLC.mpc
@@ -7,20 +7,10 @@ project(CIDLC): cidlc {
libs += CIDL IDL3 IDL2 CodeGenerationKit CompilerElements
Source_Files {
- ExecutorMappingGenerator.cpp
- DescriptorGenerator.cpp
- ExecImplGenerator.cpp
- ExecImplHeaderGenerator.cpp
- ExecImplSourceGenerator.cpp
- ExecutorMappingGenerator.cpp
- RepositoryIdGenerator.cpp
- SizeTypeCalculator.cpp
- ServantGenerator.cpp
- ServantHeaderGenerator.cpp
- ServantSourceGenerator.cpp
- TypeNameEmitter.cpp
- Literals.cpp
- cidlc.cpp
+ *.cpp
}
+ Header_Files {
+ *.hpp
+ }
}
diff --git a/TAO/CIAO/CIDLC/CompositionEmitter.cpp b/TAO/CIAO/CIDLC/CompositionEmitter.cpp
new file mode 100644
index 00000000000..c7f9754b651
--- /dev/null
+++ b/TAO/CIAO/CIDLC/CompositionEmitter.cpp
@@ -0,0 +1,27 @@
+// file : CIDLC/CompositionEmitter.cpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "CompositionEmitter.hpp"
+#include "Literals.hpp"
+
+using namespace StringLiterals;
+
+CompositionEmitter::CompositionEmitter (Context& c)
+ : EmitterBase (c)
+{
+}
+
+void
+CompositionEmitter::pre (Type& t)
+{
+ ctx.composition_name (t.name ().str ());
+
+ os << STRS[CIDL_NS] << t.name () << "{";
+}
+
+void
+CompositionEmitter::post (Type&)
+{
+ os << "}";
+}
diff --git a/TAO/CIAO/CIDLC/CompositionEmitter.hpp b/TAO/CIAO/CIDLC/CompositionEmitter.hpp
new file mode 100644
index 00000000000..c6aeab17229
--- /dev/null
+++ b/TAO/CIAO/CIDLC/CompositionEmitter.hpp
@@ -0,0 +1,26 @@
+// file : CIDLC/CompositionEmitter.hpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef COMPOSITIONEMITTER_HPP
+#define COMPOSITIONEMITTER_HPP
+
+#include "CCF/CIDL/SemanticGraph.hpp"
+#include "CCF/CIDL/Traversal.hpp"
+
+#include "EmitterBase.hpp"
+
+using namespace CCF::CIDL;
+using namespace CCF::CIDL::SemanticGraph;
+
+struct CompositionEmitter : Traversal::Composition,
+ EmitterBase
+{
+ CompositionEmitter (Context& c);
+
+ virtual void pre (Type&);
+
+ virtual void post (Type&);
+};
+
+#endif // COMPOSITIONEMITTER_HPP
diff --git a/TAO/CIAO/CIDLC/CorbaTypeNameEmitters.cpp b/TAO/CIAO/CIDLC/CorbaTypeNameEmitters.cpp
new file mode 100644
index 00000000000..390e49c6c2b
--- /dev/null
+++ b/TAO/CIAO/CIDLC/CorbaTypeNameEmitters.cpp
@@ -0,0 +1,2235 @@
+// file : CIDLC/CorbaTypeNameEmitter.cpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "CorbaTypeNameEmitters.hpp"
+#include "Literals.hpp"
+
+#include <ostream>
+
+using namespace std;
+using namespace StringLiterals;
+
+CorbaTypeNameEmitter::CorbaTypeNameEmitter (Context& c)
+ : EmitterBase (c)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (Void&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (Boolean&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (Octet&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (Char&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (Wchar&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (Short&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (UnsignedShort&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (Long&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (UnsignedLong&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (LongLong&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (UnsignedLongLong&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (Float&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (Double&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (String&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (SemanticGraph::BoundedString&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (Wstring&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (SemanticGraph::BoundedWideString&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (Object&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (ValueBase&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (Any&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (SemanticGraph::Array&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (SemanticGraph::Enum&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (SemanticGraph::Struct&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (SemanticGraph::Union&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (SemanticGraph::BoundedSequence&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (SemanticGraph::UnboundedSequence&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (SemanticGraph::Interface&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (SemanticGraph::ValueType&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (SemanticGraph::EventType&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (SemanticGraph::Component&)
+{
+}
+
+void
+CorbaTypeNameEmitter::traverse (SemanticGraph::Home&)
+{
+}
+
+// ====================================================================
+
+ReturnTypeNameEmitter::ReturnTypeNameEmitter (Context& c)
+ : CorbaTypeNameEmitter (c)
+{
+}
+
+void
+ReturnTypeNameEmitter::traverse (Void&)
+{
+ os << "void";
+}
+
+void
+ReturnTypeNameEmitter::traverse (Boolean&)
+{
+ os << "::CORBA::Boolean";
+}
+
+void
+ReturnTypeNameEmitter::traverse (Octet&)
+{
+ os << "::CORBA::Octet";
+}
+
+void
+ReturnTypeNameEmitter::traverse (Char&)
+{
+ os << "::CORBA::Char";
+}
+
+void
+ReturnTypeNameEmitter::traverse (Wchar&)
+{
+ os << "::CORBA::WChar";
+}
+
+void
+ReturnTypeNameEmitter::traverse (Short&)
+{
+ os << "::CORBA::Short";
+}
+
+void
+ReturnTypeNameEmitter::traverse (UnsignedShort&)
+{
+ os << "::CORBA::UShort";
+}
+
+void
+ReturnTypeNameEmitter::traverse (Long&)
+{
+ os << "::CORBA::Long";
+}
+
+void
+ReturnTypeNameEmitter::traverse (UnsignedLong&)
+{
+ os << "::CORBA::ULong";
+}
+
+void
+ReturnTypeNameEmitter::traverse (LongLong&)
+{
+ os << "::CORBA::LongLong";
+}
+
+void
+ReturnTypeNameEmitter::traverse (UnsignedLongLong&)
+{
+ os << "::CORBA::ULongLong";
+}
+
+void
+ReturnTypeNameEmitter::traverse (Float&)
+{
+ os << "::CORBA::Float";
+}
+
+void
+ReturnTypeNameEmitter::traverse (Double&)
+{
+ os << "::CORBA::Double";
+}
+
+void
+ReturnTypeNameEmitter::traverse (String&)
+{
+ os << "char *";
+}
+
+void
+ReturnTypeNameEmitter::traverse (SemanticGraph::BoundedString&)
+{
+ os << "char *";
+}
+
+void
+ReturnTypeNameEmitter::traverse (Wstring&)
+{
+ os << "::CORBA::WChar *";
+}
+
+void
+ReturnTypeNameEmitter::traverse (SemanticGraph::BoundedWideString&)
+{
+ os << "::CORBA::WChar *";
+}
+
+void
+ReturnTypeNameEmitter::traverse (Object&)
+{
+ os << "::CORBA::Object_ptr";
+}
+
+void
+ReturnTypeNameEmitter::traverse (ValueBase&)
+{
+ os << "::CORBA::ValueBase *";
+}
+
+void
+ReturnTypeNameEmitter::traverse (Any&)
+{
+ os << "::CORBA::Any *";
+}
+
+void
+ReturnTypeNameEmitter::traverse (SemanticGraph::Array& a)
+{
+ os << a.scoped_name () << "_slice *";
+}
+
+void
+ReturnTypeNameEmitter::traverse (SemanticGraph::Enum& e)
+{
+ os << e.scoped_name ();
+}
+
+void
+ReturnTypeNameEmitter::traverse (SemanticGraph::Struct& s)
+{
+ // This should always be in the context, since the SizeTypeCalculator
+ // is executed before the servant code generators.
+ bool var_size = s.context ().get<bool> (STRS[VAR_SIZE]);
+
+ os << s.scoped_name ();
+
+ if (var_size)
+ {
+ os << " *";
+ }
+}
+
+void
+ReturnTypeNameEmitter::traverse (SemanticGraph::Union& u)
+{
+ // This should always be in the context, since the SizeTypeCalculator
+ // is executed before the servant code generators.
+ bool var_size = u.context ().get<bool> (STRS[VAR_SIZE]);
+
+ os << u.scoped_name ();
+
+ if (var_size)
+ {
+ os << " *";
+ }
+}
+
+void
+ReturnTypeNameEmitter::traverse (SemanticGraph::BoundedSequence& s)
+{
+ os << s.scoped_name () << " *";
+}
+
+void
+ReturnTypeNameEmitter::traverse (SemanticGraph::UnboundedSequence& s)
+{
+ os << s.scoped_name () << " *";
+}
+
+void
+ReturnTypeNameEmitter::traverse (SemanticGraph::Interface& i)
+{
+ os << i.scoped_name () << "_ptr";
+}
+
+void
+ReturnTypeNameEmitter::traverse (SemanticGraph::ValueType& v)
+{
+ os << v.scoped_name () << " *";
+}
+
+void
+ReturnTypeNameEmitter::traverse (SemanticGraph::EventType& e)
+{
+ os << e.scoped_name () << " *";
+}
+
+void
+ReturnTypeNameEmitter::traverse (SemanticGraph::Component& c)
+{
+ os << c.scoped_name () << "_ptr";
+}
+
+void
+ReturnTypeNameEmitter::traverse (SemanticGraph::Home& h)
+{
+ os << h.scoped_name () << "_ptr";
+}
+
+// ===============================================================
+
+INArgTypeNameEmitter::INArgTypeNameEmitter (Context& c)
+ : CorbaTypeNameEmitter (c)
+{
+}
+
+void
+INArgTypeNameEmitter::traverse (Boolean&)
+{
+ os << "::CORBA::Boolean";
+}
+
+void
+INArgTypeNameEmitter::traverse (Octet&)
+{
+ os << "::CORBA::Octet";
+}
+
+void
+INArgTypeNameEmitter::traverse (Char&)
+{
+ os << "::CORBA::Char";
+}
+
+void
+INArgTypeNameEmitter::traverse (Wchar&)
+{
+ os << "::CORBA::WChar";
+}
+
+void
+INArgTypeNameEmitter::traverse (Short&)
+{
+ os << "::CORBA::Short";
+}
+
+void
+INArgTypeNameEmitter::traverse (UnsignedShort&)
+{
+ os << "::CORBA::UShort";
+}
+
+void
+INArgTypeNameEmitter::traverse (Long&)
+{
+ os << "::CORBA::Long";
+}
+
+void
+INArgTypeNameEmitter::traverse (UnsignedLong&)
+{
+ os << "::CORBA::ULong";
+}
+
+void
+INArgTypeNameEmitter::traverse (LongLong&)
+{
+ os << "::CORBA::LongLong";
+}
+
+void
+INArgTypeNameEmitter::traverse (UnsignedLongLong&)
+{
+ os << "::CORBA::ULongLong";
+}
+
+void
+INArgTypeNameEmitter::traverse (Float&)
+{
+ os << "::CORBA::Float";
+}
+
+void
+INArgTypeNameEmitter::traverse (Double&)
+{
+ os << "::CORBA::Double";
+}
+
+void
+INArgTypeNameEmitter::traverse (String&)
+{
+ os << "const char *";
+}
+
+void
+INArgTypeNameEmitter::traverse (SemanticGraph::BoundedString&)
+{
+ os << "const char *";
+}
+
+void
+INArgTypeNameEmitter::traverse (Wstring&)
+{
+ os << "const ::CORBA::WChar *";
+}
+
+void
+INArgTypeNameEmitter::traverse (SemanticGraph::BoundedWideString&)
+{
+ os << "const ::CORBA::WChar *";
+}
+
+void
+INArgTypeNameEmitter::traverse (Object&)
+{
+ os << "::CORBA::Object_ptr";
+}
+
+void
+INArgTypeNameEmitter::traverse (ValueBase&)
+{
+ os << "::CORBA::ValueBase *";
+}
+
+void
+INArgTypeNameEmitter::traverse (Any&)
+{
+ os << "const ::CORBA::Any &";
+}
+
+void
+INArgTypeNameEmitter::traverse (SemanticGraph::Array& a)
+{
+ os << "const " << a.scoped_name ();
+}
+void
+INArgTypeNameEmitter::traverse (SemanticGraph::Enum& e)
+{
+ os << e.scoped_name ();
+}
+
+void
+INArgTypeNameEmitter::traverse (SemanticGraph::Struct& s)
+{
+ os << "const " << s.scoped_name () << " &";;
+}
+
+void
+INArgTypeNameEmitter::traverse (SemanticGraph::Union& u)
+{
+ os << "const " << u.scoped_name () << " &";;
+}
+
+void
+INArgTypeNameEmitter::traverse (SemanticGraph::BoundedSequence& s)
+{
+ os << "const " << s.scoped_name () << " &";;
+}
+
+void
+INArgTypeNameEmitter::traverse (SemanticGraph::UnboundedSequence& s)
+{
+ os << "const " << s.scoped_name () << " &";;
+}
+
+void
+INArgTypeNameEmitter::traverse (SemanticGraph::Interface& i)
+{
+ os << i.scoped_name () << "_ptr";
+}
+
+void
+INArgTypeNameEmitter::traverse (SemanticGraph::ValueType& v)
+{
+ os << v.scoped_name () << " *";
+}
+
+void
+INArgTypeNameEmitter::traverse (SemanticGraph::EventType& e)
+{
+ os << e.scoped_name () << " *";
+}
+
+void
+INArgTypeNameEmitter::traverse (SemanticGraph::Component& c)
+{
+ os << c.scoped_name () << "_ptr";
+}
+
+void
+INArgTypeNameEmitter::traverse (SemanticGraph::Home& h)
+{
+ os << h.scoped_name () << "_ptr";
+}
+
+// ===============================================================
+
+INOUTArgTypeNameEmitter::INOUTArgTypeNameEmitter (Context& c)
+ : CorbaTypeNameEmitter (c)
+{
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (Boolean&)
+{
+ os << "::CORBA::Boolean &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (Octet&)
+{
+ os << "::CORBA::Octet &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (Char&)
+{
+ os << "::CORBA::Char &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (Wchar&)
+{
+ os << "::CORBA::WChar &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (Short&)
+{
+ os << "::CORBA::Short &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (UnsignedShort&)
+{
+ os << "::CORBA::UShort &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (Long&)
+{
+ os << "::CORBA::Long &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (UnsignedLong&)
+{
+ os << "::CORBA::ULong &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (LongLong&)
+{
+ os << "::CORBA::LongLong &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (UnsignedLongLong&)
+{
+ os << "::CORBA::ULongLong &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (Float&)
+{
+ os << "::CORBA::Float &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (Double&)
+{
+ os << "::CORBA::Double &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (String&)
+{
+ os << "char *&";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (SemanticGraph::BoundedString&)
+{
+ os << "char *&";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (Wstring&)
+{
+ os << "::CORBA::WChar *&";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (SemanticGraph::BoundedWideString&)
+{
+ os << "::CORBA::WChar *&";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (Object&)
+{
+ os << "::CORBA::Object_ptr &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (ValueBase&)
+{
+ os << "::CORBA::ValueBase *&";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (Any&)
+{
+ os << "::CORBA::Any &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (SemanticGraph::Array& a)
+{
+ os << a.scoped_name ();
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (SemanticGraph::Enum& e)
+{
+ os << e.scoped_name () << " &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (SemanticGraph::Struct& s)
+{
+ os << s.scoped_name () << " &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (SemanticGraph::Union& u)
+{
+ os << u.scoped_name () << " &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (SemanticGraph::BoundedSequence& s)
+{
+ os << s.scoped_name () << " &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (SemanticGraph::UnboundedSequence& s)
+{
+ os << s.scoped_name () << " &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (SemanticGraph::Interface& i)
+{
+ os << i.scoped_name () << "_ptr &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (SemanticGraph::ValueType& v)
+{
+ os << v.scoped_name () << " *&";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (SemanticGraph::EventType& e)
+{
+ os << e.scoped_name () << " *&";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (SemanticGraph::Component& c)
+{
+ os << c.scoped_name () << "_ptr &";
+}
+
+void
+INOUTArgTypeNameEmitter::traverse (SemanticGraph::Home& h)
+{
+ os << h.scoped_name () << "_ptr";
+}
+
+// =================================================================
+
+OUTArgTypeNameEmitter::OUTArgTypeNameEmitter (Context& c)
+ : CorbaTypeNameEmitter (c)
+{
+}
+
+void
+OUTArgTypeNameEmitter::traverse (Boolean&)
+{
+ os << "::CORBA::Boolean_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (Octet&)
+{
+ os << "::CORBA::Octet_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (Char&)
+{
+ os << "::CORBA::Char_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (Wchar&)
+{
+ os << "::CORBA::WChar_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (Short&)
+{
+ os << "::CORBA::Short_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (UnsignedShort&)
+{
+ os << "::CORBA::UShort_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (Long&)
+{
+ os << "::CORBA::Long_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (UnsignedLong&)
+{
+ os << "::CORBA::ULong_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (LongLong&)
+{
+ os << "::CORBA::LongLong_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (UnsignedLongLong&)
+{
+ os << "::CORBA::ULongLong_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (Float&)
+{
+ os << "::CORBA::Float_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (Double&)
+{
+ os << "::CORBA::Double_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (String&)
+{
+ os << "::CORBA::String_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (SemanticGraph::BoundedString& s)
+{
+ os << s.scoped_name () << "_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (Wstring&)
+{
+ os << "::CORBA::WString_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (SemanticGraph::BoundedWideString& s)
+{
+ os << s.scoped_name () << "_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (Object&)
+{
+ os << "::CORBA::Object_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (ValueBase&)
+{
+ os << "::CORBA::ValueBase_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (Any&)
+{
+ os << "::CORBA::Any_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (SemanticGraph::Array& a)
+{
+ os << a.scoped_name () << "_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (SemanticGraph::Enum& e)
+{
+ os << e.scoped_name () << "_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (SemanticGraph::Struct& s)
+{
+ os << s.scoped_name () << "_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (SemanticGraph::Union& u)
+{
+ os << u.scoped_name () << "_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (SemanticGraph::BoundedSequence& s)
+{
+ os << s.scoped_name () << "_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (SemanticGraph::UnboundedSequence& s)
+{
+ os << s.scoped_name () << "_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (SemanticGraph::Interface& i)
+{
+ os << i.scoped_name () << "_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (SemanticGraph::ValueType& v)
+{
+ os << v.scoped_name () << "_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (SemanticGraph::EventType& e)
+{
+ os << e.scoped_name () << "_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (SemanticGraph::Component& c)
+{
+ os << c.scoped_name () << "_out";
+}
+
+void
+OUTArgTypeNameEmitter::traverse (SemanticGraph::Home& h)
+{
+ os << h.scoped_name () << "_ptr";
+}
+
+// ====================================================================
+
+NullReturnEmitter::NullReturnEmitter (Context& c)
+ : CorbaTypeNameEmitter (c)
+{
+}
+
+void
+NullReturnEmitter::traverse (Boolean&)
+{
+ os << "return false;";
+}
+
+void
+NullReturnEmitter::traverse (Octet&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (Char&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (Wchar&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (Short&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (UnsignedShort&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (Long&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (UnsignedLong&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (LongLong&)
+{
+ os << "return ACE_CDR_LONGLONG_INITIALIZER;";
+}
+
+void
+NullReturnEmitter::traverse (UnsignedLongLong&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (Float&)
+{
+ os << "return 0.0f;";
+}
+
+void
+NullReturnEmitter::traverse (Double&)
+{
+ os << "return 0.0;";
+}
+
+void
+NullReturnEmitter::traverse (String&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (SemanticGraph::BoundedString&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (Wstring&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (SemanticGraph::BoundedWideString&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (Object&)
+{
+ os << "return ::CORBA::Object::_nil ();";
+}
+
+void
+NullReturnEmitter::traverse (ValueBase&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (Any&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (SemanticGraph::Array&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (SemanticGraph::Enum& e)
+{
+ os << e.scoped_name () << " retval;" << endl
+ << "return retval;";
+}
+
+void
+NullReturnEmitter::traverse (SemanticGraph::Struct& s)
+{
+ // This should always be in the context, since the SizeTypeCalculator
+ // is executed before the servant code generators.
+ bool var_size = s.context ().get<bool> (STRS[VAR_SIZE]);
+
+ if (var_size)
+ {
+ os << "return 0;";
+ }
+ else
+ {
+ os << s.scoped_name () << " retval;" << endl
+ << "return retval;";
+ }
+}
+
+void
+NullReturnEmitter::traverse (SemanticGraph::Union& u)
+{
+ // This should always be in the context, since the SizeTypeCalculator
+ // is executed before the servant code generators.
+ bool var_size = u.context ().get<bool> (STRS[VAR_SIZE]);
+
+ if (var_size)
+ {
+ os << "return 0;";
+ }
+ else
+ {
+ os << u.scoped_name () << " retval;" << endl
+ << "return retval;";
+ }
+}
+
+void
+NullReturnEmitter::traverse (SemanticGraph::BoundedSequence&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (SemanticGraph::UnboundedSequence&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (SemanticGraph::Interface& i)
+{
+ os << "return " << i.scoped_name () << "::_nil ();";
+}
+
+void
+NullReturnEmitter::traverse (SemanticGraph::ValueType&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (SemanticGraph::EventType&)
+{
+ os << "return 0;";
+}
+
+void
+NullReturnEmitter::traverse (SemanticGraph::Component& c)
+{
+ os << "return " << c.scoped_name () << "::_nil ();";
+}
+
+void
+NullReturnEmitter::traverse (SemanticGraph::Home& h)
+{
+ os << "return " << h.scoped_name () << "::_nil ();";
+}
+
+// ====================================================================
+
+AceCheckReturnEmitter::AceCheckReturnEmitter (Context& c)
+ : CorbaTypeNameEmitter (c)
+{
+}
+
+void
+AceCheckReturnEmitter::traverse (Void&)
+{
+ os << "ACE_CHECK;";
+}
+
+void
+AceCheckReturnEmitter::traverse (Boolean&)
+{
+ os << STRS[ACE_CR] << " (false);";
+}
+
+void
+AceCheckReturnEmitter::traverse (Octet&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (Char&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (Wchar&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (Short&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (UnsignedShort&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (Long&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (UnsignedLong&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (LongLong&)
+{
+ os << STRS[ACE_CR] << " (ACE_CDR_LONGLONG_INITIALIZER);";
+}
+
+void
+AceCheckReturnEmitter::traverse (UnsignedLongLong&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (Float&)
+{
+ os << STRS[ACE_CR] << " (0.0f);";
+}
+
+void
+AceCheckReturnEmitter::traverse (Double&)
+{
+ os << STRS[ACE_CR] << " (0.0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (String&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (SemanticGraph::BoundedString&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (Wstring&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (SemanticGraph::BoundedWideString&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (Object&)
+{
+ os << STRS[ACE_CR] << " (::CORBA::Object::_nil ());";
+}
+
+void
+AceCheckReturnEmitter::traverse (ValueBase&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (Any&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (SemanticGraph::Array&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (SemanticGraph::Enum& e)
+{
+ os << e.scoped_name () << " retval;"
+ << STRS[ACE_UA] << " (retval);"
+ << STRS[ACE_CR] << " (retval);";
+}
+
+void
+AceCheckReturnEmitter::traverse (SemanticGraph::Struct& s)
+{
+ // This should always be in the context, since the SizeTypeCalculator
+ // is executed before the servant code generators.
+ bool var_size = s.context ().get<bool> (STRS[VAR_SIZE]);
+
+ if (var_size)
+ {
+ os << STRS[ACE_CR] << " (0);";
+ }
+ else
+ {
+ os << s.scoped_name () << " retval;"
+ << STRS[ACE_UA] << " (retval);"
+ << STRS[ACE_CR] << " (retval);";
+ }
+}
+
+void
+AceCheckReturnEmitter::traverse (SemanticGraph::Union& u)
+{
+ // This should always be in the context, since the SizeTypeCalculator
+ // is executed before the servant code generators.
+ bool var_size = u.context ().get<bool> (STRS[VAR_SIZE]);
+
+ if (var_size)
+ {
+ os << STRS[ACE_CR] << " (0);";
+ }
+ else
+ {
+ os << u.scoped_name () << " retval;"
+ << STRS[ACE_UA] << " (retval);"
+ << STRS[ACE_CR] << " (retval);";
+ }
+}
+
+void
+AceCheckReturnEmitter::traverse (SemanticGraph::BoundedSequence&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (SemanticGraph::UnboundedSequence&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (SemanticGraph::Interface& i)
+{
+ os << STRS[ACE_CR] << " (" << i.scoped_name () << "::_nil ());";
+}
+
+void
+AceCheckReturnEmitter::traverse (SemanticGraph::ValueType&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (SemanticGraph::EventType&)
+{
+ os << STRS[ACE_CR] << " (0);";
+}
+
+void
+AceCheckReturnEmitter::traverse (SemanticGraph::Component& c)
+{
+ os << STRS[ACE_CR] << " (" << c.scoped_name () << "::_nil ());";
+}
+
+void
+AceCheckReturnEmitter::traverse (SemanticGraph::Home& h)
+{
+ os << STRS[ACE_CR] << " (" << h.scoped_name () << "::_nil ());";
+}
+
+// ====================================================================
+/* Not currently used, but it was at one time and may be useful again.
+
+NullRHSEmitter::NullRHSEmitter (Context& c)
+ : CorbaTypeNameEmitter (c)
+{
+}
+
+void
+NullRHSEmitter::traverse (Boolean&)
+{
+ os << "= false;";
+}
+
+void
+NullRHSEmitter::traverse (Octet&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (Char&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (Wchar&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (Short&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (UnsignedShort&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (Long&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (UnsignedLong&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (LongLong&)
+{
+ os << "= ACE_CDR_LONGLONG_INITIALIZER;";
+}
+
+void
+NullRHSEmitter::traverse (UnsignedLongLong&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (Float&)
+{
+ os << "= 0.0f;";
+}
+
+void
+NullRHSEmitter::traverse (Double&)
+{
+ os << "= 0.0;";
+}
+
+void
+NullRHSEmitter::traverse (String&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (SemanticGraph::BoundedString&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (Wstring&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (SemanticGraph::BoundedWideString&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (Object&)
+{
+ os << "= ::CORBA::Object::_nil ();";
+}
+
+void
+NullRHSEmitter::traverse (ValueBase&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (Any&)
+{
+ // This will hopefully work both if the lhs is a pointer (for example
+ // RetunrTypeNameEmitter) or not (for example INArgTypeNameEmitter).
+ os << ";";
+}
+
+void
+NullRHSEmitter::traverse (SemanticGraph::Array&)
+{
+ // This will hopefully work both if the lhs is a slice pointer (for example
+ // RetunrTypeNameEmitter) or not (for example INArgTypeNameEmitter).
+ os << ";";
+}
+
+void
+NullRHSEmitter::traverse (SemanticGraph::Enum&)
+{
+ os << ";";
+}
+
+void
+NullRHSEmitter::traverse (SemanticGraph::Struct& s)
+{
+ // This should always be in the context, since the SizeTypeCalculator
+ // is executed before the servant code generators.
+ bool var_size = s.context ().get<bool> (STRS[VAR_SIZE]);
+
+ if (var_size)
+ {
+ os << "= 0;";
+ }
+ else
+ {
+ os << ";";
+ }
+}
+
+void
+NullRHSEmitter::traverse (SemanticGraph::Union& u)
+{
+ // This should always be in the context, since the SizeTypeCalculator
+ // is executed before the servant code generators.
+ bool var_size = u.context ().get<bool> (STRS[VAR_SIZE]);
+
+ if (var_size)
+ {
+ os << "= 0;";
+ }
+ else
+ {
+ os << ";";
+ }
+}
+
+void
+NullRHSEmitter::traverse (SemanticGraph::BoundedSequence&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (SemanticGraph::UnboundedSequence&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (SemanticGraph::Interface& i)
+{
+ os << "= " << i.scoped_name () << "::_nil ();";
+}
+
+void
+NullRHSEmitter::traverse (SemanticGraph::ValueType&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (SemanticGraph::EventType&)
+{
+ os << "= 0;";
+}
+
+void
+NullRHSEmitter::traverse (SemanticGraph::Component& c)
+{
+ os << "= " << c.scoped_name () << "::_nil ();";
+}
+
+void
+NullRHSEmitter::traverse (SemanticGraph::Home& h)
+{
+ os << "= " << h.scoped_name () << "::_nil ();";
+}
+*/
+// ====================================================================
+
+ExtractedTypeDeclEmitter::ExtractedTypeDeclEmitter (Context& c)
+ : CorbaTypeNameEmitter (c)
+{
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (Boolean&)
+{
+ os << "::CORBA::Boolean " << STRS[EXTRACT_TMP] << " = false;"
+ << "::CORBA::Any::to_boolean " << STRS[EXTRACT]
+ << " (" << STRS[EXTRACT_TMP] << ");";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (Octet&)
+{
+ os << "::CORBA::Octet " << STRS[EXTRACT_TMP] << " = 0;"
+ << "::CORBA::Any::to_octet " << STRS[EXTRACT]
+ << " (" << STRS[EXTRACT_TMP] << ");";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (Char&)
+{
+ os << "::CORBA::Char " << STRS[EXTRACT_TMP] << " = 0;"
+ << "::CORBA::Any::to_char " << STRS[EXTRACT]
+ << " (" << STRS[EXTRACT_TMP] << ");";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (Wchar&)
+{
+ os << "::CORBA::WChar " << STRS[EXTRACT_TMP] << " = 0;"
+ << "::CORBA::Any::to_wchar " << STRS[EXTRACT]
+ << " (" << STRS[EXTRACT_TMP] << ");";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (Short&)
+{
+ os << "::CORBA::Short " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (UnsignedShort&)
+{
+ os << "::CORBA::UShort " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (Long&)
+{
+ os << "::CORBA::Long " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (UnsignedLong&)
+{
+ os << "::CORBA::ULong " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (LongLong&)
+{
+ os << "::CORBA::LongLong " << STRS[EXTRACT]
+ << " = ACE_CDR_LONGLONG_INITIALIZER;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (UnsignedLongLong&)
+{
+ os << "::CORBA::ULongLong " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (Float&)
+{
+ os << "::CORBA::Float " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (Double&)
+{
+ os << "::CORBA::Double " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (String&)
+{
+ os << "const char * " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (SemanticGraph::BoundedString&)
+{
+ os << "const char * " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (Wstring&)
+{
+ os << "::CORBA::WChar * " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (SemanticGraph::BoundedWideString&)
+{
+ os << "::CORBA::WChar * " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (Object&)
+{
+ os << "::CORBA::Object_ptr " << STRS[EXTRACT]
+ << " = ::CORBA::Object::_nil ();";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (ValueBase&)
+{
+ os << "::CORBA::ValueBase * " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (Any&)
+{
+ os << "::CORBA::Any * " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (SemanticGraph::Array& a)
+{
+ os << a.scoped_name () << "_forany & " << STRS[EXTRACT] << ";";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (SemanticGraph::Enum& e)
+{
+ os << e.scoped_name () << " " << STRS[EXTRACT] << ";";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (SemanticGraph::Struct& s)
+{
+ os << s.scoped_name () << " * " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (SemanticGraph::Union& u)
+{
+ os << u.scoped_name () << " * " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (SemanticGraph::BoundedSequence& s)
+{
+ os << s.scoped_name () << " * " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (SemanticGraph::UnboundedSequence& s)
+{
+ os << s.scoped_name () << " * " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (SemanticGraph::Interface& i)
+{
+ os << i.scoped_name () << "_ptr " << STRS[EXTRACT] << " = "
+ << i.scoped_name () << "::_nil ();";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (SemanticGraph::ValueType& v)
+{
+ os << v.scoped_name () << " * " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (SemanticGraph::EventType& e)
+{
+ os << e.scoped_name () << " * " << STRS[EXTRACT] << " = 0;";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (SemanticGraph::Component& c)
+{
+ os << c.scoped_name () << "_ptr " << STRS[EXTRACT] << " = "
+ << c.scoped_name () << "::_nil ();";
+}
+
+void
+ExtractedTypeDeclEmitter::traverse (SemanticGraph::Home& h)
+{
+ os << h.scoped_name () << "_ptr " << STRS[EXTRACT] << " = "
+ << h.scoped_name () << "::_nil ();";
+}
+
+// ====================================================================
+
+AssignFromExtractedEmitter::AssignFromExtractedEmitter (Context& c)
+ : CorbaTypeNameEmitter (c)
+{
+}
+
+void
+AssignFromExtractedEmitter::traverse (Boolean&)
+{
+ os << STRS[EXTRACT] << ".ref_";
+}
+
+void
+AssignFromExtractedEmitter::traverse (Octet&)
+{
+ os << STRS[EXTRACT] << ".ref_";
+}
+
+void
+AssignFromExtractedEmitter::traverse (Char&)
+{
+ os << STRS[EXTRACT] << ".ref_";
+}
+
+void
+AssignFromExtractedEmitter::traverse (Wchar&)
+{
+ os << STRS[EXTRACT] << ".ref_";
+}
+
+void
+AssignFromExtractedEmitter::traverse (Short&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (UnsignedShort&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (Long&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (UnsignedLong&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (LongLong&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (UnsignedLongLong&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (Float&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (Double&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (String&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (SemanticGraph::BoundedString&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (Wstring&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (SemanticGraph::BoundedWideString&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (Object&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (ValueBase&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (Any&)
+{
+ os << "*" << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (SemanticGraph::Array&)
+{
+ os << STRS[EXTRACT] << ".in ()";
+}
+
+void
+AssignFromExtractedEmitter::traverse (SemanticGraph::Enum&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (SemanticGraph::Struct& s)
+{
+ // This should always be in the context, since the SizeTypeCalculator
+ // is executed before the servant code generators.
+ bool var_size = s.context ().get<bool> (STRS[VAR_SIZE]);
+
+ if (!var_size)
+ {
+ os << "*";
+ }
+
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (SemanticGraph::Union& u)
+{
+ // This should always be in the context, since the SizeTypeCalculator
+ // is executed before the servant code generators.
+ bool var_size = u.context ().get<bool> (STRS[VAR_SIZE]);
+
+ if (!var_size)
+ {
+ os << "*";
+ }
+
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (SemanticGraph::BoundedSequence&)
+{
+ os << "*" << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (SemanticGraph::UnboundedSequence&)
+{
+ os << "*" << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (SemanticGraph::Interface&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (SemanticGraph::ValueType&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (SemanticGraph::EventType&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (SemanticGraph::Component&)
+{
+ os << STRS[EXTRACT];
+}
+
+void
+AssignFromExtractedEmitter::traverse (SemanticGraph::Home&)
+{
+ os << STRS[EXTRACT];
+}
+
+// ====================================================================
+
+SetAttributeDelegationEmitter::SetAttributeDelegationEmitter (
+ Context& c,
+ SemanticGraph::ReadWriteAttribute& a
+ )
+ : CorbaTypeNameEmitter (c),
+ attr_ (a)
+ , assign_emitter_ (c)
+ , extract_emitter_ (c)
+{
+ assign_belongs_.node_traverser (assign_emitter_);
+ extract_belongs_.node_traverser (extract_emitter_);
+}
+
+void
+SetAttributeDelegationEmitter::traverse (Boolean&)
+{
+ emit_delegation ();
+}
+
+void
+SetAttributeDelegationEmitter::traverse (Octet&)
+{
+ emit_delegation ();
+}
+
+void
+SetAttributeDelegationEmitter::traverse (Char&)
+{
+ emit_delegation ();
+}
+
+void
+SetAttributeDelegationEmitter::traverse (Wchar&)
+{
+ emit_delegation ();
+}
+
+void
+SetAttributeDelegationEmitter::traverse (Short&)
+{
+ emit_delegation ();
+}
+
+void
+SetAttributeDelegationEmitter::traverse (UnsignedShort&)
+{
+ emit_delegation ();
+}
+
+void
+SetAttributeDelegationEmitter::traverse (Long&)
+{
+ emit_delegation ();
+}
+
+void
+SetAttributeDelegationEmitter::traverse (UnsignedLong&)
+{
+ emit_delegation ();
+}
+
+void
+SetAttributeDelegationEmitter::traverse (LongLong&)
+{
+ emit_delegation ();
+}
+
+void
+SetAttributeDelegationEmitter::traverse (UnsignedLongLong&)
+{
+ emit_delegation ();
+}
+
+void
+SetAttributeDelegationEmitter::traverse (Float&)
+{
+ emit_delegation ();
+}
+
+void
+SetAttributeDelegationEmitter::traverse (Double&)
+{
+ emit_delegation ();
+}
+
+void
+SetAttributeDelegationEmitter::traverse (String&)
+{
+ emit_delegation ();
+}
+
+void
+SetAttributeDelegationEmitter::traverse (SemanticGraph::BoundedString&)
+{
+ emit_error ("bounded string");
+}
+
+void
+SetAttributeDelegationEmitter::traverse (Wstring&)
+{
+ emit_error ("wstring");
+}
+
+void
+SetAttributeDelegationEmitter::traverse (SemanticGraph::BoundedWideString&)
+{
+ emit_error ("bounded wstring");
+}
+
+void
+SetAttributeDelegationEmitter::traverse (Object&)
+{
+ emit_error ("CORBA::Object");
+}
+
+void
+SetAttributeDelegationEmitter::traverse (ValueBase&)
+{
+ emit_error ("CORBA::ValueBase");
+}
+
+void
+SetAttributeDelegationEmitter::traverse (Any&)
+{
+ emit_error ("CORBA::Any");
+}
+
+void
+SetAttributeDelegationEmitter::traverse (SemanticGraph::Array&)
+{
+ emit_error ("array");
+}
+
+void
+SetAttributeDelegationEmitter::traverse (SemanticGraph::Enum&)
+{
+ emit_delegation ();
+}
+
+void
+SetAttributeDelegationEmitter::traverse (SemanticGraph::Struct&)
+{
+ emit_error ("struct");
+}
+
+void
+SetAttributeDelegationEmitter::traverse (SemanticGraph::Union&)
+{
+ emit_error ("union");
+}
+
+void
+SetAttributeDelegationEmitter::traverse (SemanticGraph::BoundedSequence&)
+{
+ emit_error ("bounded sequence");
+}
+
+void
+SetAttributeDelegationEmitter::traverse (SemanticGraph::UnboundedSequence&)
+{
+ emit_error ("unbounded sequence");
+}
+
+void
+SetAttributeDelegationEmitter::traverse (SemanticGraph::Interface&)
+{
+ emit_error ("interface");
+}
+
+void
+SetAttributeDelegationEmitter::traverse (SemanticGraph::ValueType&)
+{
+ emit_error ("valuetype");
+}
+
+void
+SetAttributeDelegationEmitter::traverse (SemanticGraph::EventType&)
+{
+ emit_error ("eventtype");
+}
+
+void
+SetAttributeDelegationEmitter::traverse (SemanticGraph::Component&)
+{
+ emit_error ("component");
+}
+
+void
+SetAttributeDelegationEmitter::traverse (SemanticGraph::Home&)
+{
+ emit_error ("home");
+}
+
+void
+SetAttributeDelegationEmitter::emit_delegation (void)
+{
+ open_if_block ();
+
+ Traversal::ReadWriteAttribute::belongs (attr_, extract_belongs_);
+
+ os << "descr_value >>= " << STRS[EXTRACT] << ";"
+ << "this->" << attr_.name () << " (";
+
+ Traversal::ReadWriteAttribute::belongs (attr_, assign_belongs_);
+
+ os << ");";
+
+ close_if_block ();
+}
+
+void
+SetAttributeDelegationEmitter::emit_error (const char *corba_kind)
+{
+ open_if_block ();
+
+ os << "ACE_ERROR ((" << endl
+ << " LM_ERROR," << endl
+ << " \"Component attributes of " << corba_kind << "\"" << endl
+ << " \"IDL type are not yet supported by CIAO\\n\"" << endl
+ << " ));";
+
+ close_if_block ();
+}
+
+void
+SetAttributeDelegationEmitter::open_if_block (void)
+{
+ os << "if (ACE_OS::strcmp (descr_name, \""
+ << attr_.name () << "\") == 0)" << endl
+ << "{";
+}
+
+void
+SetAttributeDelegationEmitter::close_if_block (void)
+{
+ os << "continue;"
+ << "}";
+}
diff --git a/TAO/CIAO/CIDLC/CorbaTypeNameEmitters.hpp b/TAO/CIAO/CIDLC/CorbaTypeNameEmitters.hpp
new file mode 100644
index 00000000000..8a5a088f00c
--- /dev/null
+++ b/TAO/CIAO/CIDLC/CorbaTypeNameEmitters.hpp
@@ -0,0 +1,511 @@
+// file : CIDLC/FullTypeNameEmitter.hpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef TYPENAME_EMITTER_HPP
+#define TYPENAME_EMITTER_HPP
+
+#include "CCF/CIDL/SemanticGraph.hpp"
+#include "CCF/CIDL/Traversal.hpp"
+
+#include "EmitterBase.hpp"
+
+using namespace CCF::CIDL;
+using namespace CCF::CIDL::SemanticGraph;
+
+// Base class that holds the ostream member
+// common to every other class in this file,
+// and collects the ancestors in one place.
+//
+// Derived classes encapsulate the CORBA rules for
+// the C++ mapping of different type kinds.
+class CorbaTypeNameEmitter : public EmitterBase,
+ public Traversal::Void,
+ public Traversal::Boolean,
+ public Traversal::Octet,
+ public Traversal::Char,
+ public Traversal::Wchar,
+ public Traversal::Short,
+ public Traversal::UnsignedShort,
+ public Traversal::Long,
+ public Traversal::UnsignedLong,
+ public Traversal::LongLong,
+ public Traversal::UnsignedLongLong,
+ public Traversal::Float,
+ public Traversal::Double,
+ public Traversal::String,
+ public Traversal::BoundedString,
+ public Traversal::Wstring,
+ public Traversal::BoundedWideString,
+ public Traversal::Object,
+ public Traversal::ValueBase,
+ public Traversal::Any,
+ public Traversal::Array,
+ public Traversal::Enum,
+ public Traversal::Struct,
+ public Traversal::Union,
+ public Traversal::BoundedSequence,
+ public Traversal::UnboundedSequence,
+ public Traversal::Interface,
+ public Traversal::ValueType,
+ public Traversal::EventType,
+ public Traversal::Component,
+ public Traversal::Home
+{
+public:
+ virtual void traverse (Void&);
+ virtual void traverse (Boolean&);
+ virtual void traverse (Octet&);
+ virtual void traverse (Char&);
+ virtual void traverse (Wchar&);
+ virtual void traverse (Short&);
+ virtual void traverse (UnsignedShort&);
+ virtual void traverse (Long&);
+ virtual void traverse (UnsignedLong&);
+ virtual void traverse (LongLong&);
+ virtual void traverse (UnsignedLongLong&);
+ virtual void traverse (Float&);
+ virtual void traverse (Double&);
+ virtual void traverse (String&);
+ virtual void traverse (SemanticGraph::BoundedString&);
+ virtual void traverse (Wstring&);
+ virtual void traverse (SemanticGraph::BoundedWideString&);
+ virtual void traverse (Object&);
+ virtual void traverse (ValueBase&);
+ virtual void traverse (Any&);
+ virtual void traverse (SemanticGraph::Array&);
+ virtual void traverse (SemanticGraph::Enum&);
+ virtual void traverse (SemanticGraph::Struct&);
+ virtual void traverse (SemanticGraph::Union&);
+ virtual void traverse (SemanticGraph::BoundedSequence&);
+ virtual void traverse (SemanticGraph::UnboundedSequence&);
+ virtual void traverse (SemanticGraph::Interface&);
+ virtual void traverse (SemanticGraph::ValueType&);
+ virtual void traverse (SemanticGraph::EventType&);
+ virtual void traverse (SemanticGraph::Component&);
+ virtual void traverse (SemanticGraph::Home&);
+
+protected:
+ CorbaTypeNameEmitter (Context&);
+};
+
+// Generates the name of an operation's return type.
+//
+//
+class ReturnTypeNameEmitter : public CorbaTypeNameEmitter
+{
+public:
+ ReturnTypeNameEmitter (Context&);
+
+ virtual void traverse (Void&);
+ virtual void traverse (Boolean&);
+ virtual void traverse (Octet&);
+ virtual void traverse (Char&);
+ virtual void traverse (Wchar&);
+ virtual void traverse (Short&);
+ virtual void traverse (UnsignedShort&);
+ virtual void traverse (Long&);
+ virtual void traverse (UnsignedLong&);
+ virtual void traverse (LongLong&);
+ virtual void traverse (UnsignedLongLong&);
+ virtual void traverse (Float&);
+ virtual void traverse (Double&);
+ virtual void traverse (String&);
+ virtual void traverse (SemanticGraph::BoundedString&);
+ virtual void traverse (Wstring&);
+ virtual void traverse (SemanticGraph::BoundedWideString&);
+ virtual void traverse (Object&);
+ virtual void traverse (ValueBase&);
+ virtual void traverse (Any&);
+ virtual void traverse (SemanticGraph::Array&);
+ virtual void traverse (SemanticGraph::Enum&);
+ virtual void traverse (SemanticGraph::Struct&);
+ virtual void traverse (SemanticGraph::Union&);
+ virtual void traverse (SemanticGraph::BoundedSequence&);
+ virtual void traverse (SemanticGraph::UnboundedSequence&);
+ virtual void traverse (SemanticGraph::Interface&);
+ virtual void traverse (SemanticGraph::ValueType&);
+ virtual void traverse (SemanticGraph::EventType&);
+ virtual void traverse (SemanticGraph::Component&);
+ virtual void traverse (SemanticGraph::Home&);
+};
+
+// Generates the typename of an IN argument.
+//
+//
+class INArgTypeNameEmitter : public CorbaTypeNameEmitter
+{
+public:
+ INArgTypeNameEmitter (Context&);
+
+ virtual void traverse (Boolean&);
+ virtual void traverse (Octet&);
+ virtual void traverse (Char&);
+ virtual void traverse (Wchar&);
+ virtual void traverse (Short&);
+ virtual void traverse (UnsignedShort&);
+ virtual void traverse (Long&);
+ virtual void traverse (UnsignedLong&);
+ virtual void traverse (LongLong&);
+ virtual void traverse (UnsignedLongLong&);
+ virtual void traverse (Float&);
+ virtual void traverse (Double&);
+ virtual void traverse (String&);
+ virtual void traverse (SemanticGraph::BoundedString&);
+ virtual void traverse (Wstring&);
+ virtual void traverse (SemanticGraph::BoundedWideString&);
+ virtual void traverse (Object&);
+ virtual void traverse (ValueBase&);
+ virtual void traverse (Any&);
+ virtual void traverse (SemanticGraph::Array&);
+ virtual void traverse (SemanticGraph::Enum&);
+ virtual void traverse (SemanticGraph::Struct&);
+ virtual void traverse (SemanticGraph::Union&);
+ virtual void traverse (SemanticGraph::BoundedSequence&);
+ virtual void traverse (SemanticGraph::UnboundedSequence&);
+ virtual void traverse (SemanticGraph::Interface&);
+ virtual void traverse (SemanticGraph::ValueType&);
+ virtual void traverse (SemanticGraph::EventType&);
+ virtual void traverse (SemanticGraph::Component&);
+ virtual void traverse (SemanticGraph::Home&);
+};
+
+// Generates the typename of an INOUT argument.
+//
+//
+class INOUTArgTypeNameEmitter : public CorbaTypeNameEmitter
+{
+public:
+ INOUTArgTypeNameEmitter (Context&);
+
+ virtual void traverse (Boolean&);
+ virtual void traverse (Octet&);
+ virtual void traverse (Char&);
+ virtual void traverse (Wchar&);
+ virtual void traverse (Short&);
+ virtual void traverse (UnsignedShort&);
+ virtual void traverse (Long&);
+ virtual void traverse (UnsignedLong&);
+ virtual void traverse (LongLong&);
+ virtual void traverse (UnsignedLongLong&);
+ virtual void traverse (Float&);
+ virtual void traverse (Double&);
+ virtual void traverse (String&);
+ virtual void traverse (SemanticGraph::BoundedString&);
+ virtual void traverse (Wstring&);
+ virtual void traverse (SemanticGraph::BoundedWideString&);
+ virtual void traverse (Object&);
+ virtual void traverse (ValueBase&);
+ virtual void traverse (Any&);
+ virtual void traverse (SemanticGraph::Array&);
+ virtual void traverse (SemanticGraph::Enum&);
+ virtual void traverse (SemanticGraph::Struct&);
+ virtual void traverse (SemanticGraph::Union&);
+ virtual void traverse (SemanticGraph::BoundedSequence&);
+ virtual void traverse (SemanticGraph::UnboundedSequence&);
+ virtual void traverse (SemanticGraph::Interface&);
+ virtual void traverse (SemanticGraph::ValueType&);
+ virtual void traverse (SemanticGraph::EventType&);
+ virtual void traverse (SemanticGraph::Component&);
+ virtual void traverse (SemanticGraph::Home&);
+};
+
+// Generates the typename of an OUT argument.
+//
+//
+class OUTArgTypeNameEmitter : public CorbaTypeNameEmitter
+{
+public:
+ OUTArgTypeNameEmitter (Context&);
+
+ virtual void traverse (Boolean&);
+ virtual void traverse (Octet&);
+ virtual void traverse (Char&);
+ virtual void traverse (Wchar&);
+ virtual void traverse (Short&);
+ virtual void traverse (UnsignedShort&);
+ virtual void traverse (Long&);
+ virtual void traverse (UnsignedLong&);
+ virtual void traverse (LongLong&);
+ virtual void traverse (UnsignedLongLong&);
+ virtual void traverse (Float&);
+ virtual void traverse (Double&);
+ virtual void traverse (String&);
+ virtual void traverse (SemanticGraph::BoundedString&);
+ virtual void traverse (Wstring&);
+ virtual void traverse (SemanticGraph::BoundedWideString&);
+ virtual void traverse (Object&);
+ virtual void traverse (ValueBase&);
+ virtual void traverse (Any&);
+ virtual void traverse (SemanticGraph::Array&);
+ virtual void traverse (SemanticGraph::Enum&);
+ virtual void traverse (SemanticGraph::Struct&);
+ virtual void traverse (SemanticGraph::Union&);
+ virtual void traverse (SemanticGraph::BoundedSequence&);
+ virtual void traverse (SemanticGraph::UnboundedSequence&);
+ virtual void traverse (SemanticGraph::Interface&);
+ virtual void traverse (SemanticGraph::ValueType&);
+ virtual void traverse (SemanticGraph::EventType&);
+ virtual void traverse (SemanticGraph::Component&);
+ virtual void traverse (SemanticGraph::Home&);
+};
+
+// Generates 'return' plus the appropriate NULL return value,
+// including no output for Void.
+//
+//
+class NullReturnEmitter : public CorbaTypeNameEmitter
+{
+public:
+ NullReturnEmitter (Context&);
+
+ virtual void traverse (Boolean&);
+ virtual void traverse (Octet&);
+ virtual void traverse (Char&);
+ virtual void traverse (Wchar&);
+ virtual void traverse (Short&);
+ virtual void traverse (UnsignedShort&);
+ virtual void traverse (Long&);
+ virtual void traverse (UnsignedLong&);
+ virtual void traverse (LongLong&);
+ virtual void traverse (UnsignedLongLong&);
+ virtual void traverse (Float&);
+ virtual void traverse (Double&);
+ virtual void traverse (String&);
+ virtual void traverse (SemanticGraph::BoundedString&);
+ virtual void traverse (Wstring&);
+ virtual void traverse (SemanticGraph::BoundedWideString&);
+ virtual void traverse (Object&);
+ virtual void traverse (ValueBase&);
+ virtual void traverse (Any&);
+ virtual void traverse (SemanticGraph::Array&);
+ virtual void traverse (SemanticGraph::Enum&);
+ virtual void traverse (SemanticGraph::Struct&);
+ virtual void traverse (SemanticGraph::Union&);
+ virtual void traverse (SemanticGraph::BoundedSequence&);
+ virtual void traverse (SemanticGraph::UnboundedSequence&);
+ virtual void traverse (SemanticGraph::Interface&);
+ virtual void traverse (SemanticGraph::ValueType&);
+ virtual void traverse (SemanticGraph::EventType&);
+ virtual void traverse (SemanticGraph::Component&);
+ virtual void traverse (SemanticGraph::Home&);
+};
+
+// Generates 'return' plus the appropriate NULL return value,
+// including no output for Void.
+//
+//
+class AceCheckReturnEmitter : public CorbaTypeNameEmitter
+{
+public:
+ AceCheckReturnEmitter (Context&);
+
+ virtual void traverse (Void&);
+ virtual void traverse (Boolean&);
+ virtual void traverse (Octet&);
+ virtual void traverse (Char&);
+ virtual void traverse (Wchar&);
+ virtual void traverse (Short&);
+ virtual void traverse (UnsignedShort&);
+ virtual void traverse (Long&);
+ virtual void traverse (UnsignedLong&);
+ virtual void traverse (LongLong&);
+ virtual void traverse (UnsignedLongLong&);
+ virtual void traverse (Float&);
+ virtual void traverse (Double&);
+ virtual void traverse (String&);
+ virtual void traverse (SemanticGraph::BoundedString&);
+ virtual void traverse (Wstring&);
+ virtual void traverse (SemanticGraph::BoundedWideString&);
+ virtual void traverse (Object&);
+ virtual void traverse (ValueBase&);
+ virtual void traverse (Any&);
+ virtual void traverse (SemanticGraph::Array&);
+ virtual void traverse (SemanticGraph::Enum&);
+ virtual void traverse (SemanticGraph::Struct&);
+ virtual void traverse (SemanticGraph::Union&);
+ virtual void traverse (SemanticGraph::BoundedSequence&);
+ virtual void traverse (SemanticGraph::UnboundedSequence&);
+ virtual void traverse (SemanticGraph::Interface&);
+ virtual void traverse (SemanticGraph::ValueType&);
+ virtual void traverse (SemanticGraph::EventType&);
+ virtual void traverse (SemanticGraph::Component&);
+ virtual void traverse (SemanticGraph::Home&);
+};
+
+/* Not currently used, but it was at one time and may be useful again.
+
+// Generates the appropriate NULL value, including the assignment operator,
+// if needed, for the rhs of an assignment statement.
+//
+//
+class NullRHSEmitter : public CorbaTypeNameEmitter
+{
+public:
+ NullRHSEmitter (Context&);
+
+ virtual void traverse (Boolean&);
+ virtual void traverse (Octet&);
+ virtual void traverse (Char&);
+ virtual void traverse (Wchar&);
+ virtual void traverse (Short&);
+ virtual void traverse (UnsignedShort&);
+ virtual void traverse (Long&);
+ virtual void traverse (UnsignedLong&);
+ virtual void traverse (LongLong&);
+ virtual void traverse (UnsignedLongLong&);
+ virtual void traverse (Float&);
+ virtual void traverse (Double&);
+ virtual void traverse (String&);
+ virtual void traverse (SemanticGraph::BoundedString&);
+ virtual void traverse (Wstring&);
+ virtual void traverse (SemanticGraph::BoundedWideString&);
+ virtual void traverse (Object&);
+ virtual void traverse (ValueBase&);
+ virtual void traverse (Any&);
+ virtual void traverse (SemanticGraph::Array&);
+ virtual void traverse (SemanticGraph::Enum&);
+ virtual void traverse (SemanticGraph::Struct&);
+ virtual void traverse (SemanticGraph::Union&);
+ virtual void traverse (SemanticGraph::BoundedSequence&);
+ virtual void traverse (SemanticGraph::UnboundedSequence&);
+ virtual void traverse (SemanticGraph::Interface&);
+ virtual void traverse (SemanticGraph::ValueType&);
+ virtual void traverse (SemanticGraph::EventType&);
+ virtual void traverse (SemanticGraph::Component&);
+ virtual void traverse (SemanticGraph::Home&);
+};
+*/
+// Declares and initializes a variable to use for any extraction.
+//
+//
+class ExtractedTypeDeclEmitter : public CorbaTypeNameEmitter
+{
+public:
+ ExtractedTypeDeclEmitter (Context&);
+
+ virtual void traverse (Boolean&);
+ virtual void traverse (Octet&);
+ virtual void traverse (Char&);
+ virtual void traverse (Wchar&);
+ virtual void traverse (Short&);
+ virtual void traverse (UnsignedShort&);
+ virtual void traverse (Long&);
+ virtual void traverse (UnsignedLong&);
+ virtual void traverse (LongLong&);
+ virtual void traverse (UnsignedLongLong&);
+ virtual void traverse (Float&);
+ virtual void traverse (Double&);
+ virtual void traverse (String&);
+ virtual void traverse (SemanticGraph::BoundedString&);
+ virtual void traverse (Wstring&);
+ virtual void traverse (SemanticGraph::BoundedWideString&);
+ virtual void traverse (Object&);
+ virtual void traverse (ValueBase&);
+ virtual void traverse (Any&);
+ virtual void traverse (SemanticGraph::Array&);
+ virtual void traverse (SemanticGraph::Enum&);
+ virtual void traverse (SemanticGraph::Struct&);
+ virtual void traverse (SemanticGraph::Union&);
+ virtual void traverse (SemanticGraph::BoundedSequence&);
+ virtual void traverse (SemanticGraph::UnboundedSequence&);
+ virtual void traverse (SemanticGraph::Interface&);
+ virtual void traverse (SemanticGraph::ValueType&);
+ virtual void traverse (SemanticGraph::EventType&);
+ virtual void traverse (SemanticGraph::Component&);
+ virtual void traverse (SemanticGraph::Home&);
+};
+
+// Declares and initializes a variable to use for any extraction.
+//
+//
+class AssignFromExtractedEmitter : public CorbaTypeNameEmitter
+{
+public:
+ AssignFromExtractedEmitter (Context&);
+
+ virtual void traverse (Boolean&);
+ virtual void traverse (Octet&);
+ virtual void traverse (Char&);
+ virtual void traverse (Wchar&);
+ virtual void traverse (Short&);
+ virtual void traverse (UnsignedShort&);
+ virtual void traverse (Long&);
+ virtual void traverse (UnsignedLong&);
+ virtual void traverse (LongLong&);
+ virtual void traverse (UnsignedLongLong&);
+ virtual void traverse (Float&);
+ virtual void traverse (Double&);
+ virtual void traverse (String&);
+ virtual void traverse (SemanticGraph::BoundedString&);
+ virtual void traverse (Wstring&);
+ virtual void traverse (SemanticGraph::BoundedWideString&);
+ virtual void traverse (Object&);
+ virtual void traverse (ValueBase&);
+ virtual void traverse (Any&);
+ virtual void traverse (SemanticGraph::Array&);
+ virtual void traverse (SemanticGraph::Enum&);
+ virtual void traverse (SemanticGraph::Struct&);
+ virtual void traverse (SemanticGraph::Union&);
+ virtual void traverse (SemanticGraph::BoundedSequence&);
+ virtual void traverse (SemanticGraph::UnboundedSequence&);
+ virtual void traverse (SemanticGraph::Interface&);
+ virtual void traverse (SemanticGraph::ValueType&);
+ virtual void traverse (SemanticGraph::EventType&);
+ virtual void traverse (SemanticGraph::Component&);
+ virtual void traverse (SemanticGraph::Home&);
+};
+
+class SetAttributeDelegationEmitter : public CorbaTypeNameEmitter,
+ public Traversal::ReadWriteAttribute
+{
+public:
+ SetAttributeDelegationEmitter (Context&,
+ SemanticGraph::ReadWriteAttribute&);
+
+ virtual void traverse (Boolean&);
+ virtual void traverse (Octet&);
+ virtual void traverse (Char&);
+ virtual void traverse (Wchar&);
+ virtual void traverse (Short&);
+ virtual void traverse (UnsignedShort&);
+ virtual void traverse (Long&);
+ virtual void traverse (UnsignedLong&);
+ virtual void traverse (LongLong&);
+ virtual void traverse (UnsignedLongLong&);
+ virtual void traverse (Float&);
+ virtual void traverse (Double&);
+ virtual void traverse (String&);
+ virtual void traverse (SemanticGraph::BoundedString&);
+ virtual void traverse (Wstring&);
+ virtual void traverse (SemanticGraph::BoundedWideString&);
+ virtual void traverse (Object&);
+ virtual void traverse (ValueBase&);
+ virtual void traverse (Any&);
+ virtual void traverse (SemanticGraph::Array&);
+ virtual void traverse (SemanticGraph::Enum&);
+ virtual void traverse (SemanticGraph::Struct&);
+ virtual void traverse (SemanticGraph::Union&);
+ virtual void traverse (SemanticGraph::BoundedSequence&);
+ virtual void traverse (SemanticGraph::UnboundedSequence&);
+ virtual void traverse (SemanticGraph::Interface&);
+ virtual void traverse (SemanticGraph::ValueType&);
+ virtual void traverse (SemanticGraph::EventType&);
+ virtual void traverse (SemanticGraph::Component&);
+ virtual void traverse (SemanticGraph::Home&);
+
+private:
+ void emit_delegation (void);
+ void emit_error (const char *);
+ void open_if_block (void);
+ void close_if_block (void);
+
+private:
+ SemanticGraph::ReadWriteAttribute& attr_;
+ AssignFromExtractedEmitter assign_emitter_;
+ ExtractedTypeDeclEmitter extract_emitter_;
+ Traversal::Belongs assign_belongs_;
+ Traversal::Belongs extract_belongs_;
+};
+
+#endif /* TYPENAME_EMITTER_HPP */
diff --git a/TAO/CIAO/CIDLC/DescriptorGenerator.cpp b/TAO/CIAO/CIDLC/DescriptorGenerator.cpp
index 7b5b41933c2..e93896c91d7 100644
--- a/TAO/CIAO/CIDLC/DescriptorGenerator.cpp
+++ b/TAO/CIAO/CIDLC/DescriptorGenerator.cpp
@@ -285,9 +285,9 @@ namespace
<< "</publishes>" << endl;
}
- struct TypeNameEmitter : Traversal::Type, EmitterBase
+ struct FullTypeNameEmitter : Traversal::Type, EmitterBase
{
- TypeNameEmitter (fs::ofstream& ofs)
+ FullTypeNameEmitter (fs::ofstream& ofs)
: EmitterBase (ofs)
{}
@@ -301,7 +301,7 @@ namespace
};
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
unsigned long facettag_;
Traversal::Belongs belongs_;
};
diff --git a/TAO/CIAO/CIDLC/EmitterBase.cpp b/TAO/CIAO/CIDLC/EmitterBase.cpp
new file mode 100644
index 00000000000..418db97852a
--- /dev/null
+++ b/TAO/CIAO/CIDLC/EmitterBase.cpp
@@ -0,0 +1,11 @@
+// file : CIDLC/EmitterBase.cpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "EmitterBase.hpp"
+
+EmitterBase::EmitterBase (Context& c)
+ : ctx (c),
+ os (ctx.os ())
+{
+}
diff --git a/TAO/CIAO/CIDLC/EmitterBase.hpp b/TAO/CIAO/CIDLC/EmitterBase.hpp
new file mode 100644
index 00000000000..407eee8d0e0
--- /dev/null
+++ b/TAO/CIAO/CIDLC/EmitterBase.hpp
@@ -0,0 +1,20 @@
+// file : CIDLC/EmitterBase.hpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef EMITTERBASE_HPP
+#define EMITTERBASE_HPP
+
+#include "EmitterContext.hpp"
+
+class EmitterBase
+{
+public:
+ EmitterBase (Context&);
+
+protected:
+ Context& ctx;
+ ostream& os;
+};
+
+#endif // EMITTERBASE_HPP
diff --git a/TAO/CIAO/CIDLC/EmitterContext.cpp b/TAO/CIAO/CIDLC/EmitterContext.cpp
new file mode 100644
index 00000000000..478ae5d0027
--- /dev/null
+++ b/TAO/CIAO/CIDLC/EmitterContext.cpp
@@ -0,0 +1,45 @@
+// file : CIDLC/EmitterContext.cpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "EmitterContext.hpp"
+
+Context::Context (ostream& os,
+ string export_macro,
+ CommandLine const& cl)
+ : os_ (os),
+ export_macro_ (export_macro),
+ cl_ (cl)
+{
+}
+
+ostream&
+Context::os (void)
+{
+ return os_;
+}
+
+string
+Context::export_macro (void)
+{
+ return export_macro_;
+}
+
+CommandLine const&
+Context::cl (void)
+{
+ return cl_;
+}
+
+string
+Context::composition_name (void)
+{
+ return composition_name_;
+}
+
+void
+Context::composition_name (const string& name)
+{
+ composition_name_ = name;
+}
+
diff --git a/TAO/CIAO/CIDLC/EmitterContext.hpp b/TAO/CIAO/CIDLC/EmitterContext.hpp
new file mode 100644
index 00000000000..bec5e74f91d
--- /dev/null
+++ b/TAO/CIAO/CIDLC/EmitterContext.hpp
@@ -0,0 +1,35 @@
+// file : CIDLC/EmitterContext.hpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef EMITTERCONTEXT_HPP
+#define EMITTERCONTEXT_HPP
+
+#include "CCF/CodeGenerationKit/CommandLine.hpp"
+
+#include <ostream>
+#include <string>
+
+using namespace std;
+
+class Context
+{
+public:
+ Context (ostream& os,
+ string export_macro,
+ CommandLine const& cl);
+
+ ostream& os (void);
+ string export_macro (void);
+ CommandLine const& cl (void);
+ string composition_name (void);
+ void composition_name (const string& name);
+
+private:
+ ostream& os_;
+ string export_macro_;
+ CommandLine const& cl_;
+ string composition_name_;
+};
+
+#endif // EMITTERCONTEXT_HPP
diff --git a/TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp b/TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp
index 66d1d4abcd2..30c6ae09566 100644
--- a/TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp
+++ b/TAO/CIAO/CIDLC/ExecImplHeaderGenerator.cpp
@@ -3,8 +3,16 @@
// cvs-id : $Id$
#include "ExecImplHeaderGenerator.hpp"
-#include "TypeNameEmitter.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 "Literals.hpp"
+#include "Upcase.hpp"
#include <ostream>
@@ -18,351 +26,6 @@ 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
{
@@ -378,9 +41,9 @@ namespace
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);"
@@ -395,10 +58,8 @@ namespace
interface_emitter.edge_traverser (defines_);
interface_emitter.edge_traverser (inherits_);
- AttributeEmitter attribute_emitter (ctx);
- ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx);
+ AttributeHeaderEmitter attribute_emitter (ctx);
defines_.node_traverser (attribute_emitter);
- defines_.node_traverser (read_only_attribute_emitter);
OperationEmitter operation_emitter (ctx);
defines_.node_traverser (operation_emitter);
@@ -411,15 +72,15 @@ namespace
operation_emitter.edge_traverser (returns);
operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ ParameterEmitter<Traversal::InParameter> in_param (ctx);
+ ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
+ ParameterEmitter<Traversal::OutParameter> out_param (ctx);
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -428,9 +89,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -451,9 +112,9 @@ namespace
{
ExecPortsEmitter (Context& c)
: EmitterBase (c),
- enclosing_type_name_emitter_ (c.os ()),
- simple_type_name_emitter_ (c.os ()),
- type_name_emitter_ (c.os ())
+ enclosing_type_name_emitter_ (c),
+ simple_type_name_emitter_ (c),
+ type_name_emitter_ (c)
{
enclosing_belongs_.node_traverser (enclosing_type_name_emitter_);
simple_belongs_.node_traverser (simple_type_name_emitter_);
@@ -472,31 +133,28 @@ namespace
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_;
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
Traversal::Belongs enclosing_belongs_;
Traversal::Belongs simple_belongs_;
Traversal::Belongs belongs_;
@@ -538,8 +196,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);"
@@ -564,10 +222,8 @@ namespace
interface_emitter.edge_traverser (defines);
interface_emitter.edge_traverser (interface_inherits);
- AttributeEmitter attribute_emitter (ctx);
- ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx);
+ AttributeHeaderEmitter attribute_emitter (ctx);
defines.node_traverser (attribute_emitter);
- defines.node_traverser (read_only_attribute_emitter);
OperationEmitter operation_emitter (ctx);
defines.node_traverser (operation_emitter);
@@ -580,15 +236,15 @@ namespace
operation_emitter.edge_traverser (returns);
operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ ParameterEmitter<Traversal::InParameter> in_param (ctx);
+ ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
+ ParameterEmitter<Traversal::OutParameter> out_param (ctx);
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -597,9 +253,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -620,10 +276,8 @@ namespace
Traversal::Defines defines;
component_emitter.edge_traverser (defines);
- AttributeEmitter attribute_emitter (ctx);
- ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx);
+ AttributeHeaderEmitter attribute_emitter (ctx);
defines.node_traverser (attribute_emitter);
- defines.node_traverser (read_only_attribute_emitter);
component_emitter.traverse (t);
}
@@ -727,185 +381,6 @@ namespace
}
};
- // 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
{
HomeExecImplEmitter (Context& c, HomeExecutor& exec)
@@ -919,8 +394,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);"
@@ -945,10 +420,8 @@ namespace
interface_emitter.edge_traverser (defines);
interface_emitter.edge_traverser (interface_inherits);
- AttributeEmitter attribute_emitter (ctx);
- ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx);
+ AttributeHeaderEmitter attribute_emitter (ctx);
defines.node_traverser (attribute_emitter);
- defines.node_traverser (read_only_attribute_emitter);
OperationEmitter operation_emitter (ctx);
defines.node_traverser (operation_emitter);
@@ -961,15 +434,15 @@ namespace
operation_emitter.edge_traverser (returns);
operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ ParameterEmitter<Traversal::InParameter> in_param (ctx);
+ ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
+ ParameterEmitter<Traversal::OutParameter> out_param (ctx);
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -978,9 +451,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -1010,15 +483,15 @@ namespace
home_operation_emitter.edge_traverser (returns);
home_operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ ParameterEmitter<Traversal::InParameter> in_param (ctx);
+ ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
+ ParameterEmitter<Traversal::OutParameter> out_param (ctx);
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -1027,9 +500,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -1052,8 +525,9 @@ namespace
Traversal::Defines defines;
home_emitter.edge_traverser (defines);
- FactoryOperationEmitter factory_operation_emitter (ctx);
- FinderOperationEmitter finder_operation_emitter (ctx);
+ bool for_exec = true;
+ FactoryOperationEmitter factory_operation_emitter (ctx, for_exec);
+ FinderOperationEmitter finder_operation_emitter (ctx, for_exec);
defines.node_traverser (factory_operation_emitter);
defines.node_traverser (finder_operation_emitter);
@@ -1067,15 +541,15 @@ namespace
finder_operation_emitter.edge_traverser (returns);
finder_operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ ParameterEmitter<Traversal::InParameter> in_param (ctx);
+ ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
+ ParameterEmitter<Traversal::OutParameter> out_param (ctx);
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -1084,9 +558,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -1107,10 +581,8 @@ namespace
Traversal::Defines defines;
home_emitter.edge_traverser (defines);
- AttributeEmitter attribute_emitter (ctx);
- ReadOnlyAttributeEmitter read_only_attribute_emitter (ctx);
+ AttributeHeaderEmitter attribute_emitter (ctx);
defines.node_traverser (attribute_emitter);
- defines.node_traverser (read_only_attribute_emitter);
home_emitter.traverse (t);
}
@@ -1248,7 +720,7 @@ ExecImplHeaderEmitter::generate (TranslationUnit& u)
{
pre (u);
- Context c (os, export_macro_);
+ Context c (os, export_macro_, cl_);
Traversal::TranslationUnit unit;
diff --git a/TAO/CIAO/CIDLC/ExecImplSourceGenerator.cpp b/TAO/CIAO/CIDLC/ExecImplSourceGenerator.cpp
index 5bbd50fb84b..34bb6866061 100644
--- a/TAO/CIAO/CIDLC/ExecImplSourceGenerator.cpp
+++ b/TAO/CIAO/CIDLC/ExecImplSourceGenerator.cpp
@@ -3,100 +3,25 @@
// 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 "TypeNameEmitter.hpp"
-
-#include "CCF/CodeGenerationKit/Regex.hpp"
#include <ostream>
+#include "CCF/CodeGenerationKit/Regex.hpp"
+
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
{
@@ -134,7 +59,7 @@ namespace
virtual void
raises_pre (Type&)
{
- os << STRS[EXCP_START] << endl
+ os << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl;
}
@@ -161,7 +86,7 @@ namespace
Traversal::Belongs returns;
operation_emitter.edge_traverser (returns);
- NullReturnEmitter return_emitter (os);
+ NullReturnEmitter return_emitter (ctx);
returns.node_traverser (return_emitter);
operation_emitter.traverse (o);
@@ -179,222 +104,6 @@ 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
{
@@ -431,10 +140,13 @@ namespace
interface_emitter.edge_traverser (defines_);
interface_emitter.edge_traverser (inherits_);
- AttributeEmitter<UnconstrainedInterface> attribute_emitter (ctx, i);
- ReadOnlyAttributeEmitter<UnconstrainedInterface> read_only_attribute_emitter (ctx, i);
+ bool exec_src = true;
+ AttributeSourceEmitter<UnconstrainedInterface> attribute_emitter (
+ ctx,
+ i,
+ exec_src
+ );
defines_.node_traverser (attribute_emitter);
- defines_.node_traverser (read_only_attribute_emitter);
OperationEmitter<UnconstrainedInterface> operation_emitter (ctx, i);
defines_.node_traverser (operation_emitter);
@@ -447,15 +159,25 @@ namespace
operation_emitter.edge_traverser (returns);
operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ 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
+ );
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -464,9 +186,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -485,9 +207,9 @@ namespace
{
ExecPortsEmitter (Context& c, SemanticGraph::Component& scope)
: EmitterBase (c),
- enclosing_type_name_emitter_ (c.os ()),
- simple_type_name_emitter_ (c.os ()),
- type_name_emitter_ (c.os ()),
+ enclosing_type_name_emitter_ (c),
+ simple_type_name_emitter_ (c),
+ type_name_emitter_ (c),
scope_ (scope)
{
enclosing_belongs_.node_traverser (enclosing_type_name_emitter_);
@@ -526,9 +248,6 @@ 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_"
<< c.name () << " (" << endl;
@@ -546,7 +265,7 @@ namespace
private:
EnclosingTypeNameEmitter enclosing_type_name_emitter_;
SimpleTypeNameEmitter simple_type_name_emitter_;
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
Traversal::Belongs enclosing_belongs_;
Traversal::Belongs simple_belongs_;
Traversal::Belongs belongs_;
@@ -619,10 +338,13 @@ namespace
interface_emitter.edge_traverser (defines);
interface_emitter.edge_traverser (interface_inherits);
- AttributeEmitter<SemanticGraph::Component> attribute_emitter (ctx, t);
- ReadOnlyAttributeEmitter<SemanticGraph::Component> read_only_attribute_emitter (ctx, t);
+ bool exec_src = true;
+ AttributeSourceEmitter<SemanticGraph::Component> attribute_emitter (
+ ctx,
+ t,
+ exec_src
+ );
defines.node_traverser (attribute_emitter);
- defines.node_traverser (read_only_attribute_emitter);
OperationEmitter<SemanticGraph::Component> operation_emitter (ctx, t);
defines.node_traverser (operation_emitter);
@@ -635,15 +357,25 @@ namespace
operation_emitter.edge_traverser (returns);
operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ 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
+ );
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -652,9 +384,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -675,10 +407,13 @@ namespace
Traversal::Defines defines;
component_emitter.edge_traverser (defines);
- AttributeEmitter<SemanticGraph::Component> attribute_emitter (ctx, t);
- ReadOnlyAttributeEmitter<SemanticGraph::Component> read_only_attribute_emitter (ctx, t);
+ bool exec_src = true;
+ AttributeSourceEmitter<SemanticGraph::Component> attribute_emitter (
+ ctx,
+ t,
+ exec_src
+ );
defines.node_traverser (attribute_emitter);
- defines.node_traverser (read_only_attribute_emitter);
component_emitter.traverse (t);
}
@@ -708,26 +443,26 @@ namespace
<< t.name () << "_exec_i::set_session_context (" << endl
<< STRS[COMP_SC] << "_ptr ctx" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< 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] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_CE] << "))" << endl
<< "{"
@@ -737,7 +472,7 @@ namespace
os << "void" << endl
<< t.name () << "_exec_i::ciao_postactivate (" << endl
<< STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_CE] << "))" << endl
<< "{"
@@ -747,7 +482,7 @@ namespace
os << "void" << endl
<< t.name () << "_exec_i::ccm_activate (" << endl
<< STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_CE] << "))" << endl
<< "{"
@@ -757,7 +492,7 @@ namespace
os << "void" << endl
<< t.name () << "_exec_i::ccm_passivate (" << endl
<< STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_CE] << "))" << endl
<< "{"
@@ -767,7 +502,7 @@ namespace
os << "void" << endl
<< t.name () << "_exec_i::ccm_remove (" << endl
<< STRS[ENV_SNGL_SRC_NOTUSED] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_CE] << "))" << endl
<< "{"
@@ -812,8 +547,8 @@ namespace
{
FactoryOperationEmitter (Context& c, SemanticGraph::Home& scope)
: EmitterBase (c),
- enclosing_type_name_emitter_ (c.os ()),
- simple_type_name_emitter_ (c.os ()),
+ enclosing_type_name_emitter_ (c),
+ simple_type_name_emitter_ (c),
scope_ (scope)
{
enclosing_returns_.node_traverser (enclosing_type_name_emitter_);
@@ -860,7 +595,7 @@ namespace
virtual void
raises_pre (SemanticGraph::HomeFactory&)
{
- os << STRS[EXCP_START] << endl
+ os << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl;
}
@@ -906,8 +641,8 @@ namespace
{
FinderOperationEmitter (Context& c, SemanticGraph::Home& scope)
: EmitterBase (c),
- enclosing_type_name_emitter_ (c.os ()),
- simple_type_name_emitter_ (c.os ()),
+ enclosing_type_name_emitter_ (c),
+ simple_type_name_emitter_ (c),
scope_ (scope)
{
enclosing_returns_.node_traverser (enclosing_type_name_emitter_);
@@ -954,7 +689,7 @@ namespace
virtual void
raises_pre (SemanticGraph::HomeFinder&)
{
- os << STRS[EXCP_START] << endl
+ os << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl;
}
@@ -1038,10 +773,13 @@ namespace
interface_emitter.edge_traverser (defines);
interface_emitter.edge_traverser (interface_inherits);
- AttributeEmitter<SemanticGraph::Home> attribute_emitter (ctx, t);
- ReadOnlyAttributeEmitter<SemanticGraph::Home> read_only_attribute_emitter (ctx, t);
+ bool exec_src = true;
+ AttributeSourceEmitter<SemanticGraph::Home> attribute_emitter (
+ ctx,
+ t,
+ exec_src
+ );
defines.node_traverser (attribute_emitter);
- defines.node_traverser (read_only_attribute_emitter);
OperationEmitter<SemanticGraph::Home> operation_emitter (ctx, t);
defines.node_traverser (operation_emitter);
@@ -1054,15 +792,25 @@ namespace
operation_emitter.edge_traverser (returns);
operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ 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
+ );
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -1071,9 +819,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -1103,15 +851,25 @@ namespace
home_operation_emitter.edge_traverser (returns);
home_operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ 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
+ );
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -1120,9 +878,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -1160,15 +918,25 @@ namespace
finder_operation_emitter.edge_traverser (returns);
finder_operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ 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
+ );
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -1177,9 +945,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -1200,10 +968,13 @@ namespace
Traversal::Defines defines;
home_emitter.edge_traverser (defines);
- AttributeEmitter<SemanticGraph::Home> attribute_emitter (ctx, t);
- ReadOnlyAttributeEmitter<SemanticGraph::Home> read_only_attribute_emitter (ctx, t);
+ bool exec_src = true;
+ AttributeSourceEmitter<SemanticGraph::Home> attribute_emitter (
+ ctx,
+ t,
+ exec_src
+ );
defines.node_traverser (attribute_emitter);
- defines.node_traverser (read_only_attribute_emitter);
home_emitter.traverse (t);
}
@@ -1212,12 +983,12 @@ namespace
<< STRS[COMP_EC] << "_ptr" << endl
<< t.name () << "_exec_i::create (" << endl
<< STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< 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;
@@ -1226,13 +997,13 @@ namespace
Traversal::Manages manages_;
home_emitter.edge_traverser (manages_);
- SimpleTypeNameEmitter manages_emitter (os);
+ SimpleTypeNameEmitter manages_emitter (ctx);
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;"
@@ -1249,7 +1020,7 @@ namespace
<< "_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
@@ -1299,7 +1070,7 @@ ExecImplSourceEmitter::generate (TranslationUnit& u)
{
pre (u);
- Context c (os, export_macro_);
+ Context c (os, export_macro_, cl_);
Traversal::TranslationUnit unit;
diff --git a/TAO/CIAO/CIDLC/ExecutorMappingGenerator.cpp b/TAO/CIAO/CIDLC/ExecutorMappingGenerator.cpp
index 46106c5572a..ca62ef3d3a2 100644
--- a/TAO/CIAO/CIDLC/ExecutorMappingGenerator.cpp
+++ b/TAO/CIAO/CIDLC/ExecutorMappingGenerator.cpp
@@ -290,11 +290,11 @@ namespace
//
//
//
- struct TypeNameEmitter : Traversal::FundamentalType,
+ struct FullTypeNameEmitter : Traversal::FundamentalType,
Traversal::Type,
Emitter
{
- TypeNameEmitter (Context& c, ostream& os)
+ FullTypeNameEmitter (Context& c, ostream& os)
: Emitter (c, os)
{
}
@@ -462,7 +462,7 @@ namespace
private:
Traversal::GetRaises get_raises_;
Traversal::SetRaises set_raises_;
- TypeNameEmitter type_name_;
+ FullTypeNameEmitter type_name_;
};
@@ -634,7 +634,7 @@ namespace
Traversal::Belongs belongs;
Traversal::Belongs provider_belongs;
- TypeNameEmitter type_name_emitter;
+ FullTypeNameEmitter type_name_emitter;
};
@@ -2046,7 +2046,7 @@ generate (CommandLine const& cl,
home_explicit.edge_traverser (home_explicit_defines);
//--
- TypeNameEmitter type (ctx, os);
+ FullTypeNameEmitter type (ctx, os);
ComponentContextEmitter session_component_context (ctx, os);
ComponentExecutorEmitter session_component_executor (ctx, os);
diff --git a/TAO/CIAO/CIDLC/InterfaceEmitter.cpp b/TAO/CIAO/CIDLC/InterfaceEmitter.cpp
new file mode 100644
index 00000000000..1ce524cdfab
--- /dev/null
+++ b/TAO/CIAO/CIDLC/InterfaceEmitter.cpp
@@ -0,0 +1,26 @@
+// file : CIDLC/InterfaceEmitter.cpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "InterfaceEmitter.hpp"
+
+InterfaceEmitter::InterfaceEmitter (Context& c)
+ : EmitterBase (c)
+{
+}
+
+void
+InterfaceEmitter::traverse (UnconstrainedInterface& i)
+{
+ if (add (i))
+ {
+ Traversal::UnconstrainedInterface::traverse (i);
+ }
+}
+
+bool
+InterfaceEmitter::add (UnconstrainedInterface& i)
+{
+ return interfaces_.insert (&i).second;
+}
+
diff --git a/TAO/CIAO/CIDLC/InterfaceEmitter.hpp b/TAO/CIAO/CIDLC/InterfaceEmitter.hpp
new file mode 100644
index 00000000000..fdd2411f912
--- /dev/null
+++ b/TAO/CIAO/CIDLC/InterfaceEmitter.hpp
@@ -0,0 +1,30 @@
+// file : CIDLC/InterfaceEmitter.hpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef INTERFACEEMITTER_HPP
+#define INTERFACEEMITTER_HPP
+
+#include "CCF/CIDL/SemanticGraph.hpp"
+#include "CCF/CIDL/Traversal.hpp"
+
+#include "EmitterBase.hpp"
+
+using namespace CCF::CIDL;
+using namespace CCF::CIDL::SemanticGraph;
+
+struct InterfaceEmitter : Traversal::UnconstrainedInterface,
+ EmitterBase
+{
+ InterfaceEmitter (Context& c);
+
+ virtual void traverse (UnconstrainedInterface&);
+
+private:
+ bool add (UnconstrainedInterface&);
+
+private:
+ std::set<UnconstrainedInterface*> interfaces_;
+};
+
+#endif // INTERFACEEMITTER_HPP
diff --git a/TAO/CIAO/CIDLC/Literals.cpp b/TAO/CIAO/CIDLC/Literals.cpp
index af9a3d5e809..3552c06ace6 100644
--- a/TAO/CIAO/CIDLC/Literals.cpp
+++ b/TAO/CIAO/CIDLC/Literals.cpp
@@ -41,9 +41,10 @@ namespace StringLiterals
"ACE_ENV_SINGLE_ARG_PARAMETER", // ENV_SNGL_ARG
// Common CORBA and all Components exceptions.
- "ACE_THROW_SPEC ((CORBA::SystemException))", // EXCP_SNGL
+ "ACE_THROW_SPEC (( ::CORBA::SystemException))", // EXCP_SNGL
"ACE_THROW_SPEC ((", // EXCP_START
"::CORBA::SystemException", // EXCP_SYS
+ "::CORBA::BAD_PARAM ()", // EXCP_BP
"::Components::IllegalState", // EXCP_IS
"::Components::AlreadyConnected", // EXCP_AC
"::Components::InvalidConnection", // EXCP_IC
@@ -64,6 +65,9 @@ namespace StringLiterals
"::Components::EnterpriseComponent", // COMP_EC
"::Components::SessionContext", // COMP_SC
"::Components::ConsumerDescriptions", // COMP_CD
+ "::Components::ReceptacleDescriptions", // COMP_RD
+ "::Components::PublisherDescriptions", // COMP_PD
+ "::Components::EmitterDescriptions", // COMP_ED
// This could change - don't want it scattered all over.
"namespace CIDL_", // CIDL_NS
@@ -79,9 +83,11 @@ namespace StringLiterals
"variable-size", // VAR_SIZE
"_ciao_extract_val", // EXTRACT
"_ciao_extract_tmp", // EXTRACT_TMP
- "ACE_UNUSED_ARG", // ACE_UA
- "ACE_CHECK_RETURN", // ACE_CR
- "ACE_THROW_RETURN" // ACE_TR
+ "ACE_UNUSED_ARG", // ACE_UA
+ "ACE_CHECK", // ACE_CK
+ "ACE_CHECK_RETURN", // ACE_CR
+ "ACE_THROW", // ACE_TH
+ "ACE_THROW_RETURN" // ACE_TR
};
}
diff --git a/TAO/CIAO/CIDLC/Literals.hpp b/TAO/CIAO/CIDLC/Literals.hpp
index 84f70e1a4c2..920524a6dbf 100644
--- a/TAO/CIAO/CIDLC/Literals.hpp
+++ b/TAO/CIAO/CIDLC/Literals.hpp
@@ -23,6 +23,7 @@ namespace StringLiterals
EXCP_SNGL,
EXCP_START,
EXCP_SYS,
+ EXCP_BP,
EXCP_IS,
EXCP_AC,
EXCP_IC,
@@ -41,6 +42,9 @@ namespace StringLiterals
COMP_EC,
COMP_SC,
COMP_CD,
+ COMP_RD,
+ COMP_PD,
+ COMP_ED,
CIDL_NS,
TYPE_ID,
TYPE_PREFIX,
@@ -50,9 +54,11 @@ namespace StringLiterals
VAR_SIZE,
EXTRACT,
EXTRACT_TMP,
- ACE_UA,
- ACE_CR,
- ACE_TR,
+ ACE_UA,
+ ACE_CK,
+ ACE_CR,
+ ACE_TH,
+ ACE_TR,
SIZE
};
diff --git a/TAO/CIAO/CIDLC/ModuleEmitter.cpp b/TAO/CIAO/CIDLC/ModuleEmitter.cpp
new file mode 100644
index 00000000000..990d95ef4b8
--- /dev/null
+++ b/TAO/CIAO/CIDLC/ModuleEmitter.cpp
@@ -0,0 +1,22 @@
+// file : CIDLC/ModuleEmitter.cpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "ModuleEmitter.hpp"
+
+ModuleEmitter::ModuleEmitter (Context& c)
+ : EmitterBase (c)
+{
+}
+
+void
+ModuleEmitter::pre (Type& t)
+{
+ os << "namespace " << t.name () << "{";
+}
+
+void
+ModuleEmitter::post (Type&)
+{
+ os << "}";
+}
diff --git a/TAO/CIAO/CIDLC/ModuleEmitter.hpp b/TAO/CIAO/CIDLC/ModuleEmitter.hpp
new file mode 100644
index 00000000000..9aa8de2f9ff
--- /dev/null
+++ b/TAO/CIAO/CIDLC/ModuleEmitter.hpp
@@ -0,0 +1,24 @@
+// file : CIDLC/ModuleEmitter.hpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef MODULEEMITTER_HPP
+#define MODULEEMITTER_HPP
+
+#include "CCF/CIDL/SemanticGraph.hpp"
+#include "CCF/CIDL/Traversal.hpp"
+
+#include "EmitterBase.hpp"
+
+using namespace CCF::CIDL;
+using namespace CCF::CIDL::SemanticGraph;
+
+struct ModuleEmitter : Traversal::Module, EmitterBase
+{
+ ModuleEmitter (Context& c);
+
+ virtual void pre (Type&);
+ virtual void post (Type&);
+};
+
+#endif // MODULEEMITTER_HPP
diff --git a/TAO/CIAO/CIDLC/OperationHeaderEmitters.cpp b/TAO/CIAO/CIDLC/OperationHeaderEmitters.cpp
new file mode 100644
index 00000000000..6644e8102e6
--- /dev/null
+++ b/TAO/CIAO/CIDLC/OperationHeaderEmitters.cpp
@@ -0,0 +1,267 @@
+// file : CIDLC/OperationHeaderEmitters.cpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "OperationHeaderEmitters.hpp"
+#include "Literals.hpp"
+
+using namespace StringLiterals;
+
+OperationEmitter::OperationEmitter (Context& c)
+ : EmitterBase (c)
+{
+}
+
+void
+OperationEmitter::pre (Type&)
+{
+ os << "virtual ";
+}
+
+void
+OperationEmitter::name (Type& o)
+{
+ os << endl << o.name ();
+}
+
+void
+OperationEmitter::receives_pre (Type&)
+{
+ os << " (" << endl;
+}
+
+void
+OperationEmitter::receives_none (Type&)
+{
+ os << " (" << endl
+ << STRS[ENV_SNGL_HDR] << ")" << endl;
+}
+
+void
+OperationEmitter::receives_post (Type&)
+{
+ os << endl << STRS[ENV_HDR] << ")" << endl;
+}
+
+void
+OperationEmitter::raises_pre (Type&)
+{
+ os << STRS[EXCP_START] << " "
+ << STRS[EXCP_SYS] << "," << endl;
+}
+
+void
+OperationEmitter::raises_none (Type&)
+{
+ os << STRS[EXCP_SNGL];
+}
+
+void
+OperationEmitter::raises_post (Type&)
+{
+ os << "))";
+}
+
+void
+OperationEmitter::post (Type&)
+{
+ os << ";" << endl;
+}
+
+void
+OperationEmitter::comma (Type&)
+{
+ os << "," << endl;
+}
+
+// ==================================================
+
+HomeOperationEmitter::HomeOperationEmitter (Context& c)
+ : OperationEmitter (c)
+{
+}
+
+void
+HomeOperationEmitter::traverse (SemanticGraph::HomeFactory&)
+{
+}
+
+void
+HomeOperationEmitter::traverse (SemanticGraph::HomeFinder&)
+{
+}
+
+// ==================================================
+
+FactoryOperationEmitter::FactoryOperationEmitter (Context& c, bool for_exec)
+ : EmitterBase (c),
+ returns_emitter_ (c),
+ for_exec_ (for_exec)
+{
+ returns_.node_traverser (returns_emitter_);
+}
+
+void
+FactoryOperationEmitter::pre (SemanticGraph::HomeFactory&)
+{
+ os << "virtual ";
+}
+
+void
+FactoryOperationEmitter::returns (SemanticGraph::HomeFactory& t)
+{
+ if (for_exec_)
+ {
+ os << STRS[COMP_EC] << "_ptr";
+ }
+ else
+ {
+ Traversal::HomeFactory::returns (t, returns_);
+ }
+
+ os << endl;
+}
+
+void
+FactoryOperationEmitter::name (SemanticGraph::HomeFactory& t)
+{
+ os << t.name ();
+}
+
+void
+FactoryOperationEmitter::receives_none (SemanticGraph::HomeFactory&)
+{
+ os << " (" << endl
+ << STRS[ENV_SNGL_HDR] << ")" << endl;
+}
+
+void
+FactoryOperationEmitter::receives_pre (SemanticGraph::HomeFactory&)
+{
+ os << " (" << endl;
+}
+
+void
+FactoryOperationEmitter::receives_post (SemanticGraph::HomeFactory&)
+{
+ os << endl << STRS[ENV_HDR] << ")" << endl;
+}
+
+void
+FactoryOperationEmitter::raises_none (SemanticGraph::HomeFactory&)
+{
+ os << STRS[EXCP_SNGL];
+}
+
+void
+FactoryOperationEmitter::raises_pre (SemanticGraph::HomeFactory&)
+{
+ os << STRS[EXCP_START] << " "
+ << STRS[EXCP_SYS] << "," << endl;
+}
+
+void
+FactoryOperationEmitter::raises_post (SemanticGraph::HomeFactory&)
+{
+ os << "))";
+}
+
+void
+FactoryOperationEmitter::post (SemanticGraph::HomeFactory&)
+{
+ os << ";" << endl;
+}
+
+void
+FactoryOperationEmitter::comma (SemanticGraph::HomeFactory&)
+{
+ os << "," << endl;
+}
+
+// ==================================================
+
+FinderOperationEmitter::FinderOperationEmitter (Context& c, bool for_exec)
+ : EmitterBase (c),
+ returns_emitter_ (c),
+ for_exec_ (for_exec)
+{
+ returns_.node_traverser (returns_emitter_);
+}
+
+void
+FinderOperationEmitter::pre (SemanticGraph::HomeFinder&)
+{
+ os << "virtual ";
+}
+
+void
+FinderOperationEmitter::returns (SemanticGraph::HomeFinder& t)
+{
+ if (for_exec_)
+ {
+ os << STRS[COMP_EC] << "_ptr";
+ }
+ else
+ {
+ Traversal::HomeFinder::returns (t, returns_);
+ }
+
+ os << endl;
+}
+
+void
+FinderOperationEmitter::name (SemanticGraph::HomeFinder& t)
+{
+ os << t.name ();
+}
+
+void
+FinderOperationEmitter::receives_none (SemanticGraph::HomeFinder&)
+{
+ os << " (" << endl
+ << STRS[ENV_SNGL_HDR] << ")" << endl;
+}
+
+void
+FinderOperationEmitter::receives_pre (SemanticGraph::HomeFinder&)
+{
+ os << " (" << endl;
+}
+
+void
+FinderOperationEmitter::receives_post (SemanticGraph::HomeFinder&)
+{
+ os << endl << STRS[ENV_HDR] << ")" << endl;
+}
+
+void
+FinderOperationEmitter::raises_none (SemanticGraph::HomeFinder&)
+{
+ os << STRS[EXCP_SNGL];
+}
+
+void
+FinderOperationEmitter::raises_pre (SemanticGraph::HomeFinder&)
+{
+ os << STRS[EXCP_START] << " "
+ << STRS[EXCP_SYS] << "," << endl;
+}
+
+void
+FinderOperationEmitter::raises_post (SemanticGraph::HomeFinder&)
+{
+ os << "))";
+}
+
+void
+FinderOperationEmitter::post (SemanticGraph::HomeFinder&)
+{
+ os << ";" << endl;
+}
+
+void
+FinderOperationEmitter::comma (SemanticGraph::HomeFinder&)
+{
+ os << "," << endl;
+}
+
diff --git a/TAO/CIAO/CIDLC/OperationHeaderEmitters.hpp b/TAO/CIAO/CIDLC/OperationHeaderEmitters.hpp
new file mode 100644
index 00000000000..d1fc148e0c3
--- /dev/null
+++ b/TAO/CIAO/CIDLC/OperationHeaderEmitters.hpp
@@ -0,0 +1,151 @@
+// file : CIDLC/OperationHeaderEmitters.hpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef OPERATIONHEADEREMITTERS_HPP
+#define OPERATIONHEADEREMITTERS_HPP
+
+#include "CCF/CIDL/SemanticGraph.hpp"
+#include "CCF/CIDL/Traversal.hpp"
+
+#include "EmitterBase.hpp"
+#include "CorbaTypeNameEmitters.hpp"
+
+using namespace CCF::CIDL;
+using namespace CCF::CIDL::SemanticGraph;
+
+struct OperationEmitter : Traversal::Operation,
+ EmitterBase
+{
+ OperationEmitter (Context& c);
+
+ virtual void pre (Type&);
+
+ virtual void name (Type&);
+
+ virtual void receives_pre (Type&);
+
+ virtual void receives_none (Type&);
+
+ virtual void receives_post (Type&);
+
+ virtual void raises_pre (Type&);
+
+ virtual void raises_none (Type&);
+
+ virtual void raises_post (Type&);
+
+ virtual void post (Type&);
+
+ virtual void comma (Type&);
+};
+
+// 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);
+
+ virtual void
+ traverse (SemanticGraph::HomeFactory&);
+
+ virtual void
+ traverse (SemanticGraph::HomeFinder&);
+};
+
+struct FactoryOperationEmitter : Traversal::HomeFactory,
+ EmitterBase
+{
+ FactoryOperationEmitter (Context& c, bool for_exec = false);
+
+ virtual void
+ pre (SemanticGraph::HomeFactory&);
+
+ virtual void
+ returns (SemanticGraph::HomeFactory&);
+
+ virtual void
+ name (SemanticGraph::HomeFactory&);
+
+ virtual void
+ receives_none (SemanticGraph::HomeFactory&);
+
+ virtual void
+ receives_pre (SemanticGraph::HomeFactory&);
+
+ virtual void
+ receives_post (SemanticGraph::HomeFactory&);
+
+ virtual void
+ raises_none (SemanticGraph::HomeFactory&);
+
+ virtual void
+ raises_pre (SemanticGraph::HomeFactory&);
+
+ virtual void
+ raises_post (SemanticGraph::HomeFactory&);
+
+ virtual void
+ post (SemanticGraph::HomeFactory&);
+
+ virtual void
+ comma (SemanticGraph::HomeFactory&);
+
+private:
+ ReturnTypeNameEmitter returns_emitter_;
+ Traversal::Returns returns_;
+ bool for_exec_;
+};
+
+struct FinderOperationEmitter : Traversal::HomeFinder,
+ EmitterBase
+{
+ FinderOperationEmitter (Context& c, bool for_exec = false);
+
+ virtual void
+ pre (SemanticGraph::HomeFinder&);
+
+ virtual void
+ returns (SemanticGraph::HomeFinder&);
+
+ virtual void
+ name (SemanticGraph::HomeFinder&);
+
+ virtual void
+ receives_none (SemanticGraph::HomeFinder&);
+
+ virtual void
+ receives_pre (SemanticGraph::HomeFinder&);
+
+ virtual void
+ receives_post (SemanticGraph::HomeFinder&);
+
+ virtual void
+ raises_none (SemanticGraph::HomeFinder&);
+
+ virtual void
+ raises_pre (SemanticGraph::HomeFinder&);
+
+ virtual void
+ raises_post (SemanticGraph::HomeFinder&);
+
+ virtual void
+ post (SemanticGraph::HomeFinder&);
+
+ virtual void
+ comma (SemanticGraph::HomeFinder&);
+
+private:
+ ReturnTypeNameEmitter returns_emitter_;
+ Traversal::Returns returns_;
+ bool for_exec_;
+};
+
+#endif // OPERATIONHEADEREMITTERS_HPP
diff --git a/TAO/CIAO/CIDLC/ParameterEmitter_T.hpp b/TAO/CIAO/CIDLC/ParameterEmitter_T.hpp
new file mode 100644
index 00000000000..4fe0d55867f
--- /dev/null
+++ b/TAO/CIAO/CIDLC/ParameterEmitter_T.hpp
@@ -0,0 +1,33 @@
+// file : CIDLC/ParameterEmitter_T.hpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef PARAMETEREMITTER_T_HPP
+#define PARAMETEREMITTER_T_HPP
+
+#include "EmitterBase.hpp"
+
+// For generating parameter names.
+template <typename T>
+struct ParameterEmitter : T, EmitterBase
+{
+ ParameterEmitter (Context& c, bool for_exec_src = false)
+ : EmitterBase (c),
+ for_exec_src_ (for_exec_src)
+ {
+ }
+
+ virtual void
+ name (typename T::Type& p)
+ {
+ os << " "
+ << (for_exec_src_ ? "/* " : "")
+ << p.name ()
+ << (for_exec_src_ ? " */" : "");
+ }
+
+private:
+ bool for_exec_src_;
+};
+
+#endif // PARAMETEREMITTER_T_HPP
diff --git a/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp b/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp
index 8b677954b4c..795fd3dfd5b 100644
--- a/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp
+++ b/TAO/CIAO/CIDLC/ServantHeaderGenerator.cpp
@@ -3,8 +3,16 @@
// cvs-id : $Id$
#include "ServantHeaderGenerator.hpp"
-#include "TypeNameEmitter.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 "Literals.hpp"
+#include "Upcase.hpp"
#include <ostream>
@@ -17,475 +25,8 @@ using namespace StringLiterals;
using namespace CCF::CIDL;
using namespace CCF::CIDL::SemanticGraph;
-using std::string;
-
-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 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 << 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 the set operation of a ReadWriteAttribute.
- struct WriteAttributeEmitter : Traversal::ReadWriteAttribute,
- EmitterBase
- {
- WriteAttributeEmitter (Context& c)
- : EmitterBase (c),
- write_type_name_emitter_ (c.os ()),
- type_name_emitter_ (c.os ())
- {
- write_belongs_.node_traverser (write_type_name_emitter_);
-
- edge_traverser (set_raises_);
- set_raises_.node_traverser (type_name_emitter_);
- }
-
- virtual void
- pre (SemanticGraph::ReadWriteAttribute&)
- {
- os << "virtual void" << endl;
- }
-
- virtual void
- name (SemanticGraph::ReadWriteAttribute& a)
- {
- os << a.name () << " (" << endl;
-
- Traversal::ReadWriteAttribute::belongs (a, write_belongs_);
-
- os << " " << a.name () << endl
- << STRS[ENV_HDR] << ")" << endl;
- }
-
- virtual void
- get_raises (SemanticGraph::ReadWriteAttribute&)
- {
- }
-
- virtual void
- set_raises_none (SemanticGraph::ReadWriteAttribute&)
- {
- os << STRS[EXCP_SNGL];
- }
-
- virtual void
- set_raises_pre (SemanticGraph::ReadWriteAttribute&)
- {
- os << STRS[EXCP_START] << endl
- << STRS[EXCP_SYS] << "," << endl;
- }
-
- virtual void
- set_raises_post (SemanticGraph::ReadWriteAttribute&)
- {
- os << "))";
- }
-
- virtual void
- post (SemanticGraph::ReadWriteAttribute&)
- {
- os << ";" << endl << endl;
- }
-
- virtual void
- comma (SemanticGraph::ReadWriteAttribute&)
- {
- os << "," << endl;
- }
-
- private:
- INArgTypeNameEmitter write_type_name_emitter_;
- TypeNameEmitter type_name_emitter_;
- Traversal::Belongs write_belongs_;
- Traversal::SetRaises set_raises_;
- };
-
- // Generates operations associated with attributes.
- struct AttributeEmitter : Traversal::ReadAttribute,
- Traversal::ReadWriteAttribute,
- EmitterBase
- {
- AttributeEmitter (Context& c)
- : EmitterBase (c),
- read_type_name_emitter_ (c.os ()),
- type_name_emitter_ (c.os ())
- {
- read_belongs_.node_traverser (read_type_name_emitter_);
-
- edge_traverser (get_raises_);
- get_raises_.node_traverser (type_name_emitter_);
- }
-
- // ReadWriteAttribute
- //
- virtual void
- pre (SemanticGraph::ReadWriteAttribute& a)
- {
- os << "virtual ";
-
- Traversal::ReadWriteAttribute::belongs (a, read_belongs_);
-
- os << endl;
- }
-
- virtual void
- name (SemanticGraph::ReadWriteAttribute& a)
- {
- os << a.name () << " (" << endl
- << STRS[ENV_SNGL_HDR] << ")" << endl;
- }
-
- virtual void
- get_raises_none (SemanticGraph::ReadWriteAttribute&)
- {
- os << STRS[EXCP_SNGL];
- }
-
- virtual void
- get_raises_pre (SemanticGraph::ReadWriteAttribute&)
- {
- os << STRS[EXCP_START] << endl
- << STRS[EXCP_SYS] << "," << endl;
- }
-
- virtual void
- get_raises_post (SemanticGraph::ReadWriteAttribute&)
- {
- os << "))";
- }
-
- virtual void
- set_raises (SemanticGraph::ReadWriteAttribute&)
- {
- }
-
- virtual void
- post (SemanticGraph::ReadWriteAttribute& a)
- {
- os << ";" << endl << endl;
-
- WriteAttributeEmitter write_attribute_emitter (ctx);
- write_attribute_emitter.traverse (a);
- }
-
- virtual void
- comma (SemanticGraph::ReadWriteAttribute&)
- {
- os << "," << endl;
- }
-
- // ReadAttribute
- //
- virtual void
- pre (SemanticGraph::ReadAttribute& a)
- {
- os << "virtual ";
-
- Traversal::ReadAttribute::belongs (a, read_belongs_);
-
- os << endl;
- }
-
- virtual void
- name (SemanticGraph::ReadAttribute& a)
- {
- os << a.name () << " (" << endl
- << STRS[ENV_SNGL_HDR] << ")" << endl;
- }
-
- virtual void
- get_raises_none (SemanticGraph::ReadAttribute&)
- {
- os << STRS[EXCP_SNGL];
- }
-
- virtual void
- get_raises_pre (SemanticGraph::ReadAttribute&)
- {
- os << STRS[EXCP_START] << endl
- << STRS[EXCP_SYS] << "," << endl;
- }
-
- virtual void
- get_raises_post (SemanticGraph::ReadAttribute&)
- {
- os << "))";
- }
-
- virtual void
- set_raises (SemanticGraph::ReadAttribute&)
- {
- }
-
- virtual void
- post (SemanticGraph::ReadAttribute&)
- {
- os << ";" << endl << endl;
- }
-
- virtual void
- comma (SemanticGraph::ReadAttribute&)
- {
- os << "," << endl;
- }
-
- private:
- ReturnTypeNameEmitter read_type_name_emitter_;
- TypeNameEmitter type_name_emitter_;
- Traversal::Belongs read_belongs_;
- Traversal::GetRaises get_raises_;
- };
-
- struct InterfaceEmitter : Traversal::Interface,
- EmitterBase
- {
- InterfaceEmitter (Context& c)
- : EmitterBase (c)
- {}
-
- bool
- add (Interface& i)
- {
- return interfaces_.insert (&i).second;
- }
-
- virtual void
- traverse (Interface& i)
- {
- if (add (i))
- {
- Traversal::Interface::traverse (i);
- }
- }
-
- private:
- std::set<Interface*> interfaces_;
- };
-
struct FacetEmitter : Traversal::UnconstrainedInterface,
EmitterBase
{
@@ -522,7 +63,7 @@ namespace
interface_emitter.edge_traverser (inherits_);
// Works for both read/write and readonly attributes.
- AttributeEmitter attribute_emitter (ctx);
+ AttributeHeaderEmitter attribute_emitter (ctx);
defines_.node_traverser (attribute_emitter);
OperationEmitter operation_emitter (ctx);
@@ -536,15 +77,15 @@ namespace
operation_emitter.edge_traverser (returns);
operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ ParameterEmitter<Traversal::InParameter> in_param (ctx);
+ ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
+ ParameterEmitter<Traversal::OutParameter> out_param (ctx);
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -553,9 +94,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -569,7 +110,6 @@ namespace
<< "_get_component (" << endl
<< STRS[ENV_SNGL_HDR] << ")" << endl
<< STRS[EXCP_SNGL] << ";" << endl
- << endl
<< "protected:" << endl
<< "// Facet executor." << endl
<< i.scoped_name ().scope_name ()<< "::CCM_" << i.name ()
@@ -602,7 +142,7 @@ namespace
{
PortsEmitterPublic (Context& c)
: EmitterBase (c),
- type_name_emitter_ (c.os ())
+ type_name_emitter_ (c)
{
belongs_.node_traverser (type_name_emitter_);
}
@@ -672,7 +212,7 @@ namespace
{
PortsEmitterProtected (Context& c)
: EmitterBase (c),
- type_name_emitter_ (c.os ())
+ type_name_emitter_ (c)
{
belongs_.node_traverser (type_name_emitter_);
}
@@ -687,9 +227,9 @@ namespace
os << "Consumer_ptr c" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_AC] << "));" << endl << endl;
+ << STRS[EXCP_AC] << "));" << endl;
os << "virtual ";
@@ -698,9 +238,9 @@ namespace
os << "Consumer_ptr" << endl
<< "disconnect_" << e.name () << " (" << endl
<< STRS[ENV_SNGL_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_NC] << "));" << endl << endl;
+ << STRS[EXCP_NC] << "));" << endl;
}
virtual void
@@ -713,10 +253,10 @@ namespace
os << "_ptr" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_AC] << "," << endl
- << STRS[EXCP_IC] << "));" << endl << endl;
+ << STRS[EXCP_IC] << "));" << endl;
os << "virtual ";
@@ -725,9 +265,9 @@ namespace
os << "_ptr" << endl
<< "disconnect_" << u.name () << " (" << endl
<< STRS[ENV_SNGL_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_NC] << "));" << endl << endl;
+ << STRS[EXCP_NC] << "));" << endl;
}
virtual void
@@ -740,10 +280,10 @@ namespace
os << "_ptr" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_ECL] << "," << endl
- << STRS[EXCP_IC] << "));" << endl << endl;
+ << STRS[EXCP_IC] << "));" << endl;
os << "virtual ";
@@ -753,9 +293,9 @@ namespace
<< "disconnect_" << u.name () << " (" << endl
<< "::Components::Cookie * ck" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_IC] << "));" << endl << endl;
+ << STRS[EXCP_IC] << "));" << endl;
}
virtual void
@@ -768,18 +308,18 @@ namespace
os << "Consumer_ptr c" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_ECL] << "));" << endl << endl;
+ << STRS[EXCP_ECL] << "));" << endl;
os << "// CIAO-specific." << endl
<< STRS[COMP_CK] << " *" << endl
<< "subscribe_" << p.name () << "_generic (" << endl
<< STRS[COMP_ECB] << "_ptr c" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_ECL] << "));" << endl << endl;
+ << STRS[EXCP_ECL] << "));" << endl;
os << "virtual ";
@@ -789,13 +329,13 @@ namespace
<< "unsubscribe_" << p.name () << " (" << endl
<< STRS[COMP_CK] << " *ck" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_IC] << "));" << endl << endl;
+ << STRS[EXCP_IC] << "));" << endl;
}
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
Traversal::Belongs belongs_;
};
@@ -807,7 +347,7 @@ namespace
{
PortsEmitterMembers (Context& c)
: EmitterBase (c),
- type_name_emitter_ (c.os ())
+ type_name_emitter_ (c)
{
belongs_.node_traverser (type_name_emitter_);
}
@@ -819,7 +359,7 @@ namespace
os << "Consumer_var" << endl
<< "ciao_emits_" << e.name () << "_consumer_;"
- << endl << endl;
+ << endl;
}
virtual void
@@ -830,7 +370,7 @@ namespace
Traversal::SingleUserData::belongs (u, belongs_);
os << "_var" << endl
- << "ciao_uses_" << u.name () << "_;" << endl << endl;
+ << "ciao_uses_" << u.name () << "_;" << endl;
}
virtual void
@@ -842,7 +382,7 @@ namespace
Traversal::MultiUserData::belongs (u, belongs_);
os << "_var>" << endl
- << "ciao_uses_" << u.name () << "_;" << endl << endl;
+ << "ciao_uses_" << u.name () << "_;" << endl;
}
virtual void
@@ -854,16 +394,16 @@ namespace
os << "Consumer_var>" << endl
<< "ciao_publishes_" << p.name () << "_map_;"
- << endl << endl;
+ << endl;
os << "ACE_Active_Map_Manager<" << endl
<< STRS[COMP_ECB] << "_var>" << endl
<< "ciao_publishes_" << p.name () << "_generic_map_;"
- << endl << endl;
+ << endl;
}
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
Traversal::Belongs belongs_;
};
@@ -1063,9 +603,9 @@ namespace
{
PortsEmitterPublic (Context& c)
: EmitterBase (c),
- type_name_emitter_ (c.os ()),
- simple_type_name_emitter_ (c.os ()),
- stripped_type_name_emitter_ (c.os ())
+ type_name_emitter_ (c),
+ simple_type_name_emitter_ (c),
+ stripped_type_name_emitter_ (c)
{
belongs_.node_traverser (type_name_emitter_);
simple_belongs_.node_traverser (simple_type_name_emitter_);
@@ -1082,7 +622,7 @@ namespace
os << "_ptr" << endl
<< "provide_" << p.name () << " (" << endl
<< STRS[ENV_SNGL_HDR] << ")" << endl
- << STRS[EXCP_SNGL] << ";" << endl << endl;
+ << STRS[EXCP_SNGL] << ";" << endl;
}
virtual void
@@ -1095,10 +635,10 @@ namespace
os << "_ptr c" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_AC] << "," << endl
- << STRS[EXCP_IC] << "));" << endl << endl;
+ << STRS[EXCP_IC] << "));" << endl;
os << "virtual ";
@@ -1107,9 +647,9 @@ namespace
os << "_ptr" << endl
<< "disconnect_" << u.name () << " (" << endl
<< STRS[ENV_SNGL_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_NC] << "));" << endl << endl;
+ << STRS[EXCP_NC] << "));" << endl;
os << "virtual ";
@@ -1118,7 +658,7 @@ namespace
os << "_ptr" << endl
<< "get_connection_" << u.name () << " (" << endl
<< STRS[ENV_SNGL_HDR] << ")" << endl
- << STRS[EXCP_SNGL] << ";" << endl << endl;
+ << STRS[EXCP_SNGL] << ";" << endl;
}
virtual void
@@ -1131,10 +671,10 @@ namespace
os << "_ptr c" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_ECL] << "," << endl
- << STRS[EXCP_IC] << "));" << endl << endl;
+ << STRS[EXCP_IC] << "));" << endl;
os << "virtual ";
@@ -1144,14 +684,14 @@ namespace
<< "disconnect_" << u.name () << " (" << endl
<< "::Components::Cookie * ck" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_IC] << "));" << endl << endl;
+ << STRS[EXCP_IC] << "));" << endl;
os << "virtual " << u.scoped_name () << "Connections *" << endl
<< "get_connections_" << u.name () << " (" << endl
<< STRS[ENV_SNGL_HDR] << ")" << endl
- << STRS[EXCP_SNGL] << ";" << endl << endl;
+ << STRS[EXCP_SNGL] << ";" << endl;
}
virtual void
@@ -1181,18 +721,15 @@ namespace
<< endl
<< c.scoped_name ().scope_name ().scope_name () << "::CCM_"
<< c.scoped_name ().scope_name ().simple_name ()
- << "_Context_ptr c);" << endl << endl;
+ << "_Context_ptr c);" << endl;
os << "virtual ~";
Traversal::ConsumerData::belongs (c, simple_belongs_);
os << "Consumer_"
- << c.name () << "_Servant (void);" << endl << endl;
+ << c.name () << "_Servant (void);" << endl;
- // @@@ (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_";
@@ -1204,39 +741,39 @@ namespace
os << " *evt" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_SNGL] << ";" << endl << endl;
+ << STRS[EXCP_SNGL] << ";" << endl;
os << "// Inherited from " << STRS[COMP_ECB] << "." << endl
<< "virtual void" << endl
- << "push_event (::Components::EventBase *ev" << endl
+ << "push_event ( ::Components::EventBase *ev" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_BET] << "));" << endl << endl;
+ << STRS[EXCP_BET] << "));" << endl;
os << "// CIAO-specific in " << STRS[COMP_ECB] << "." << endl
<< "virtual CORBA::Boolean" << endl
<< "ciao_is_substitutable (" << endl
<< "const char *event_repo_id" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_SNGL] << ";" << endl << endl;
+ << STRS[EXCP_SNGL] << ";" << endl;
os << "// Get component implementation." << endl
<< "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
<< c.scoped_name ().scope_name ().scope_name () << "::CCM_"
<< c.scoped_name ().scope_name ().simple_name ()
<< "_var" << endl
- << "executor_;" << endl << endl;
+ << "executor_;" << endl;
os << c.scoped_name ().scope_name ().scope_name () << "::CCM_"
<< c.scoped_name ().scope_name ().simple_name ()
<< "_Context_var" << endl
- << "ctx_;" << endl << endl;
+ << "ctx_;" << endl;
os << "};";
@@ -1247,7 +784,7 @@ namespace
os << "Consumer_ptr" << endl
<< "get_consumer_" << c.name () << " (" << endl
<< STRS[ENV_SNGL_HDR] << ")" << endl
- << STRS[EXCP_SNGL] << ";" << endl << endl;
+ << STRS[EXCP_SNGL] << ";" << endl;
}
virtual void
@@ -1260,9 +797,9 @@ namespace
os << "Consumer_ptr c" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_AC] << "));" << endl << endl;
+ << STRS[EXCP_AC] << "));" << endl;
os << "virtual ";
@@ -1271,9 +808,9 @@ namespace
os << "Consumer_ptr" << endl
<< "disconnect_" << e.name () << " (" << endl
<< STRS[ENV_SNGL_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_NC] << "));" << endl << endl;
+ << STRS[EXCP_NC] << "));" << endl;
}
virtual void
@@ -1286,18 +823,18 @@ namespace
os << "Consumer_ptr c" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_ECL] << "));" << endl << endl;
+ << STRS[EXCP_ECL] << "));" << endl;
os << "// CIAO-specific." << endl
<< STRS[COMP_CK] << " *" << endl
<< "subscribe_" << p.name () << "_generic (" << endl
<< STRS[COMP_ECB] << "_ptr c" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_ECL] << "));" << endl << endl;
+ << STRS[EXCP_ECL] << "));" << endl;
os << "virtual ";
@@ -1307,13 +844,13 @@ namespace
<< "unsubscribe_" << p.name () << " (" << endl
<< STRS[COMP_CK] << " *ck" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
- << STRS[EXCP_IC] << "));" << endl << endl;
+ << STRS[EXCP_IC] << "));" << endl;
}
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
SimpleTypeNameEmitter simple_type_name_emitter_;
StrippedTypeNameEmitter stripped_type_name_emitter_;
Traversal::Belongs belongs_;
@@ -1327,7 +864,7 @@ namespace
{
PortsEmitterProtected (Context& c)
: EmitterBase (c),
- type_name_emitter_ (c.os ())
+ type_name_emitter_ (c)
{
belongs_.node_traverser (type_name_emitter_);
}
@@ -1338,7 +875,7 @@ namespace
Traversal::ProviderData::belongs (p, belongs_);
os << "_var" << endl
- << "provide_" << p.name () << "_;" << endl << endl;
+ << "provide_" << p.name () << "_;" << endl;
}
virtual void
@@ -1347,11 +884,11 @@ namespace
Traversal::ConsumerData::belongs (c, belongs_);
os << "Consumer_var" << endl
- << "consumes_" << c.name () << "_;" << endl << endl;
+ << "consumes_" << c.name () << "_;" << endl;
}
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
Traversal::Belongs belongs_;
};
@@ -1365,9 +902,9 @@ namespace
{
PortsEmitterPrivate (Context& c)
: EmitterBase (c),
- type_name_emitter_ (c.os ()),
- simple_type_name_emitter_ (c.os ()),
- stripped_type_name_emitter_ (c.os ())
+ type_name_emitter_ (c),
+ simple_type_name_emitter_ (c),
+ stripped_type_name_emitter_ (c)
{
belongs_.node_traverser (type_name_emitter_);
simple_belongs_.node_traverser (simple_type_name_emitter_);
@@ -1380,7 +917,7 @@ namespace
os << "::CORBA::Object_ptr" << endl
<< "provide_" << p.name () << "_i (" << endl
<< STRS[ENV_SNGL_HDR] << ")" << endl
- << STRS[EXCP_SNGL] << ";" << endl << endl;
+ << STRS[EXCP_SNGL] << ";" << endl;
}
virtual void
@@ -1399,7 +936,7 @@ namespace
os << "::Components::EventConsumerBase_ptr" << endl
<< "get_consumer_" << c.name () << "_i (" << endl
<< STRS[ENV_SNGL_HDR] << ")" << endl
- << STRS[EXCP_SNGL] << ";" << endl << endl;
+ << STRS[EXCP_SNGL] << ";" << endl;
}
virtual void
@@ -1413,7 +950,7 @@ namespace
}
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
SimpleTypeNameEmitter simple_type_name_emitter_;
StrippedTypeNameEmitter stripped_type_name_emitter_;
Traversal::Belongs belongs_;
@@ -1449,7 +986,7 @@ namespace
<< " " << t.scoped_name ().scope_name () << "::CCM_"
<< t.name () << "_var," << endl
<< " " << t.name () << "_Context" << endl
- << " > comp_svnt_base;" << endl << endl;
+ << " > comp_svnt_base;" << endl;
os << t.name () << "_Servant (" << endl
<< t.scoped_name ().scope_name () << "::CCM_" << t.name ()
@@ -1457,15 +994,14 @@ namespace
<< "::Components::CCMHome_ptr h," << endl
<< "const char *ins_name," << endl
<< "::CIAO::Home_Servant_Impl_Base *hs," << endl
- << "::CIAO::Session_Container *c);" << endl << endl;
+ << "::CIAO::Session_Container *c);" << endl;
- os << "virtual ~" << t.name () << "_Servant (void);"
- << endl << endl;
+ os << "virtual ~" << t.name () << "_Servant (void);" << endl;
os << "virtual void" << endl
<< "set_attributes (" << endl
<< "const ::Components::ConfigValues &descr" << endl
- << STRS[ENV_SRC] << ");" << endl << endl;
+ << STRS[ENV_SRC] << ");" << endl;
os << "// Supported operations." << endl << endl;
@@ -1488,7 +1024,7 @@ namespace
interface_emitter.edge_traverser (interface_inherits);
// Works for both read/write and readonly attributes.
- AttributeEmitter attribute_emitter (ctx);
+ AttributeHeaderEmitter attribute_emitter (ctx);
defines.node_traverser (attribute_emitter);
OperationEmitter operation_emitter (ctx);
@@ -1502,15 +1038,15 @@ namespace
operation_emitter.edge_traverser (returns);
operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ ParameterEmitter<Traversal::InParameter> in_param (ctx);
+ ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
+ ParameterEmitter<Traversal::OutParameter> out_param (ctx);
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -1519,9 +1055,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -1563,7 +1099,7 @@ namespace
component_emitter.edge_traverser (component_inherits);
// Works for both read/write and readonly attributes.
- AttributeEmitter attribute_emitter (ctx);
+ AttributeHeaderEmitter attribute_emitter (ctx);
defines.node_traverser (attribute_emitter);
component_emitter.traverse (t);
@@ -1576,24 +1112,29 @@ namespace
<< "const char *name," << endl
<< "CORBA::Object_ptr connection" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_IN] << "," << endl
<< STRS[EXCP_IC] << "," << endl
<< STRS[EXCP_AC] << "," << endl
- << STRS[EXCP_ECL] << "));" << endl << endl;
+ << STRS[EXCP_ECL] << "));" << endl;
os << "virtual CORBA::Object_ptr" << endl
<< "disconnect (" << endl
<< "const char *name," << endl
<< STRS[COMP_CK] << " *ck" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_IN] << "," << endl
<< STRS[EXCP_IC] << "," << endl
<< STRS[EXCP_CR] << "," << endl
- << STRS[EXCP_NC] << "));" << endl << endl;
+ << STRS[EXCP_NC] << "));" << endl;
+
+ os << "virtual " << STRS[COMP_RD] << " *" << endl
+ << "get_all_receptacles (" << endl
+ << STRS[ENV_SNGL_HDR] << ")" << endl
+ << STRS[EXCP_SNGL] << ";" << endl;
os << "// Operations for Events interface." << endl << endl;
@@ -1602,40 +1143,59 @@ namespace
<< "const char *publisher_name," << endl
<< STRS[COMP_ECB] << "_ptr subscriber" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_IN] << "," << endl
<< STRS[EXCP_IC] << "," << endl
- << STRS[EXCP_ECL] << "));" << endl << endl;
+ << STRS[EXCP_ECL] << "));" << endl;
os << "virtual " << STRS[COMP_ECB] << "_ptr" << endl
<< "unsubscribe (" << endl
<< "const char *publisher_name," << endl
<< STRS[COMP_CK] << " *ck" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_IN] << "," << endl
- << STRS[EXCP_IC] << "));" << endl << endl;
+ << STRS[EXCP_IC] << "));" << endl;
os << "virtual void" << endl
<< "connect_consumer (" << endl
<< "const char *emitter_name," << endl
<< STRS[COMP_ECB] << "_ptr consumer" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_IN] << "," << endl
<< STRS[EXCP_AC] << "," << endl
- << STRS[EXCP_IC] << "));" << endl << endl;
+ << STRS[EXCP_IC] << "));" << endl;
- os << "// CIAO specific operations on the servant " << endl
+ os << "virtual " << STRS[COMP_ECB] << "_ptr" << endl
+ << "disconnect_consumer (" << endl
+ << "const char *source_name" << endl
+ << STRS[ENV_HDR] << ")" << endl
+ << STRS[EXCP_START] << " "
+ << STRS[EXCP_SYS] << "," << endl
+ << STRS[EXCP_IN] << "," << endl
+ << STRS[EXCP_NC] << "));" << endl;
+
+ os << "virtual " << STRS[COMP_PD] << " *" << endl
+ << "get_all_publishers (" << endl
+ << STRS[ENV_SNGL_HDR] << ")" << endl
+ << STRS[EXCP_SNGL] << ";" << endl;
+
+ os << "virtual " << STRS[COMP_ED] << " *" << endl
+ << "get_all_emitters (" << endl
+ << STRS[ENV_SNGL_HDR] << ")" << endl
+ << STRS[EXCP_SNGL] << ";" << endl;
+
+ os << "// CIAO specific operations on the servant. " << endl
<< "CORBA::Object_ptr" << endl
<< "get_facet_executor (" << endl
<< "const char *name" << endl
<< STRS[ENV_HDR] << ")" << endl
- << STRS[EXCP_START] << endl
- << STRS[EXCP_SYS]<< "));" << endl << endl;
+ << STRS[EXCP_START] << " "
+ << STRS[EXCP_SYS]<< "));" << endl;
os << "private:" << endl << endl;
@@ -1656,13 +1216,13 @@ namespace
component_emitter.traverse (t);
}
- os << "const char *ins_name_;" << endl << endl;
+ os << "const char *ins_name_;" << endl;
os << "private:" << endl << endl
<< "void" << endl
<< "populate_port_tables (" << endl
<< STRS[ENV_SNGL_HDR] << ")" << endl
- << STRS[EXCP_SNGL] << ";" << endl << endl;
+ << STRS[EXCP_SNGL] << ";" << endl;
// Generate private operations for ports.
{
@@ -1695,211 +1255,15 @@ namespace
HomeEmitter (Context& c, CommandLine const& cl)
: EmitterBase (c),
cl_ (cl),
- type_name_emitter_ (c.os ()),
- simple_type_name_emitter_ (c.os ()),
- enclosing_type_name_emitter_ (c.os ())
+ type_name_emitter_ (c),
+ simple_type_name_emitter_ (c),
+ enclosing_type_name_emitter_ (c)
{
manages_.node_traverser (type_name_emitter_);
simple_manages_.node_traverser (simple_type_name_emitter_);
enclosing_manages_.node_traverser (enclosing_type_name_emitter_);
}
- // Nested classes used by this emitter.
- private:
- // 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,
- EmitterBase
- {
- FactoryOperationEmitter (Context& c)
- : EmitterBase (c)
- {}
-
- virtual void
- pre (SemanticGraph::HomeFactory&)
- {
- os << "virtual ";
- }
-
- virtual void
- returns (SemanticGraph::HomeFactory& t)
- {
- ReturnTypeNameEmitter returns_emitter (os);
- Traversal::Returns returns_;
- returns_.node_traverser (returns_emitter);
-
- Traversal::HomeFactory::returns (t, returns_);
-
- os << endl;
- }
-
- virtual void
- name (SemanticGraph::HomeFactory& t)
- {
- os << t.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 << endl;
- }
-
- virtual void
- comma (SemanticGraph::HomeFactory&)
- {
- os << "," << endl;
- }
- };
-
- struct FinderOperationEmitter : Traversal::HomeFinder,
- EmitterBase
- {
- FinderOperationEmitter (Context& c)
- : EmitterBase (c),
- returns_emitter_ (c.os ())
- {
- returns_.node_traverser (returns_emitter_);
- }
-
- virtual void
- pre (SemanticGraph::HomeFinder&)
- {
- os << "virtual ";
- }
-
- virtual void
- returns (SemanticGraph::HomeFinder& t)
- {
- Traversal::HomeFinder::returns (t, returns_);
-
- os << 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;
- }
-
- private:
- ReturnTypeNameEmitter returns_emitter_;
- Traversal::Returns returns_;
- };
-
- public:
virtual void pre (Type& t)
{
os << "class " << ctx.export_macro () << " " << t.name ()
@@ -1995,19 +1359,18 @@ namespace
Traversal::Home::manages (t, simple_manages_);
os << "_Servant" << endl
- << " > home_svnt_base;" << endl << endl;
+ << " > home_svnt_base;" << endl;
os << t.name () << "_Servant (" << endl
<< t.scoped_name ().scope_name () << "::CCM_" << t.name ()
<< "_ptr exe," << endl
<< "const char *ins_name," << endl
- << "::CIAO::Session_Container *c);" << endl << endl;
+ << "::CIAO::Session_Container *c);" << endl;
- os << "virtual ~" << t.name () << "_Servant (void);"
- << endl << endl;
+ os << "virtual ~" << t.name () << "_Servant (void);" << endl;
// Generate home operations.
- os << "// Home operations." << endl << endl;
+ os << "// Home operations." << endl;
{
Traversal::Home home_emitter;
@@ -2029,15 +1392,15 @@ namespace
home_operation_emitter.edge_traverser (returns);
home_operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ ParameterEmitter<Traversal::InParameter> in_param (ctx);
+ ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
+ ParameterEmitter<Traversal::OutParameter> out_param (ctx);
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -2046,9 +1409,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -2086,15 +1449,15 @@ namespace
finder_operation_emitter.edge_traverser (returns);
finder_operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ ParameterEmitter<Traversal::InParameter> in_param (ctx);
+ ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
+ ParameterEmitter<Traversal::OutParameter> out_param (ctx);
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -2103,9 +1466,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -2127,7 +1490,7 @@ namespace
home_emitter.edge_traverser (home_inherits);
// Works for both read/write and readonly attributes.
- AttributeEmitter attribute_emitter (ctx);
+ AttributeHeaderEmitter attribute_emitter (ctx);
defines.node_traverser (attribute_emitter);
home_emitter.traverse (t);
@@ -2153,7 +1516,7 @@ namespace
interface_emitter.edge_traverser (inherits);
// Works for both read/write and readonly attributes.
- AttributeEmitter attribute_emitter (ctx);
+ AttributeHeaderEmitter attribute_emitter (ctx);
defines.node_traverser (attribute_emitter);
OperationEmitter operation_emitter (ctx);
@@ -2167,15 +1530,15 @@ namespace
operation_emitter.edge_traverser (returns);
operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ ParameterEmitter<Traversal::InParameter> in_param (ctx);
+ ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
+ ParameterEmitter<Traversal::OutParameter> out_param (ctx);
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -2184,9 +1547,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -2210,7 +1573,7 @@ namespace
private:
CommandLine const& cl_;
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
SimpleTypeNameEmitter simple_type_name_emitter_;
EnclosingTypeNameEmitter enclosing_type_name_emitter_;
Traversal::Manages manages_;
@@ -2218,26 +1581,6 @@ namespace
Traversal::Manages enclosing_manages_;
};
- 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 IncludesEmitter : Traversal::QuoteIncludes,
Traversal::BracketIncludes,
EmitterBase
@@ -2361,8 +1704,7 @@ ServantHeaderEmitter::pre (TranslationUnit&)
<< "#include \"ciao/"
<< (swapping ? "Swapping_Servant_Home_Impl_T.h"
: "Home_Servant_Impl_T.h")
- << "\"" << endl
- << "#include \"ace/Active_Map_Manager_T.h\"" << endl << endl;
+ << "\"" << endl << endl;
}
void
@@ -2370,7 +1712,7 @@ ServantHeaderEmitter::generate (TranslationUnit& u)
{
pre (u);
- Context c (os, export_macro_);
+ Context c (os, export_macro_, cl_);
Traversal::TranslationUnit unit;
diff --git a/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp b/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp
index d1047e699aa..29c8411f4db 100644
--- a/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp
+++ b/TAO/CIAO/CIDLC/ServantSourceGenerator.cpp
@@ -3,13 +3,19 @@
// cvs-id : $Id$
#include "ServantSourceGenerator.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 "TypeNameEmitter.hpp"
-
-#include "CCF/CodeGenerationKit/Regex.hpp"
#include <ostream>
+#include "CCF/CodeGenerationKit/Regex.hpp"
+
using namespace CCF::CIDL;
using namespace CCF::CIDL::SemanticGraph;
using namespace StringLiterals;
@@ -18,137 +24,51 @@ using std::string;
namespace
{
- class Context
- {
- public:
- Context (std::ostream& os,
- string export_macro,
- CommandLine const& cl)
- : os_ (os),
- export_macro_ (export_macro),
- cl_ (cl)
- {
- }
-
- std::ostream&
- os ()
- {
- return os_;
- }
-
- string
- export_macro ()
- {
- return export_macro_;
- }
-
- CommandLine const&
- cl ()
- {
- return cl_;
- }
-
- string
- composition_name ()
- {
- return composition_name_;
- }
-
- void
- composition_name (const string& name)
- {
- composition_name_ = name;
- }
-
- private:
- std::ostream& os_;
- string export_macro_;
- CommandLine const& cl_;
- string composition_name_;
- };
-
- class EmitterBase
+ struct RepoIdEmitter : Traversal::Type,
+ EmitterBase
{
- public:
- EmitterBase (Context& c)
- : ctx (c),
- os (ctx.os ())
+ RepoIdEmitter (Context& c)
+ : EmitterBase (c)
{
}
- protected:
- Context& ctx;
- std::ostream& os;
- };
-
- struct RepoIdEmitter : Traversal::Type
- {
- RepoIdEmitter (std::ostream& os_)
- : os (os_)
- {}
-
virtual void
traverse (SemanticGraph::Type& t)
{
os << "\"" << t.context ().get<string> (STRS[REPO_ID]) << "\"";
}
-
- private:
- std::ostream& os;
};
- struct ModuleEmitter : Traversal::Module, EmitterBase
+ struct ConsumerRepoIdEmitter : Traversal::Type,
+ EmitterBase
{
- ModuleEmitter (Context& c)
+ ConsumerRepoIdEmitter (Context& c)
: EmitterBase (c)
{
}
virtual void
- pre (Type& t)
- {
- os << "namespace " << t.name () << "{";
- }
-
- virtual void
- post (Type&)
+ traverse (SemanticGraph::Type& t)
{
- os << "}";
+ string holder (t.context ().get<string> (STRS[REPO_ID]));
+ os << "\"" << holder.substr (0, holder.rfind (':'))
+ << "Consumer:1.0\"";
}
};
- struct FlatNameEmitter : Traversal::Type
+ struct FlatNameEmitter : Traversal::Type,
+ EmitterBase
{
- FlatNameEmitter (std::ostream& os_)
- : os (os_)
- {}
-
- virtual void
- traverse (SemanticGraph::Type& t)
+ FlatNameEmitter (Context& c)
+ : EmitterBase (c)
{
- os << regex::perl_s (t.scoped_name ().str (), "/::/_/");
}
- private:
- std::ostream& os;
- };
-
- struct ConsumerRepoIdEmitter : Traversal::Type
- {
- ConsumerRepoIdEmitter (std::ostream& os_)
- : os (os_)
- {}
-
virtual void
traverse (SemanticGraph::Type& t)
{
- string holder (t.context ().get<string> (STRS[REPO_ID]));
- os << "\"" << holder.substr (0, holder.rfind (':'))
- << "Consumer:1.0\"";
+ os << regex::perl_s (t.scoped_name ().str (), "/::/_/");
}
-
- private:
- std::ostream& os;
};
struct OperationExecEmitter : Traversal::Operation,
@@ -224,24 +144,6 @@ namespace
std::ostream& os;
};
- // 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;
- };
-
// For generating parameter names in operation delegation.
template <typename T>
struct ParameterExecEmitter : T
@@ -267,7 +169,7 @@ namespace
T& scope)
: EmitterBase (c),
scope_ (scope),
- ace_check_return_emitter_ (c.os ())
+ ace_check_return_emitter_ (c)
{
ace_check_returns_.node_traverser (ace_check_return_emitter_);
}
@@ -318,7 +220,7 @@ namespace
virtual void
raises_pre (Type&)
{
- os << STRS[EXCP_START] << endl
+ os << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl;
}
@@ -371,457 +273,6 @@ namespace
Traversal::Returns ace_check_returns_;
};
- // 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;
- };
-
- struct InterfaceEmitter : Traversal::Interface,
- EmitterBase
- {
- InterfaceEmitter (Context& c)
- : EmitterBase (c)
- {}
-
- bool
- add (Interface& i)
- {
- return interfaces_.insert (&i).second;
- }
-
- virtual void
- traverse (Interface& i)
- {
- if (add (i))
- {
- Traversal::Interface::traverse (i);
- }
- }
-
- private:
- std::set<Interface*> interfaces_;
- };
-
- // Generates the set operation of a ReadWriteAttribute.
- template <typename T>
- struct WriteAttributeEmitter : Traversal::ReadWriteAttribute,
- EmitterBase
- {
- WriteAttributeEmitter (Context& c, T& scope, bool swapping)
- : EmitterBase (c),
- scope_ (scope),
- write_type_name_emitter_ (c.os ()),
- type_name_emitter_ (c.os ()),
- swapping_ (swapping)
- {
- write_belongs_.node_traverser (write_type_name_emitter_);
-
- edge_traverser (set_raises_);
- set_raises_.node_traverser (type_name_emitter_);
- }
-
- virtual void
- gen_swapping_set ()
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << "ACE_CHECK;" << endl;
- }
-
- virtual void
- pre (SemanticGraph::ReadWriteAttribute&)
- {
- os << "void" << endl;
- }
-
- virtual void
- name (SemanticGraph::ReadWriteAttribute& a)
- {
- os << scope_.name () << "_Servant::" << a.name () << " (" << endl;
-
- Traversal::ReadWriteAttribute::belongs (a, write_belongs_);
-
- os << " " << a.name () << endl
- << STRS[ENV_SRC] << ")" << endl;
- }
-
- virtual void
- get_raises (SemanticGraph::ReadWriteAttribute&)
- {
- }
-
- virtual void
- set_raises_none (SemanticGraph::ReadWriteAttribute&)
- {
- os << STRS[EXCP_SNGL];
- }
-
- virtual void
- set_raises_pre (SemanticGraph::ReadWriteAttribute&)
- {
- os << STRS[EXCP_START] << endl
- << STRS[EXCP_SYS] << "," << endl;
- }
-
- virtual void
- set_raises_post (SemanticGraph::ReadWriteAttribute&)
- {
- os << "))" << endl;
- }
-
- virtual void
- post (SemanticGraph::ReadWriteAttribute& a)
- {
- os << "{";
-
- if (swapping_)
- {
- this->gen_swapping_set ();
- }
-
- os << "this->executor_->" << a.name () << " (" << endl
- << a.name () << endl
- << STRS[ENV_ARG] << ");" << endl
- << "}";
- }
-
- virtual void
- comma (SemanticGraph::ReadWriteAttribute&)
- {
- os << "," << endl;
- }
-
- protected:
- T& scope_;
- Traversal::Belongs write_belongs_;
-
- private:
- INArgTypeNameEmitter write_type_name_emitter_;
- TypeNameEmitter type_name_emitter_;
- Traversal::SetRaises set_raises_;
- bool swapping_;
- };
-
- // Generates operations associated with attributes.
- template <typename T>
- struct AttributeEmitter : Traversal::ReadAttribute,
- Traversal::ReadWriteAttribute,
- EmitterBase
- {
- AttributeEmitter (Context& c, T& scope)
- : EmitterBase (c),
- scope_ (scope),
- read_type_name_emitter_ (c.os ()),
- type_name_emitter_ (c.os ()),
- ace_check_return_emitter_ (c.os ())
- {
- read_belongs_.node_traverser (read_type_name_emitter_);
- ace_check_return_belongs_.node_traverser (ace_check_return_emitter_);
-
- edge_traverser (get_raises_);
- get_raises_.node_traverser (type_name_emitter_);
- }
-
- // ReadWriteAttribute
- //
-
- // Overridden by facet attribute emitter.
- virtual void
- gen_swapping_get (SemanticGraph::ReadWriteAttribute& a)
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");";
-
- Traversal::ReadWriteAttribute::belongs (a, ace_check_return_belongs_);
-
- os << endl;
- }
-
- // Overridden by facet attribute emitter.
- virtual void
- gen_write_operation (SemanticGraph::ReadWriteAttribute& a,
- bool swapping)
- {
- WriteAttributeEmitter<T> write_attribute_emitter (ctx,
- scope_,
- swapping);
- write_attribute_emitter.traverse (a);
- }
-
- virtual void
- pre (SemanticGraph::ReadWriteAttribute& a)
- {
- Traversal::ReadWriteAttribute::belongs (a, read_belongs_);
-
- os << endl;
- }
-
- virtual void
- name (SemanticGraph::ReadWriteAttribute& a)
- {
- os << scope_.name () << "_Servant::" << a.name () << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl;
- }
-
- virtual void
- get_raises_none (SemanticGraph::ReadWriteAttribute&)
- {
- os << STRS[EXCP_SNGL] << endl;
- }
-
- virtual void
- get_raises_pre (SemanticGraph::ReadWriteAttribute&)
- {
- os << STRS[EXCP_START] << endl
- << STRS[EXCP_SYS] << "," << endl;
- }
-
- virtual void
- get_raises_post (SemanticGraph::ReadWriteAttribute&)
- {
- os << "))" << endl;
- }
-
- virtual void
- set_raises (SemanticGraph::ReadWriteAttribute&)
- {
- }
-
- virtual void
- post (SemanticGraph::ReadWriteAttribute& a)
- {
- os << "{";
-
- string swap_option = ctx.cl ().get_value ("custom-container", "");
- bool swapping = (swap_option == "upgradeable");
-
- if (swapping)
- {
- this->gen_swapping_get (a);
- }
-
- os << "return this->executor_->" << a.name () << " (" << endl
- << STRS[ENV_SNGL_ARG] << ");" << endl
- << "}";
-
- this->gen_write_operation (a, swapping);
- }
-
- virtual void
- comma (SemanticGraph::ReadWriteAttribute&)
- {
- os << "," << endl;
- }
-
- // ReadAttribute
- //
-
- // Overridden by facet attribute emitter to do nothing.
- virtual void
- gen_swapping_get (SemanticGraph::ReadAttribute& a)
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");";
-
- Traversal::ReadAttribute::belongs (a, ace_check_return_belongs_);
-
- os << endl;
- }
-
- virtual void
- pre (SemanticGraph::ReadAttribute& a)
- {
- Traversal::ReadAttribute::belongs (a, read_belongs_);
-
- os << endl;
- }
-
- virtual void
- name (SemanticGraph::ReadAttribute& a)
- {
- os << scope_.name () << "_Servant::" << a.name () << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl;
- }
-
- virtual void
- get_raises_none (SemanticGraph::ReadAttribute&)
- {
- os << STRS[EXCP_SNGL] << endl;
- }
-
- virtual void
- get_raises_pre (SemanticGraph::ReadAttribute&)
- {
- os << STRS[EXCP_START] << endl
- << STRS[EXCP_SYS] << "," << endl;
- }
-
- virtual void
- get_raises_post (SemanticGraph::ReadAttribute&)
- {
- os << "))" << endl;
- }
-
- virtual void
- set_raises (SemanticGraph::ReadAttribute&)
- {
- }
-
- virtual void
- post (SemanticGraph::ReadAttribute& a)
- {
- os << "{";
-
- string swap_option = ctx.cl ().get_value ("custom-container", "");
- bool swapping = (swap_option == "upgradeable");
-
- if (swapping)
- {
- this->gen_swapping_get (a);
- }
-
- os << "return this->executor_->" << a.name () << " (" << endl
- << STRS[ENV_SNGL_ARG] << ");" << endl
- << "}";
- }
-
- virtual void
- comma (SemanticGraph::ReadAttribute&)
- {
- os << "," << endl;
- }
-
- protected:
- T& scope_;
-
- private:
- ReturnTypeNameEmitter read_type_name_emitter_;
- TypeNameEmitter type_name_emitter_;
- AceCheckReturnEmitter ace_check_return_emitter_;
- Traversal::Belongs read_belongs_;
- Traversal::Belongs ace_check_return_belongs_;
- Traversal::GetRaises get_raises_;
- };
-
- // 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 ()),
- ace_check_return_emitter_ (c.os ())
- {
- read_belongs_.node_traverser (read_type_name_emitter_);
- ace_check_return_belongs_.node_traverser (ace_check_return_emitter_);
- }
-
- // Overridden by facet attribute emitter to do nothing.
-
- virtual void
- gen_swapping_get (SemanticGraph::ReadAttribute& a)
- {
- os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");";
-
- Traversal::ReadAttribute::belongs (a, ace_check_return_belongs_);
-
- os << endl;
- }
-
- virtual void
- name (SemanticGraph::ReadAttribute& a)
- {
- os << scope_.name () << "_Servant::" << a.name ();
- }
-
- virtual void
- traverse (SemanticGraph::ReadAttribute& a)
- {
- // Does nothing here, overridden for facet attributes.
- this->pre (a);
-
- Traversal::ReadAttribute::belongs (a, read_belongs_);
-
- os << endl;
-
- // Overridden for facet attributes.
- this->name (a);
-
- os << " (" << endl
- << STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_SNGL] << endl
- << "{";
-
- string swap_option = ctx.cl ().get_value ("custom-container", "");
- bool swapping = (swap_option == "upgradeable");
-
- if (swapping)
- {
- this->gen_swapping_get (a);
- }
-
- os << "return this->executor_->" << a.name () << " (" << endl
- << STRS[ENV_SNGL_ARG] << ");" << endl
- << "}";
- }
-
- protected:
- T& scope_;
-
- private:
- ReturnTypeNameEmitter read_type_name_emitter_;
- AceCheckReturnEmitter ace_check_return_emitter_;
- Traversal::Belongs read_belongs_;
- Traversal::Belongs ace_check_return_belongs_;
- };
-
struct FacetEmitter : Traversal::UnconstrainedInterface,
EmitterBase
{
@@ -860,12 +311,15 @@ namespace
};
struct FacetWriteAttributeEmitter
- : WriteAttributeEmitter<SemanticGraph::Interface>
+ : WriteAttributeSourceEmitter<SemanticGraph::Interface>
{
// Since swapping does not affect facets, we can just pass 'false'
// to the base class constructor, and not override gen_swapping_set().
FacetWriteAttributeEmitter (Context& c, SemanticGraph::Interface& i)
- : WriteAttributeEmitter<SemanticGraph::Interface> (c, i, false)
+ : WriteAttributeSourceEmitter<SemanticGraph::Interface> (c,
+ i,
+ false,
+ false)
{}
virtual void
@@ -873,7 +327,7 @@ namespace
{
os << "template <typename T>" << endl;
- WriteAttributeEmitter<SemanticGraph::Interface>::pre (a);
+ WriteAttributeSourceEmitter<SemanticGraph::Interface>::pre (a);
}
virtual void
@@ -890,11 +344,11 @@ namespace
};
struct FacetAttributeEmitter
- : AttributeEmitter<SemanticGraph::Interface>
+ : AttributeSourceEmitter<SemanticGraph::Interface>
{
FacetAttributeEmitter (Context& c,
SemanticGraph::Interface& i)
- : AttributeEmitter<SemanticGraph::Interface> (c, i)
+ : AttributeSourceEmitter<SemanticGraph::Interface> (c, i)
{}
// ReadWriteAttribute
@@ -919,7 +373,7 @@ namespace
{
os << "template <typename T>" << endl;
- AttributeEmitter<SemanticGraph::Interface>::pre (a);
+ AttributeSourceEmitter<SemanticGraph::Interface>::pre (a);
}
virtual void
@@ -944,7 +398,7 @@ namespace
{
os << "template <typename T>" << endl;
- AttributeEmitter<SemanticGraph::Interface>::pre (a);
+ AttributeSourceEmitter<SemanticGraph::Interface>::pre (a);
}
virtual void
@@ -967,9 +421,9 @@ namespace
<< i.scoped_name ().scope_name () << "::CCM_" << i.name ()
<< "_ptr executor," << endl
<< "::Components::CCMContext_ptr c)" << endl
- << ": executor_ (" << i.scoped_name ().scope_name () << "::CCM_"
+ << " : executor_ ( " << i.scoped_name ().scope_name () << "::CCM_"
<< i.name () << "::_duplicate (executor))," << endl
- << "ctx_ (::Components::CCMContext::_duplicate (c))" << endl
+ << " ctx_ ( ::Components::CCMContext::_duplicate (c))" << endl
<< "{"
<< "}";
@@ -1001,15 +455,15 @@ namespace
operation_emitter.edge_traverser (returns);
operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ ParameterEmitter<Traversal::InParameter> in_param (ctx);
+ ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
+ ParameterEmitter<Traversal::OutParameter> out_param (ctx);
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -1018,9 +472,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -1030,32 +484,32 @@ namespace
}
os << "template <typename T>" << endl
- << "CORBA::Object_ptr" << endl
+ << "::CORBA::Object_ptr" << endl
<< i.name () << "_Servant_T<T>::_get_component (" << endl
<< STRS[ENV_SNGL_SRC] << ")" << endl
- << "ACE_THROW_SPEC ((CORBA::SystemException))" << endl
+ << STRS[EXCP_SNGL] << endl
<< "{"
<< STRS[COMP_SC] << "_var sc =" << endl
- << STRS[COMP_SC] << "::_narrow (" << endl
- << "this->ctx_.in ()" << endl
- << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (CORBA::Object::_nil ());" << endl
- << "if (! CORBA::is_nil (sc.in ()))" << endl
+ << " " << STRS[COMP_SC] << "::_narrow (" << endl
+ << " this->ctx_.in ()" << endl
+ << " " << STRS[ENV_ARG] << ");"
+ << STRS[ACE_CR] << " ( ::CORBA::Object::_nil ());" << endl
+ << "if (! ::CORBA::is_nil (sc.in ()))" << endl
<< "{"
<< "return sc->get_CCM_object (" << endl
- << STRS[ENV_SNGL_ARG] << ");" << endl
+ << STRS[ENV_SNGL_ARG] << ");"
<< "}"
<< "::Components::EntityContext_var ec =" << endl
<< "::Components::EntityContext::_narrow (" << endl
<< "this->ctx_.in ()" << endl
<< STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (CORBA::Object::_nil ());" << endl
- << "if (! CORBA::is_nil (ec.in ()))" << endl
+ << STRS[ACE_CR] << " ( ::CORBA::Object::_nil ());" << endl
+ << "if (! ::CORBA::is_nil (ec.in ()))" << endl
<< "{"
<< "return ec->get_CCM_object (" << endl
- << STRS[ENV_SNGL_ARG] << ");" << endl
+ << STRS[ENV_SNGL_ARG] << ");"
<< "}"
- << STRS[ACE_TR] << " (CORBA::INTERNAL (), 0);" << endl
+ << STRS[ACE_TR] << " ( ::CORBA::INTERNAL (), 0);" << endl
<< "}" << endl;
i.context ().set ("facet_src_gen", true);
@@ -1078,8 +532,8 @@ namespace
{
ContextPortsEmitter (Context& c, SemanticGraph::Component& scope)
: EmitterBase (c),
- type_name_emitter_ (c.os ()),
- simple_type_name_emitter_ (c.os ()),
+ type_name_emitter_ (c),
+ simple_type_name_emitter_ (c),
scope_ (scope)
{
belongs_.node_traverser (type_name_emitter_);
@@ -1114,21 +568,22 @@ namespace
os << "_ptr c" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_AC] << "," << endl
<< STRS[EXCP_IC] << "))" << endl
<< "{"
- << "if (!CORBA::is_nil (this->ciao_uses_"
+ << "if (! ::CORBA::is_nil (this->ciao_uses_"
<< u.name () << "_.in ()))" << endl
<< "{"
- << "ACE_THROW (" << STRS[EXCP_AC] << " ());" << endl
+ << "ACE_THROW ( " << STRS[EXCP_AC] << " ());"
<< "}"
- << "if (CORBA::is_nil (c))" << endl
+ << "if ( ::CORBA::is_nil (c))" << endl
<< "{"
- << "ACE_THROW (" << STRS[EXCP_IC] << " ());" << endl
+ << "ACE_THROW ( " << STRS[EXCP_IC] << " ());"
<< "}"
- << "this->ciao_uses_" << u.name () << "_ =" << endl;
+ << "this->ciao_uses_" << u.name () << "_ =" << endl
+ << " ";
Traversal::SingleUserData::belongs (u, belongs_);
@@ -1141,14 +596,14 @@ namespace
<< scope_.name () << "_Context::disconnect_"
<< u.name () << " (" << endl
<< STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_NC] << "))" << endl
<< "{"
- << "if (CORBA::is_nil (this->ciao_uses_"
+ << "if ( ::CORBA::is_nil (this->ciao_uses_"
<< u.name () << "_.in ()))" << endl
<< "{"
- << STRS[ACE_TR] << " (" << endl
+ << STRS[ACE_TR] << " ( "
<< STRS[EXCP_NC] << " ()," << endl;
Traversal::SingleUserData::belongs (u, belongs_);
@@ -1170,27 +625,29 @@ namespace
<< STRS[EXCP_SNGL] << endl
<< "{"
<< u.scoped_name () << "Connections *tmp_retv = 0;"
- << "ACE_NEW_THROW_EX (" << endl
+ << "ACE_NEW_THROW_EX ("
<< "tmp_retv," << endl
<< u.scoped_name () << "Connections (" << endl
<< "this->ciao_uses_"
<< u.name () << "_.current_size ())," << endl
- << "CORBA::NO_MEMORY ());" << endl << endl
+ << "::CORBA::NO_MEMORY ());" << endl
<< u.scoped_name () << "Connections_var retv"
<< " = tmp_retv;" << endl
<< "retv->length (this->ciao_uses_" << u.name ()
<< "_.current_size ());" << endl;
- os << "CORBA::ULong i = 0;" << endl;
+ os << "::CORBA::ULong i = 0;" << endl;
- os << "for (ACE_Active_Map_Manager< " << endl;
+ os << "for (ACE_Active_Map_Manager< " << endl
+ << " ";
Traversal::MultiUserData::belongs (u, belongs_);
os << "_var>::iterator iter =" << endl
- << " this->ciao_uses_" << u.name () << "_.begin ();"
- << " iter != this->ciao_uses_" << u.name () << "_.end ();"
- << " ++iter)" << endl
+ << " this->ciao_uses_" << u.name () << "_.begin ();" << endl
+ << "iter != this->ciao_uses_" << u.name () << "_.end ();"
+ << endl
+ << "++iter)" << endl
<< "{"
<< "ACE_Active_Map_Manager< " << endl;
@@ -1206,10 +663,10 @@ namespace
<< STRS[ENV_ARG] << ");"
<< STRS[ACE_CR] << " (0);" << endl;
- os << "ACE_NEW_THROW_EX (" << endl
+ os << "ACE_NEW_THROW_EX ("
<< "retv[i].ck.inout ()," << endl
- << "CIAO::Map_Key_Cookie (entry.ext_id_)," << endl
- << "CORBA::NO_MEMORY ());" << endl
+ << "::CIAO::Map_Key_Cookie (entry.ext_id_)," << endl
+ << "::CORBA::NO_MEMORY ());" << endl
<< "++i;" << endl
<< "}";
@@ -1224,14 +681,15 @@ namespace
os << "_ptr c" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_ECL] << "," << endl
<< STRS[EXCP_IC] << "))" << endl
<< "{"
- << "if (CORBA::is_nil (c))" << endl
+ << "if ( ::CORBA::is_nil (c))" << endl
<< "{"
- << STRS[ACE_TR] << " (" << STRS[EXCP_IC] << " (), 0);" << endl
+ << STRS[ACE_TR] << " ( "
+ << STRS[EXCP_IC] << " (), 0);" << endl
<< "}";
Traversal::MultiUserData::belongs (u, belongs_);
@@ -1246,16 +704,17 @@ namespace
os << "if (this->ciao_uses_" << u.name ()
<< "_.bind (conn.in (), key) == -1)" << endl
<< "{"
- << STRS[ACE_TR] << " (" << STRS[EXCP_IC] << " (), 0);" << endl
+ << STRS[ACE_TR] << " ( "
+ << STRS[EXCP_IC] << " (), 0);" << endl
<< "}";
os << "conn._retn ();" << endl;
os << STRS[COMP_CK] << " * ck = 0;"
- << "ACE_NEW_THROW_EX (" << endl
+ << "ACE_NEW_THROW_EX ("
<< "ck," << endl
- << "CIAO::Map_Key_Cookie (key)," << endl
- << "CORBA::NO_MEMORY ());" << endl;
+ << "::CIAO::Map_Key_Cookie (key)," << endl
+ << "::CORBA::NO_MEMORY ());" << endl;
os << "return ck;" << endl
@@ -1268,7 +727,7 @@ namespace
<< u.name () << " (" << endl
<< STRS[COMP_CK] << " * ck" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_IC] << "))" << endl
<< "{";
@@ -1278,10 +737,10 @@ namespace
os << "_var retv;"
<< "ACE_Active_Map_Manager_Key key;" << endl;
- os << "if (ck == 0 || ! CIAO::Map_Key_Cookie::extract (ck, key))"
+ os << "if (! CIAO::Map_Key_Cookie::extract (ck, key))"
<< endl
<< "{"
- << STRS[ACE_TR] << " (" << endl
+ << STRS[ACE_TR] << " ( "
<< STRS[EXCP_IC] << " ()," << endl;
Traversal::MultiUserData::belongs (u, belongs_);
@@ -1292,7 +751,7 @@ namespace
os << "if (this->ciao_uses_" << u.name ()
<< "_.unbind (key, retv) != 0)" << endl
<< "{"
- << STRS[ACE_TR] << " (" << endl
+ << STRS[ACE_TR] << " ( "
<< STRS[EXCP_IC] << " ()," << endl;
Traversal::MultiUserData::belongs (u, belongs_);
@@ -1317,15 +776,16 @@ namespace
<< STRS[ENV_SRC] << ")" << endl
<< STRS[EXCP_SNGL] << endl
<< "{"
- << "for (ACE_Active_Map_Manager< " << endl; //@@ gcc bug
+ << "for (ACE_Active_Map_Manager< " << endl
+ << " ";
Traversal::PublisherData::belongs (p, belongs_);
os << "Consumer_var>::iterator iter =" << endl
- << "this->ciao_publishes_" << p.name ()
- << "_map_.begin ();"
+ << " this->ciao_publishes_" << p.name ()
+ << "_map_.begin ();" << endl
<< "iter != this->ciao_publishes_" << p.name ()
- << "_map_.end ();"
+ << "_map_.end ();" << endl
<< "++iter)" << endl
<< "{"
<< "(*iter).int_id_->push_";
@@ -1339,11 +799,11 @@ namespace
<< "}";
os << "for (ACE_Active_Map_Manager< " << endl
- << STRS[COMP_ECB] << "_var>::iterator giter =" << endl
- << "this->ciao_publishes_" << p.name ()
- << "_generic_map_.begin ();"
+ << " " << STRS[COMP_ECB] << "_var>::iterator giter =" << endl
+ << " this->ciao_publishes_" << p.name ()
+ << "_generic_map_.begin ();" << endl
<< "giter != this->ciao_publishes_" << p.name ()
- << "_generic_map_.end ();"
+ << "_generic_map_.end ();" << endl
<< "++giter)" << endl
<< "{"
<< "(*giter).int_id_->push_event" << " (" << endl
@@ -1361,18 +821,19 @@ namespace
os << "Consumer_ptr c" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_ECL] << "))" << endl
<< "{"
- << "if (CORBA::is_nil (c))" << endl
+ << "if ( ::CORBA::is_nil (c))" << endl
<< "{"
- << STRS[ACE_TR] << " (CORBA::BAD_PARAM (), 0);" << endl
+ << STRS[ACE_TR] << " ( ::CORBA::BAD_PARAM (), 0);" << endl
<< "}";
Traversal::PublisherData::belongs (p, belongs_);
- os<< "Consumer_var sub =" << endl;
+ os << "Consumer_var sub =" << endl
+ << " ";
Traversal::PublisherData::belongs (p, belongs_);
@@ -1382,10 +843,10 @@ namespace
<< "_map_.bind (sub.in (), key);"
<< "sub._retn ();" << endl
<< STRS[COMP_CK] << " * retv = 0;"
- << "ACE_NEW_THROW_EX (" << endl
+ << "ACE_NEW_THROW_EX ("
<< "retv," << endl
<< "::CIAO::Map_Key_Cookie (key)," << endl
- << "CORBA::NO_MEMORY ());" << endl
+ << "::CORBA::NO_MEMORY ());" << endl
<< "return retv;" << endl
<< "}";
@@ -1394,26 +855,26 @@ namespace
<< p.name () << "_generic (" << endl
<< STRS[COMP_ECB] << "_ptr c" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_ECL] << "))" << endl
<< "{"
- << "if (CORBA::is_nil (c))" << endl
+ << "if ( ::CORBA::is_nil (c))" << endl
<< "{"
- << STRS[ACE_TR] << " (CORBA::BAD_PARAM (), 0);" << endl
+ << STRS[ACE_TR] << " ( ::CORBA::BAD_PARAM (), 0);" << endl
<< "}";
os << STRS[COMP_ECB] << "_var sub =" << endl
- << STRS[COMP_ECB] << "::_duplicate (c);" << endl
+ << " " << STRS[COMP_ECB] << "::_duplicate (c);" << endl
<< "ACE_Active_Map_Manager_Key key;"
<< "this->ciao_publishes_" << p.name ()
<< "_generic_map_.bind (sub.in (), key);"
<< "sub._retn ();" << endl
<< STRS[COMP_CK] << " * retv = 0;"
- << "ACE_NEW_THROW_EX (" << endl
+ << "ACE_NEW_THROW_EX ("
<< "retv," << endl
<< "::CIAO::Map_Key_Cookie (key)," << endl
- << "CORBA::NO_MEMORY ());" << endl
+ << "::CORBA::NO_MEMORY ());" << endl
<< "return retv;" << endl
<< "}";
@@ -1424,7 +885,7 @@ namespace
<< p.name () << " (" << endl
<< STRS[COMP_CK] << " *ck" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_IC] << "))" << endl
<< "{"
@@ -1432,7 +893,7 @@ namespace
<< "if (ck == 0 || ::CIAO::Map_Key_Cookie::extract (ck, key) == false)"
<< endl
<< "{"
- << STRS[ACE_TR] << " (" << endl
+ << STRS[ACE_TR] << " ( "
<< STRS[EXCP_IC] << " ()," << endl;
Traversal::PublisherData::belongs (p, belongs_);
@@ -1454,7 +915,7 @@ namespace
os << "if (this->ciao_publishes_" << p.name ()
<< "_generic_map_.unbind (key, ecb) != 0)" << endl
<< "{"
- << STRS[ACE_TR] << " (" << endl
+ << STRS[ACE_TR] << " ( "
<< STRS[EXCP_IC] << " ()," << endl;
Traversal::PublisherData::belongs (p, belongs_);
@@ -1500,19 +961,19 @@ namespace
os << "Consumer_ptr c" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_AC] << "))" << endl
<< "{"
- << "if (CORBA::is_nil (c))" << endl
+ << "if ( ::CORBA::is_nil (c))" << endl
<< "{"
- << "ACE_THROW (CORBA::BAD_PARAM ());" << endl
- << "}" << endl
- << "if (! CORBA::is_nil (this->ciao_emits_" << e.name ()
+ << "ACE_THROW ( ::CORBA::BAD_PARAM ());" << endl
+ << "}"
+ << "if (! ::CORBA::is_nil (this->ciao_emits_" << e.name ()
<< "_consumer_.in ()))" << endl
<< "{"
- << "ACE_THROW (" << STRS[EXCP_AC] << " ());" << endl
- << "}" << endl
+ << "ACE_THROW ( " << STRS[EXCP_AC] << " ());" << endl
+ << "}"
<< "this->ciao_emits_" << e.name ()
<< "_consumer_ = " << endl;
@@ -1527,27 +988,27 @@ namespace
<< scope_.name () << "_Context::disconnect_"
<< e.name () << " (" << endl
<< STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_NC] << "))" << endl
<< "{"
- << "if (CORBA::is_nil (this->ciao_emits_" << e.name ()
+ << "if ( ::CORBA::is_nil (this->ciao_emits_" << e.name ()
<< "_consumer_.in ()))" << endl
<< "{"
- << STRS[ACE_TR] << " (" << endl
+ << STRS[ACE_TR] << " ( "
<< STRS[EXCP_NC] << " ()," << endl;
Traversal::EmitterData::belongs (e, belongs_);
os << "Consumer::_nil ());" << endl
- << "}" << endl
+ << "}"
<< "return this->ciao_emits_" << e.name ()
<< "_consumer_._retn ();" << endl
<< "}";
}
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
SimpleTypeNameEmitter simple_type_name_emitter_;
Traversal::Belongs belongs_;
Traversal::Belongs simple_belongs_;
@@ -1560,7 +1021,7 @@ namespace
{
SwappableGetConsumersEmitter (Context& c)
: EmitterBase (c),
- type_name_emitter_ (c.os ())
+ type_name_emitter_ (c)
{
belongs_.node_traverser (type_name_emitter_);
}
@@ -1573,10 +1034,10 @@ namespace
<< "{"
<< "_ciao_size = this->ciao_publishes_" << p.name ()
<< "_map_.current_size ();" << endl
- << "ACE_NEW_THROW_EX (" << endl
+ << "ACE_NEW_THROW_EX ("
<< "tmp," << endl
<< STRS[COMP_CD] << " (_ciao_size)," << endl
- << "CORBA::NO_MEMORY ());" << endl
+ << "::CORBA::NO_MEMORY ());" << endl
<< "retval = tmp;"
<< "retval->length (_ciao_size);" << endl
<< "ACE_Active_Map_Manager<" << endl;
@@ -1586,12 +1047,13 @@ namespace
os << "Consumer_var>::iterator end =" << endl
<< " this->ciao_publishes_" << p.name ()
<< "_map_.end ();" << endl
- << "for (ACE_Active_Map_Manager<" << endl;
+ << "for (ACE_Active_Map_Manager<" << endl
+ << " ";
Traversal::PublisherData::belongs (p, belongs_);
os << "Consumer_var>::iterator iter =" << endl
- << " this->ciao_publishes_" << p.name ()
+ << " this->ciao_publishes_" << p.name ()
<< "_map_.begin ();"
<< "iter != end;"
<< "++iter)" << endl
@@ -1612,15 +1074,15 @@ namespace
<< "e.int_id_.in ()" << endl
<< STRS[ENV_ARG] << ");"
<< STRS[ACE_CR] << " (0);" << endl
- << "if (CORBA::is_nil (c.in ()))"
+ << "if ( ::CORBA::is_nil (c.in ()))"
<< "{"
- << STRS[ACE_TR] << " (" << STRS[EXCP_IC] << " (), 0);"
+ << STRS[ACE_TR] << " ( " << STRS[EXCP_IC] << " (), 0);"
<< "}"
<< "::Components::ConsumerDescription *cd = 0;"
- << "ACE_NEW_THROW_EX (" << endl
+ << "ACE_NEW_THROW_EX ("
<< "cd," << endl
<< "OBV_Components::ConsumerDescription ()," << endl
- << "CORBA::NO_MEMORY ());" << endl
+ << "::CORBA::NO_MEMORY ());" << endl
<< "::Components::ConsumerDescription_var safe = cd;"
<< "safe->name (\"\");"
<< "safe->type_id (\"\");"
@@ -1638,7 +1100,7 @@ namespace
}
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
Traversal::Belongs belongs_;
};
@@ -1736,23 +1198,23 @@ namespace
<< t.name () << "_Context::get_registered_consumers (" << endl
<< "const char *publisher_name" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_IN] << "," << endl
<< STRS[EXCP_IC] << "))" << endl
<< "{"
<< "if (publisher_name == 0)" << endl
<< "{"
- << STRS[ACE_TR] << " (" << STRS[EXCP_IN] << " (), 0);"
+ << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);"
<< "}"
<< STRS[COMP_CD] << " *tmp = 0;"
<< STRS[COMP_CD] << "_var retval;"
<< "CORBA::ULong _ciao_index = 0;"
<< "CORBA::ULong _ciao_size = 0;"
- << STRS[ACE_UA] << " (tmp);"
- << STRS[ACE_UA] << " (retval);"
- << STRS[ACE_UA] << " (_ciao_index);"
- << STRS[ACE_UA] << " (_ciao_size);" << endl;
+ << STRS[ACE_UA] << " (tmp);"
+ << STRS[ACE_UA] << " (retval);"
+ << STRS[ACE_UA] << " (_ciao_index);"
+ << STRS[ACE_UA] << " (_ciao_size);" << endl;
// Generate IF block for each event sources.
{
@@ -1771,7 +1233,7 @@ namespace
component_emitter.traverse (t);
}
- os << STRS[ACE_TR] << " (" << STRS[EXCP_IN] << " (), 0);"
+ os << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);"
<< "}";
}
@@ -1796,12 +1258,12 @@ namespace
// Nested classes used by ServantEmitter.
private:
- struct NavigationEmitsEmitter : Traversal::EmitterData,
- EmitterBase
+ struct EmitsConnectEmitter : Traversal::EmitterData,
+ EmitterBase
{
- NavigationEmitsEmitter (Context& c)
+ EmitsConnectEmitter (Context& c)
: EmitterBase (c),
- type_name_emitter_ (c.os ())
+ type_name_emitter_ (c)
{
belongs_.node_traverser (type_name_emitter_);
}
@@ -1815,17 +1277,18 @@ namespace
Traversal::EmitterData::belongs (t, belongs_);
- os << "Consumer_var _ciao_consumer =" << endl;
+ os << "Consumer_var _ciao_consumer =" << endl
+ << " ";
Traversal::EmitterData::belongs (t, belongs_);
os << "Consumer::_narrow (" << endl
- << "consumer" << endl
- << STRS[ENV_ARG] << ");"
+ << " consumer" << endl
+ << " " << STRS[ENV_ARG] << ");"
<< "ACE_CHECK;" << endl
- << "if (::CORBA::is_nil (_ciao_consumer.in ()))" << endl
+ << "if ( ::CORBA::is_nil (_ciao_consumer.in ()))" << endl
<< "{"
- << "ACE_THROW (" << STRS[EXCP_IC] << " ());"
+ << "ACE_THROW ( " << STRS[EXCP_IC] << " ());"
<< endl
<< "}"
<< "this->connect_" << t.name ()
@@ -1837,10 +1300,30 @@ namespace
}
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
Traversal::Belongs belongs_;
};
+ struct EmitsDisconnectEmitter : Traversal::EmitterData,
+ EmitterBase
+ {
+ EmitsDisconnectEmitter (Context& c)
+ : EmitterBase (c)
+ {
+ }
+
+ virtual void
+ traverse (Type& t)
+ {
+ os << "if (ACE_OS::strcmp (source_name, \""
+ << t.name () << "\") == 0)" << endl
+ << "{"
+ << "return this->disconnect_" << t.name ()
+ << " (" << STRS[ENV_SNGL_ARG] << ");" << endl
+ << "}";
+ }
+ };
+
struct NavigationGetFacetExecEmitter : Traversal::ProviderData,
EmitterBase
{
@@ -1866,7 +1349,7 @@ namespace
PublishesEmitter (Context& c,
SemanticGraph::Component& scope)
: EmitterBase (c),
- type_name_emitter_ (c.os ()),
+ type_name_emitter_ (c),
scope_ (scope)
{
belongs_.node_traverser (type_name_emitter_);
@@ -1883,7 +1366,7 @@ namespace
os << "Consumer_ptr c" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_ECL] << "))" << endl
<< "{";
@@ -1908,7 +1391,7 @@ namespace
<< "_Servant::subscribe_" << p.name () << "_generic (" << endl
<< STRS[COMP_ECB] << "_ptr c" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_ECL] << "))" << endl
<< "{";
@@ -1932,7 +1415,7 @@ namespace
<< "_Servant::unsubscribe_" << p.name () << " (" << endl
<< STRS[COMP_CK] << " *ck" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_IC] << "))" << endl
<< "{";
@@ -1940,7 +1423,7 @@ namespace
if (swapping)
{
os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " (";
+ << STRS[ACE_CR] << " ( ";
Traversal::PublisherData::belongs (p, belongs_);
@@ -1955,7 +1438,7 @@ namespace
}
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
Traversal::Belongs belongs_;
SemanticGraph::Component& scope_;
};
@@ -1966,7 +1449,7 @@ namespace
{
UsesConnectEmitter (Context& c)
: EmitterBase (c),
- type_name_emitter_ (c.os ())
+ type_name_emitter_ (c)
{
belongs_.node_traverser (type_name_emitter_);
}
@@ -1988,9 +1471,9 @@ namespace
<< "connection" << endl
<< STRS[ENV_ARG] << ");"
<< STRS[ACE_CR] << " (0);" << endl
- << "if (::CORBA::is_nil (_ciao_conn.in ()))" << endl
+ << "if ( ::CORBA::is_nil (_ciao_conn.in ()))" << endl
<< "{"
- << STRS[ACE_TR] << " (" << STRS[EXCP_IC] << " (), 0);"
+ << STRS[ACE_TR] << " ( " << STRS[EXCP_IC] << " (), 0);"
<< endl
<< "}"
<< "// Simplex connect." << endl
@@ -2019,9 +1502,9 @@ namespace
<< "connection" << endl
<< STRS[ENV_ARG] << ");"
<< STRS[ACE_CR] << " (0);" << endl
- << "if (::CORBA::is_nil (_ciao_conn.in ()))" << endl
+ << "if ( ::CORBA::is_nil (_ciao_conn.in ()))" << endl
<< "{"
- << STRS[ACE_TR] << " (" << STRS[EXCP_IC] << " (), 0);"
+ << STRS[ACE_TR] << " ( " << STRS[EXCP_IC] << " (), 0);"
<< endl
<< "}"
<< "// Multiplex connect." << endl
@@ -2032,7 +1515,7 @@ namespace
}
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
Traversal::Belongs belongs_;
};
@@ -2064,6 +1547,12 @@ namespace
<< u.name () << "\") == 0)" << endl
<< "{"
<< "// Multiplex disconnect." << endl
+ << "if (ck == 0)" << endl
+ << "{"
+ << STRS[ACE_TR] << " ( "
+ << STRS[EXCP_CR] << " ()," << endl
+ << "::CORBA::Object::_nil ());" << endl
+ << "}"
<< "return this->disconnect_" << u.name () << " (" << endl
<< "ck" << endl
<< STRS[ENV_ARG] << ");" << endl
@@ -2077,7 +1566,7 @@ namespace
{
UsesEmitter (Context& c, SemanticGraph::Component& scope)
: EmitterBase (c),
- type_name_emitter_ (c.os ()),
+ type_name_emitter_ (c),
scope_ (scope)
{
belongs_.node_traverser (type_name_emitter_);
@@ -2094,7 +1583,7 @@ namespace
os << "_ptr c" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_AC] << "," << endl
<< STRS[EXCP_IC] << "))" << endl
@@ -2111,7 +1600,7 @@ namespace
<< scope_.name () << "_Servant::disconnect_"
<< u.name () << " (" << endl
<< STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_NC] << "))" << endl
<< "{"
@@ -2146,7 +1635,7 @@ namespace
os << "_ptr c" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_ECL] << "," << endl
<< STRS[EXCP_IC] << "))" << endl
@@ -2164,7 +1653,7 @@ namespace
<< u.name () << " (" << endl
<< STRS[COMP_CK] << " * ck" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_IC] << "))" << endl
<< "{"
@@ -2188,7 +1677,7 @@ namespace
}
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
Traversal::Belongs belongs_;
SemanticGraph::Component& scope_;
};
@@ -2198,7 +1687,7 @@ namespace
{
PublishesSubscribeEmitter (Context& c)
: EmitterBase (c),
- type_name_emitter_ (c.os ())
+ type_name_emitter_ (c)
{
belongs_.node_traverser (type_name_emitter_);
}
@@ -2212,7 +1701,8 @@ namespace
Traversal::PublisherData::belongs (p, belongs_);
- os << "Consumer_var sub =" << endl;
+ os << "Consumer_var sub =" << endl
+ << " ";
Traversal::PublisherData::belongs (p, belongs_);
@@ -2221,15 +1711,16 @@ namespace
<< STRS[ENV_ARG] << ");"
<< STRS[ACE_CR] << " (0);" << endl;
- os << "if (CORBA::is_nil (sub.in ()))" << endl
+ os << "if ( ::CORBA::is_nil (sub.in ()))" << endl
<< "{"
- << "CORBA::Boolean substitutable =" << endl
- << "subscribe->ciao_is_substitutable (" << endl;
+ << "::CORBA::Boolean substitutable =" << endl
+ << " subscribe->ciao_is_substitutable (" << endl
+ << " ";
Traversal::PublisherData::belongs (p, belongs_);
os << "::_tao_obv_static_repository_id ()" << endl
- << STRS[ENV_ARG] << ");"
+ << " " << STRS[ENV_ARG] << ");"
<< STRS[ACE_CR] << " (0);" << endl;
os << "if (substitutable)" << endl
@@ -2240,7 +1731,7 @@ namespace
<< "}"
<< "else" << endl
<< "{"
- << STRS[ACE_TR] << " (" << STRS[EXCP_IC] << " (), 0);" << endl
+ << STRS[ACE_TR] << " ( " << STRS[EXCP_IC] << " (), 0);" << endl
<< "}"
<< "}"
<< "else" << endl
@@ -2253,7 +1744,7 @@ namespace
}
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
Traversal::Belongs belongs_;
};
@@ -2283,7 +1774,7 @@ namespace
{
EmitsEmitter (Context& c, SemanticGraph::Component& scope)
: EmitterBase (c),
- type_name_emitter_ (c.os ()),
+ type_name_emitter_ (c),
scope_ (scope)
{
belongs_.node_traverser (type_name_emitter_);
@@ -2300,7 +1791,7 @@ namespace
os << "Consumer_ptr c" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_AC] << "))" << endl
<< "{"
@@ -2316,7 +1807,7 @@ namespace
<< scope_.name () << "_Servant::disconnect_"
<< e.name () << " (" << endl
<< STRS[ENV_SNGL_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_NC] << "))" << endl
<< "{"
@@ -2327,25 +1818,24 @@ namespace
}
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
Traversal::Belongs belongs_;
SemanticGraph::Component& scope_;
};
- struct ServantTypeNameEmitter : Traversal::Type
+ struct ServantTypeNameEmitter : Traversal::Type,
+ EmitterBase
{
- ServantTypeNameEmitter (std::ostream& os_)
- : os (os_)
- {}
+ ServantTypeNameEmitter (Context& c)
+ : EmitterBase (c)
+ {
+ }
virtual void
traverse (SemanticGraph::Type& t)
{
os << t.name () << "_Servant";
}
-
- private:
- std::ostream& os;
};
struct FacetProvidesEmitter : Traversal::ProviderData,
@@ -2354,11 +1844,11 @@ namespace
FacetProvidesEmitter (Context& c,
SemanticGraph::Component& scope)
: EmitterBase (c),
- type_name_emitter_ (c.os ()),
- simple_type_name_emitter_ (c.os ()),
- servant_type_name_emitter_ (c.os ()),
- enclosing_type_name_emitter_ (c.os ()),
- repo_id_emitter_ (c.os ()),
+ type_name_emitter_ (c),
+ simple_type_name_emitter_ (c),
+ servant_type_name_emitter_ (c),
+ enclosing_type_name_emitter_ (c),
+ repo_id_emitter_ (c),
scope_ (scope)
{
belongs_.node_traverser (type_name_emitter_);
@@ -2386,7 +1876,7 @@ namespace
if (swapping)
{
os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " (";
+ << STRS[ACE_CR] << " ( ";
Traversal::ProviderData::belongs (p, belongs_);
@@ -2404,9 +1894,9 @@ namespace
<< "}";
os << "::CORBA::Object_var obj =" << endl
- << "this->provide_" << p.name () << "_i ("
+ << " this->provide_" << p.name () << "_i ("
<< STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " (";
+ << STRS[ACE_CR] << " ( ";
Traversal::ProviderData::belongs (p, belongs_);
@@ -2417,14 +1907,15 @@ namespace
Traversal::ProviderData::belongs (p, belongs_);
- os << "_var fo =" << endl;
+ os << "_var fo =" << endl
+ << " ";
Traversal::ProviderData::belongs (p, belongs_);
- os << "::_narrow (" << endl
+ os << "::_narrow ("
<< "obj.in ()" << endl
<< STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (";
+ << STRS[ACE_CR] << " ( ";
Traversal::ProviderData::belongs (p, belongs_);
@@ -2447,7 +1938,7 @@ namespace
<< STRS[EXCP_SNGL] << endl
<< "{"
<< "::CORBA::Object_ptr ret =" << endl
- << "this->lookup_facet (\"" << p.name () << "\");" << endl;
+ << " this->lookup_facet (\"" << p.name () << "\");" << endl;
os << "if (! ::CORBA::is_nil (ret))" << endl
<< "{"
@@ -2495,18 +1986,18 @@ namespace
os << "ACE_CString obj_id (this->ins_name_);"
<< "obj_id += \"_" << p.name () << "\";" << endl;
- os << "ACE_NEW_THROW_EX ( " << endl
- << " tmp," << endl
- << " MACRO_MADNESS_TYPEDEF (" << endl
- << " obj_id.c_str ()," << endl
- << " \"" << p.name () << "\"," << endl
- << " CIAO::Port_Activator::Facet," << endl
- << " 0," << endl
- << " this->context_," << endl
- << " this)," << endl
- << " CORBA::NO_MEMORY ());" << endl;
-
- os << "CIAO::Servant_Activator *sa = " << endl
+ os << "ACE_NEW_THROW_EX ("
+ << "tmp," << endl
+ << "MACRO_MADNESS_TYPEDEF (" << endl
+ << "obj_id.c_str ()," << endl
+ << "\"" << p.name () << "\"," << endl
+ << "::CIAO::Port_Activator::Facet," << endl
+ << "0," << endl
+ << "this->context_," << endl
+ << "this)," << endl
+ << "::CORBA::NO_MEMORY ());" << endl;
+
+ os << "::CIAO::Servant_Activator *sa = " << endl
<< "this->container_->ports_servant_activator ();" << endl
<< "if (!sa->register_port_activator (tmp))" << endl
<< "{"
@@ -2519,29 +2010,34 @@ namespace
os << "::CORBA::Object_var obj =" << endl
<< " this->container_->generate_reference (" << endl
- << " obj_id.c_str ()," << endl
- << " ";
+ << " obj_id.c_str ()," << endl
+ << " ";
Traversal::ProviderData::belongs (p, repo_id_belongs_);
os << "," << endl
- << " CIAO::Container::Facet_Consumer" << endl
- << " " << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (";
+ << " ::CIAO::Container::Facet_Consumer" << endl
+ << " " << STRS[ENV_ARG] << ");"
+ << STRS[ACE_CR] << " ( ";
Traversal::ProviderData::belongs (p, belongs_);
os << "::_nil ());" << endl
- << "this->add_facet (" << endl
- << "\"" << p.name () << "\"," << endl
- << "obj.in ());" << endl;
+ << "this->add_facet (\"" << p.name () << "\"," << endl
+ << "obj.in ()" << endl
+ << STRS[ENV_ARG] << ");"
+ << STRS[ACE_CR] << " ( ";
+
+ Traversal::ProviderData::belongs (p, belongs_);
+
+ os << "::_nil ());" << endl;
os << "return obj._retn ();" << endl
<< "}";
}
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
SimpleTypeNameEmitter simple_type_name_emitter_;
ServantTypeNameEmitter servant_type_name_emitter_;
EnclosingTypeNameEmitter enclosing_type_name_emitter_;
@@ -2559,9 +2055,9 @@ namespace
{
ConsumesEmitter (Context& c, SemanticGraph::Component& scope)
: EmitterBase (c),
- type_name_emitter_ (c.os ()),
- simple_type_name_emitter_ (c.os ()),
- repo_id_emitter_ (c.os ()),
+ type_name_emitter_ (c),
+ simple_type_name_emitter_ (c),
+ repo_id_emitter_ (c),
scope_ (scope)
{
belongs_.node_traverser (type_name_emitter_);
@@ -2590,10 +2086,10 @@ namespace
<< c.scoped_name ().scope_name ().scope_name () << "::CCM_"
<< c.scoped_name ().scope_name ().simple_name ()
<< "_Context_ptr c)" << endl
- << ": executor_ (" << c.scoped_name ().scope_name ().scope_name ()
+ << " : executor_ ( " << c.scoped_name ().scope_name ().scope_name ()
<< "::CCM_" << c.scoped_name ().scope_name ().simple_name ()
<< "::_duplicate (executor))," << endl
- << "ctx_ (" << c.scoped_name ().scope_name ().scope_name ()
+ << " ctx_ ( " << c.scoped_name ().scope_name ().scope_name ()
<< "::CCM_" << c.scoped_name ().scope_name ().simple_name ()
<< "_Context::_duplicate (c))" << endl
<< "{"
@@ -2613,7 +2109,7 @@ namespace
<< "{"
<< "}";
- os << "CORBA::Object_ptr" << endl
+ os << "::CORBA::Object_ptr" << endl
<< scope_.name () << "_Servant::";
Traversal::ConsumerData::belongs (c, simple_belongs_);
@@ -2661,14 +2157,15 @@ namespace
<< "_Servant::push_event (" << endl
<< "::Components::EventBase *ev" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_BET] << "))" << endl
<< "{";
Traversal::ConsumerData::belongs (c, belongs_);
- os << "_var ev_type =" << endl;
+ os << "_var ev_type =" << endl
+ << " ";
Traversal::ConsumerData::belongs (c, belongs_);
@@ -2684,7 +2181,7 @@ namespace
<< STRS[ENV_ARG] << ");" << endl
<< "return;" << endl
<< "}"
- << "ACE_THROW (" << STRS[EXCP_BET] << " ());" << endl
+ << "ACE_THROW ( " << STRS[EXCP_BET] << " ());" << endl
<< "}";
os << "CORBA::Boolean" << endl
@@ -2700,21 +2197,21 @@ namespace
<< "{"
<< "if (event_repo_id == 0)" << endl
<< "{"
- << STRS[ACE_TR] << " (CORBA::BAD_PARAM (), false);" << endl
+ << STRS[ACE_TR] << " ( ::CORBA::BAD_PARAM (), false);" << endl
<< "}"
<< scope_.name () << "_Context *ctx =" << endl
- << scope_.name () << "_Context::_narrow (" << endl
- << "this->ctx_.in ()" << endl
- << STRS[ENV_ARG] << ");"
+ << " " << scope_.name () << "_Context::_narrow (" << endl
+ << " this->ctx_.in ()" << endl
+ << " " << STRS[ENV_ARG] << ");"
<< STRS[ACE_CR] << " (false);" << endl;
os << "CORBA::ORB_ptr orb = ctx->_ciao_the_Container ()->the_ORB ();"
<< endl;
os << "CORBA::ValueFactory f =" << endl
- << "orb->lookup_value_factory (" << endl
- << "event_repo_id" << endl
- << STRS[ENV_ARG] << ");"
+ << " orb->lookup_value_factory (" << endl
+ << " event_repo_id" << endl
+ << " " << STRS[ENV_ARG] << ");"
<< STRS[ACE_CR] << " (false);" << endl;
os << "if (f == 0)" << endl
@@ -2722,7 +2219,7 @@ namespace
<< "return false;" << endl
<< "}"
<< "CORBA::ValueBase_var v =" << endl
- << "f->create_for_unmarshal (" << STRS[ENV_SNGL_ARG] << ");"
+ << " f->create_for_unmarshal (" << STRS[ENV_SNGL_ARG] << ");"
<< STRS[ACE_CR] << " (false);" << endl;
os << "f->_remove_ref ();" << endl;
@@ -2759,9 +2256,9 @@ namespace
<< "}";
os << "::Components::EventConsumerBase_var obj =" << endl
- << "this->get_consumer_" << c.name () << "_i (" << endl
- << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " (";
+ << " this->get_consumer_" << c.name () << "_i (" << endl
+ << " " << STRS[ENV_SNGL_ARG] << ");"
+ << STRS[ACE_CR] << " ( ";
Traversal::ConsumerData::belongs (c, belongs_);
@@ -2769,14 +2266,15 @@ namespace
Traversal::ConsumerData::belongs (c, belongs_);
- os << "Consumer_var eco =" << endl;
+ os << "Consumer_var eco =" << endl
+ << " ";
Traversal::ConsumerData::belongs (c, belongs_);
os << "Consumer::_narrow (" << endl
- << "obj.in ()" << endl
- << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (";
+ << " obj.in ()" << endl
+ << " " << STRS[ENV_ARG] << ");"
+ << STRS[ACE_CR] << " ( ";
Traversal::ConsumerData::belongs (c, belongs_);
@@ -2799,14 +2297,14 @@ namespace
<< STRS[EXCP_SNGL] << endl
<< "{"
<< "::Components::EventConsumerBase_ptr ret =" << endl
- << "this->lookup_consumer (\"" << c.name () << "\");" << endl;
+ << " this->lookup_consumer (\"" << c.name () << "\");" << endl;
os << "if (! ::CORBA::is_nil (ret))" << endl
<< "{"
<< "return ret;"
<< "}";
- os << "CIAO::Port_Activator_T<" << endl;
+ os << "::CIAO::Port_Activator_T<" << endl;
os << scope_.name () << "_Servant::";
@@ -2845,19 +2343,19 @@ namespace
os << "ACE_CString obj_id (this->ins_name_);"
<< "obj_id += \"_" << c.name () << "\";" << endl;
- os << "ACE_NEW_THROW_EX ( " << endl
- << " tmp," << endl
- << " MACRO_MADNESS_TYPEDEF (" << endl
- << " obj_id.c_str ()," << endl
- << " \"" << c.name () << "\"," << endl
- << " CIAO::Port_Activator::Sink," << endl
- << " this->executor_.in ()," << endl
- << " this->context_," << endl
- << " this)," << endl
- << " CORBA::NO_MEMORY ());" << endl;
-
- os << "CIAO::Servant_Activator *sa = " << endl
- << "this->container_->ports_servant_activator ();" <<endl
+ os << "ACE_NEW_THROW_EX (" << endl
+ << "tmp," << endl
+ << "MACRO_MADNESS_TYPEDEF ("
+ << "obj_id.c_str ()," << endl
+ << "\"" << c.name () << "\"," << endl
+ << "::CIAO::Port_Activator::Sink," << endl
+ << "this->executor_.in ()," << endl
+ << "this->context_," << endl
+ << "this)," << endl
+ << "::CORBA::NO_MEMORY ());" << endl;
+
+ os << "::CIAO::Servant_Activator *sa =" << endl
+ << " this->container_->ports_servant_activator ();" << endl
<< "if (!sa->register_port_activator (tmp))" << endl
<< "{"
<< "return ";
@@ -2869,40 +2367,45 @@ namespace
os << "::CORBA::Object_var obj =" << endl
<< " this->container_->generate_reference (" << endl
- << " obj_id.c_str ()," << endl
- << " ";
+ << " obj_id.c_str ()," << endl
+ << " ";
Traversal::ConsumerData::belongs (c, repo_id_belongs_);
os << "," << endl
- << " CIAO::Container::Facet_Consumer" << endl
- << " " << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (";
+ << " ::CIAO::Container::Facet_Consumer" << endl
+ << " " << STRS[ENV_ARG] << ");"
+ << STRS[ACE_CR] << " ( ";
Traversal::ConsumerData::belongs (c, belongs_);
os << "Consumer::_nil ());" << endl;
os << "::Components::EventConsumerBase_var ecb =" << endl
- << "::Components::EventConsumerBase::_narrow (" << endl
- << "obj.in ()" << endl
- << STRS[ENV_ARG] << ");"
- << STRS[ACE_CR] << " (";
+ << " ::Components::EventConsumerBase::_narrow (" << endl
+ << " obj.in ()" << endl
+ << " " << STRS[ENV_ARG] << ");"
+ << STRS[ACE_CR] << " ( ";
Traversal::ConsumerData::belongs (c, belongs_);
os << "Consumer::_nil ());" << endl;
- os << "this->add_consumer (" << endl
- << "\"" << c.name () << "\"," << endl
- << "ecb.in ());" << endl;
+ os << "this->add_consumer (\"" << c.name () << "\"," << endl
+ << "ecb.in ()" << endl
+ << STRS[ENV_ARG] << ");"
+ << STRS[ACE_CR] << " ( ";
+
+ Traversal::ConsumerData::belongs (c, belongs_);
+
+ os << "Consumer::_nil ());" << endl;
os << "return ecb._retn ();" << endl
<< "}";
}
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
SimpleTypeNameEmitter simple_type_name_emitter_;
ConsumerRepoIdEmitter repo_id_emitter_;
Traversal::Belongs belongs_;
@@ -2918,8 +2421,9 @@ namespace
{
RegisterValueFactoryEmitter (Context& c)
: EmitterBase (c),
- type_name_emitter_ (c.os ()),
- cerr_type_name_emitter_ (cerr),
+ c_ (cerr, c.export_macro (), c.cl ()),
+ type_name_emitter_ (c),
+ cerr_type_name_emitter_ (c_),
gen_factory_ (true)
{
belongs_.node_traverser (type_name_emitter_);
@@ -3002,8 +2506,9 @@ namespace
}
private:
- TypeNameEmitter type_name_emitter_;
- TypeNameEmitter cerr_type_name_emitter_;
+ Context c_;
+ FullTypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter cerr_type_name_emitter_;
Traversal::Belongs belongs_;
Traversal::Belongs cerr_belongs_;
bool gen_factory_;
@@ -3088,8 +2593,8 @@ namespace
traverse (SemanticGraph::Provider& p)
{
os << "obj_var =" << endl
- << "this->provide_" << p.name () << "_i (" << endl
- << STRS[ENV_SNGL_ARG] << ");"
+ << " this->provide_" << p.name () << "_i (" << endl
+ << " " << STRS[ENV_SNGL_ARG] << ");"
<< "ACE_CHECK;" << endl;
}
@@ -3112,8 +2617,8 @@ namespace
traverse (SemanticGraph::Consumer& p)
{
os << "ecb_var =" << endl
- << "this->get_consumer_" << p.name () << "_i (" << endl
- << STRS[ENV_SNGL_ARG] << ");"
+ << " this->get_consumer_" << p.name () << "_i (" << endl
+ << " " << STRS[ENV_SNGL_ARG] << ");"
<< "ACE_CHECK;" << endl;
}
};
@@ -3131,13 +2636,231 @@ namespace
{
Traversal::Belongs delegate_belongs;
- SetAttributeDelegationEmitter delegater (ctx.os (), a);
+ SetAttributeDelegationEmitter delegater (ctx, a);
delegate_belongs.node_traverser (delegater);
Traversal::ReadWriteAttribute::belongs (a, delegate_belongs);
}
};
+ struct UsesSizeCalculator : Traversal::SingleUserData,
+ Traversal::MultiUserData,
+ EmitterBase
+ {
+ UsesSizeCalculator (Context& c, unsigned long& size)
+ : EmitterBase (c),
+ size_ (size)
+ {
+ }
+
+ virtual void
+ traverse (SemanticGraph::SingleUser&)
+ {
+ ++size_;
+ }
+
+ virtual void
+ traverse (SemanticGraph::MultiUser&)
+ {
+ ++size_;
+ }
+
+ private:
+ unsigned long& size_;
+ };
+
+ struct UsesGetAllEmitter : Traversal::SingleUserData,
+ Traversal::MultiUserData,
+ EmitterBase
+ {
+ UsesGetAllEmitter (Context& c)
+ : EmitterBase (c),
+ type_name_emitter_ (c),
+ repo_id_emitter_ (c),
+ slot_ (0UL)
+ {
+ belongs_.node_traverser (type_name_emitter_);
+ repo_id_belongs_.node_traverser (repo_id_emitter_);
+ }
+
+ virtual void
+ traverse (SemanticGraph::SingleUser& u)
+ {
+ os << "::CIAO::Servant_Impl_Base::describe_simplex_receptacle<"
+ << endl
+ << " ";
+
+ Traversal::SingleUserData::belongs (u, belongs_);
+
+ os << "_var" << endl
+ << " > (\"" << u.name () << "\"," << endl;
+
+ Traversal::SingleUserData::belongs (u, repo_id_belongs_);
+
+ os << "," << endl
+ << "this->context_->ciao_uses_" << u.name () << "_," << endl
+ << "safe_retval," << endl
+ << slot_ << "UL);" << endl;
+
+ ++slot_;
+ }
+
+ virtual void
+ traverse (SemanticGraph::MultiUser& u)
+ {
+ os << "::CIAO::Servant_Impl_Base::describe_multiplex_receptacle<"
+ << endl
+ << " ";
+
+ Traversal::MultiUserData::belongs (u, belongs_);
+
+ os << "_var" << endl
+ << " > (\"" << u.name () << "\"," << endl;
+
+ Traversal::MultiUserData::belongs (u, repo_id_belongs_);
+
+ os << "," << endl
+ << "this->context_->ciao_uses_" << u.name () << "_," << endl
+ << "safe_retval," << endl
+ << slot_ << "UL);" << endl;
+
+ ++slot_;
+ }
+
+ private:
+ FullTypeNameEmitter type_name_emitter_;
+ RepoIdEmitter repo_id_emitter_;
+ Traversal::Belongs belongs_;
+ Traversal::Belongs repo_id_belongs_;
+ unsigned long slot_;
+ };
+
+ struct PublishesSizeCalculator : Traversal::PublisherData,
+ EmitterBase
+ {
+ PublishesSizeCalculator (Context& c, unsigned long& size)
+ : EmitterBase (c),
+ size_ (size)
+ {
+ }
+
+ virtual void
+ traverse (SemanticGraph::Publisher&)
+ {
+ ++size_;
+ }
+
+ private:
+ unsigned long& size_;
+ };
+
+ struct PublishesGetAllEmitter : Traversal::PublisherData,
+ EmitterBase
+ {
+ PublishesGetAllEmitter (Context& c)
+ : EmitterBase (c),
+ type_name_emitter_ (c),
+ repo_id_emitter_ (c),
+ slot_ (0UL)
+ {
+ belongs_.node_traverser (type_name_emitter_);
+ repo_id_belongs_.node_traverser (repo_id_emitter_);
+ }
+
+ virtual void
+ traverse (SemanticGraph::Publisher& p)
+ {
+ os << "::CIAO::Servant_Impl_Base::describe_pub_event_source<"
+ << endl
+ << " ";
+
+ Traversal::PublisherData::belongs (p, belongs_);
+
+ os << "Consumer_var" << endl
+ << " > (\"" << p.name () << "\"," << endl;
+
+ Traversal::PublisherData::belongs (p, repo_id_belongs_);
+
+ os << "," << endl
+ << "this->context_->ciao_publishes_" << p.name ()
+ << "_map_," << endl
+ << "safe_retval," << endl
+ << slot_ << "UL);" << endl;
+
+ ++slot_;
+ }
+
+ private:
+ FullTypeNameEmitter type_name_emitter_;
+ RepoIdEmitter repo_id_emitter_;
+ Traversal::Belongs belongs_;
+ Traversal::Belongs repo_id_belongs_;
+ unsigned long slot_;
+ };
+
+ struct EmitsSizeCalculator : Traversal::EmitterData,
+ EmitterBase
+ {
+ EmitsSizeCalculator (Context& c, unsigned long& size)
+ : EmitterBase (c),
+ size_ (size)
+ {
+ }
+
+ virtual void
+ traverse (SemanticGraph::Emitter&)
+ {
+ ++size_;
+ }
+
+ private:
+ unsigned long& size_;
+ };
+
+ struct EmitsGetAllEmitter : Traversal::EmitterData,
+ EmitterBase
+ {
+ EmitsGetAllEmitter (Context& c)
+ : EmitterBase (c),
+ type_name_emitter_ (c),
+ repo_id_emitter_ (c),
+ slot_ (0UL)
+ {
+ belongs_.node_traverser (type_name_emitter_);
+ repo_id_belongs_.node_traverser (repo_id_emitter_);
+ }
+
+ virtual void
+ traverse (SemanticGraph::Emitter& e)
+ {
+ os << "::CIAO::Servant_Impl_Base::describe_emit_event_source<"
+ << endl
+ << " ";
+
+ Traversal::EmitterData::belongs (e, belongs_);
+
+ os << "Consumer_var" << endl
+ << " > (\"" << e.name () << "\"," << endl;
+
+ Traversal::EmitterData::belongs (e, repo_id_belongs_);
+
+ os << "," << endl
+ << "this->context_->ciao_emits_" << e.name ()
+ << "_consumer_," << endl
+ << "safe_retval," << endl
+ << slot_ << "UL);" << endl;
+
+ ++slot_;
+ }
+
+ private:
+ FullTypeNameEmitter type_name_emitter_;
+ RepoIdEmitter repo_id_emitter_;
+ Traversal::Belongs belongs_;
+ Traversal::Belongs repo_id_belongs_;
+ unsigned long slot_;
+ };
+
public:
virtual void
pre (Type& t)
@@ -3159,7 +2882,7 @@ namespace
<< " comp_svnt_base (exe, h, hs, c)," << endl
<< " ins_name_ (ins_name)" << endl
<< "{"
- << "ACE_NEW (" << endl
+ << "ACE_NEW ("
<< "this->context_," << endl
<< t.name () << "_Context (h, c, this));" << endl;
@@ -3185,9 +2908,9 @@ namespace
os << "ACE_TRY_NEW_ENV" << endl
<< "{"
<< "::Components::SessionComponent_var scom =" << endl
- << "::Components::SessionComponent::_narrow (" << endl
- << "exe" << endl
- << STRS[ENV_ARG] << ");"
+ << " ::Components::SessionComponent::_narrow (" << endl
+ << " exe" << endl
+ << " " << STRS[ENV_ARG] << ");"
<< "ACE_TRY_CHECK;" << endl
<< "if (! ::CORBA::is_nil (scom.in ()))" << endl
<< "{"
@@ -3229,7 +2952,7 @@ namespace
<< "ACE_CHECK;" << endl;
}
- os << "for (CORBA::ULong i = 0; i < descr.length (); ++i)" << endl
+ os << "for ( ::CORBA::ULong i = 0; i < descr.length (); ++i)" << endl
<< "{"
<< "const char *descr_name = descr[i]->name ();"
<< "::CORBA::Any &descr_value = descr[i]->value ();" << endl;
@@ -3314,7 +3037,7 @@ namespace
<< "const char *name," << endl
<< "::CORBA::Object_ptr connection" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_IN] << "," << endl
<< STRS[EXCP_IC] << "," << endl
@@ -3333,7 +3056,7 @@ namespace
<< STRS[ACE_UA] << " (connection);" << endl
<< "if (name == 0)" << endl
<< "{"
- << STRS[ACE_TR] << " (" << STRS[EXCP_IN] << " (), 0);" << endl
+ << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);" << endl
<< "}";
// Generate IF block in connect operation for each receptacle.
@@ -3353,15 +3076,15 @@ namespace
component_emitter.traverse (t);
}
- os << STRS[ACE_TR] << " (" << STRS[EXCP_IN] << " (), 0);" << endl
+ os << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);" << endl
<< "}";
- os << "CORBA::Object_ptr" << endl
+ os << "::CORBA::Object_ptr" << endl
<< t.name () << "_Servant::disconnect (" << endl
<< "const char *name," << endl
<< STRS[COMP_CK] << " * ck" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_IN] << "," << endl
<< STRS[EXCP_IC] << "," << endl
@@ -3373,13 +3096,13 @@ namespace
if (swapping)
{
os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " (CORBA::Object::_nil ());" << endl;
+ << STRS[ACE_CR] << " ( ::CORBA::Object::_nil ());" << endl;
}
os << "if (name == 0)" << endl
<< "{"
- << STRS[ACE_TR] << " (" << endl
- << STRS[EXCP_IN] << " ()," << endl
+ << STRS[ACE_TR] << " ( "
+ << STRS[EXCP_BP] << "," << endl
<< "::CORBA::Object::_nil ());" << endl
<< "}";
@@ -3400,9 +3123,61 @@ namespace
component_emitter.traverse (t);
}
- os << STRS[ACE_TR] << " (" << endl
+ os << STRS[ACE_TR] << " ( "
<< STRS[EXCP_IN] << " ()," << endl
- << "::CORBA::Object::_nil ());" << endl
+ << "::CORBA::Object::_nil ());"
+ << "}";
+
+ os << STRS[COMP_RD] << " *" << endl
+ << t.name () << "_Servant::get_all_receptacles (" << endl
+ << STRS[ENV_SNGL_SRC] << ")" << endl
+ << STRS[EXCP_SNGL] << endl
+ << "{"
+ << STRS[COMP_RD] << " *retval = 0;"
+ << "ACE_NEW_RETURN (retval," << endl
+ << STRS[COMP_RD] << "," << endl
+ << "0);"
+ << STRS[COMP_RD] << "_var safe_retval = retval;";
+
+ unsigned long size = 0;
+
+ // Calculate the number of uses ports.
+ {
+ Traversal::Component component_emitter;
+
+ Traversal::Inherits inherits;
+ inherits.node_traverser (component_emitter);
+
+ Traversal::Defines defines;
+ component_emitter.edge_traverser (defines);
+ component_emitter.edge_traverser (inherits);
+
+ UsesSizeCalculator size_calculator (ctx, size);
+ defines.node_traverser (size_calculator);
+
+ component_emitter.traverse (t);
+ }
+
+ os << "safe_retval->length (" << size << "UL);" << endl;
+
+ // Generate a sequence element assignment for each uses port.
+ {
+ Traversal::Component component_emitter;
+
+ Traversal::Inherits inherits;
+ inherits.node_traverser (component_emitter);
+
+ Traversal::Defines defines;
+ component_emitter.edge_traverser (defines);
+ component_emitter.edge_traverser (inherits);
+
+ UsesGetAllEmitter get_all_emitter (ctx);
+ defines.node_traverser (get_all_emitter);
+
+ component_emitter.traverse (t);
+ }
+
+ os << "return safe_retval._retn ();"
<< "}";
// Generate generic operations for receptacles.
@@ -3428,7 +3203,7 @@ namespace
<< "const char * emitter_name," << endl
<< STRS[COMP_ECB] << "_ptr consumer" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_IN] << "," << endl
<< STRS[EXCP_AC] << "," << endl
@@ -3438,12 +3213,12 @@ namespace
if (swapping)
{
os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << "ACE_CHECK;" << endl;
+ << STRS[ACE_CK] << ";" << endl;
}
os << "if (emitter_name == 0)" << endl
<< "{"
- << "ACE_THROW (::CORBA::BAD_PARAM ());" << endl
+ << STRS[ACE_TH] << " ( " << STRS[EXCP_BP] << ");" << endl
<< "}";
// Generate an IF block for each 'emits' declaration.
@@ -3457,23 +3232,168 @@ namespace
component_emitter.edge_traverser (defines);
component_emitter.edge_traverser (inherits);
- NavigationEmitsEmitter navigation_emits_emitter (ctx);
- defines.node_traverser (navigation_emits_emitter);
+ EmitsConnectEmitter emits_connect_emitter (ctx);
+ defines.node_traverser (emits_connect_emitter);
component_emitter.traverse (t);
}
os << STRS[ACE_UA] << " (consumer);"
- << "ACE_THROW ("
+ << STRS[ACE_TH] << " ( "
<< STRS[EXCP_IN] << " ());" << endl
<< "}";
+ os << STRS[COMP_ECB] << "_ptr" << endl
+ << t.name () << "_Servant::disconnect_consumer (" << endl
+ << "const char *source_name" << endl
+ << STRS[ENV_SRC] << ")" << endl
+ << STRS[EXCP_START] << " "
+ << STRS[EXCP_SYS] << "," << endl
+ << STRS[EXCP_IN] << "," << endl
+ << STRS[EXCP_NC] << "))" << endl
+ << "{";
+
+ if (swapping)
+ {
+ os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
+ << STRS[ACE_CR] << " ( "
+ << STRS[COMP_ECB] << "::_nil ());" << endl;
+ }
+
+ os << "if (source_name == 0)" << endl
+ << "{"
+ << STRS[ACE_TR] << " ( " << STRS[EXCP_BP] << "," << endl
+ << STRS[COMP_ECB] << "::_nil ());" << endl
+ << "}";
+
+ // Generate an IF block for each 'emits' declaration.
+ {
+ Traversal::Component component_emitter;
+
+ Traversal::Inherits inherits;
+ inherits.node_traverser (component_emitter);
+
+ Traversal::Defines defines;
+ component_emitter.edge_traverser (defines);
+ component_emitter.edge_traverser (inherits);
+
+ EmitsDisconnectEmitter emits_disconnect_emitter (ctx);
+ defines.node_traverser (emits_disconnect_emitter);
+
+ component_emitter.traverse (t);
+ }
+
+ os << STRS[ACE_TR] << " ( "
+ << STRS[EXCP_IN] << " ()," << endl
+ << STRS[COMP_ECB] << "::_nil ());" << endl
+ << "}";
+
+ os << STRS[COMP_PD] << " *" << endl
+ << t.name () << "_Servant::get_all_publishers (" << endl
+ << STRS[ENV_SNGL_SRC] << ")" << endl
+ << STRS[EXCP_SNGL] << endl
+ << "{"
+ << STRS[COMP_PD] << " *retval = 0;"
+ << "ACE_NEW_RETURN (retval," << endl
+ << STRS[COMP_PD] << "," << endl
+ << "0);"
+ << STRS[COMP_PD] << "_var safe_retval = retval;";
+
+ size = 0UL;
+
+ {
+ Traversal::Component component_emitter;
+
+ Traversal::Inherits inherits;
+ inherits.node_traverser (component_emitter);
+
+ Traversal::Defines defines;
+ component_emitter.edge_traverser (defines);
+ component_emitter.edge_traverser (inherits);
+
+ PublishesSizeCalculator publishes_size_calculator (ctx, size);
+ defines.node_traverser (publishes_size_calculator);
+
+ component_emitter.traverse (t);
+ }
+
+ os << "safe_retval->length (" << size << "UL);" << endl;
+
+ {
+ Traversal::Component component_emitter;
+
+ Traversal::Inherits inherits;
+ inherits.node_traverser (component_emitter);
+
+ Traversal::Defines defines;
+ component_emitter.edge_traverser (defines);
+ component_emitter.edge_traverser (inherits);
+
+ PublishesGetAllEmitter publishes_get_all_emitter (ctx);
+ defines.node_traverser (publishes_get_all_emitter);
+
+ component_emitter.traverse (t);
+ }
+
+ os << "return safe_retval._retn ();"
+ << "}";
+
+ os << STRS[COMP_ED] << " *" << endl
+ << t.name () << "_Servant::get_all_emitters (" << endl
+ << STRS[ENV_SNGL_SRC] << ")" << endl
+ << STRS[EXCP_SNGL] << endl
+ << "{"
+ << STRS[COMP_ED] << " *retval = 0;"
+ << "ACE_NEW_RETURN (retval," << endl
+ << STRS[COMP_ED] << "," << endl
+ << "0);"
+ << STRS[COMP_ED] << "_var safe_retval = retval;";
+
+ size = 0UL;
+
+ {
+ Traversal::Component component_emitter;
+
+ Traversal::Inherits inherits;
+ inherits.node_traverser (component_emitter);
+
+ Traversal::Defines defines;
+ component_emitter.edge_traverser (defines);
+ component_emitter.edge_traverser (inherits);
+
+ EmitsSizeCalculator emits_size_calculator (ctx, size);
+ defines.node_traverser (emits_size_calculator);
+
+ component_emitter.traverse (t);
+ }
+
+ os << "safe_retval->length (" << size << "UL);" << endl;
+
+ {
+ Traversal::Component component_emitter;
+
+ Traversal::Inherits inherits;
+ inherits.node_traverser (component_emitter);
+
+ Traversal::Defines defines;
+ component_emitter.edge_traverser (defines);
+ component_emitter.edge_traverser (inherits);
+
+ EmitsGetAllEmitter emits_get_all_emitter (ctx);
+ defines.node_traverser (emits_get_all_emitter);
+
+ component_emitter.traverse (t);
+ }
+
+ os << "return safe_retval._retn ();"
+ << "}";
+
os << STRS[COMP_CK] << " *" << endl
<< t.name () << "_Servant::subscribe (" << endl
<< "const char *publisher_name," << endl
<< STRS[COMP_ECB] << "_ptr subscribe" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_IN] << "," << endl
<< STRS[EXCP_IC] << "," << endl
@@ -3490,7 +3410,7 @@ namespace
<< STRS[ACE_UA] << " (subscribe);" << endl
<< "if (publisher_name == 0)" << endl
<< "{"
- << STRS[ACE_TR] << " (" << STRS[EXCP_IN] << " (), 0);"
+ << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);"
<< endl
<< "}";
@@ -3511,7 +3431,7 @@ namespace
component_emitter.traverse (t);
}
- os << STRS[ACE_TR] << " (" << STRS[EXCP_IN] << " (), 0);" << endl
+ os << STRS[ACE_TR] << " ( " << STRS[EXCP_IN] << " (), 0);" << endl
<< "}";
os << STRS[COMP_ECB] << "_ptr" << endl
@@ -3520,7 +3440,7 @@ namespace
<< "const char *publisher_name," << endl
<< STRS[COMP_CK] << " *ck" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl
<< STRS[EXCP_IN] << "," << endl
<< STRS[EXCP_IC] << "))" << endl
@@ -3529,7 +3449,7 @@ namespace
if (swapping)
{
os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " (" << STRS[COMP_ECB]
+ << STRS[ACE_CR] << " ( " << STRS[COMP_ECB]
<< "::_nil ());" << endl;
}
@@ -3537,7 +3457,7 @@ namespace
<< STRS[ACE_UA] << " (ck);" << endl
<< "if (publisher_name == 0)" << endl
<< "{"
- << STRS[ACE_TR] << " (" << endl
+ << STRS[ACE_TR] << " ( "
<< STRS[EXCP_IN] << " ()," << endl
<< STRS[COMP_ECB] << "::_nil ());" << endl
<< "}";
@@ -3559,7 +3479,7 @@ namespace
component_emitter.traverse (t);
}
- os << STRS[ACE_TR] << " (" << endl
+ os << STRS[ACE_TR] << " ( "
<< STRS[EXCP_IN] << " ()," << endl
<< STRS[COMP_ECB] << "::_nil ());" << endl
<< "}";
@@ -3581,25 +3501,24 @@ namespace
component_emitter.traverse (t);
}
- os << "CORBA::Object_ptr" << endl
+ os << "::CORBA::Object_ptr" << endl
<< t.name ()
<< "_Servant::get_facet_executor (" << endl
<< "const char *name" << endl
<< STRS[ENV_SRC] << ")" << endl
- << STRS[EXCP_START] << endl
+ << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "))" << endl
<< "{";
if (swapping)
{
os << "this->activate_component (" << STRS[ENV_SNGL_ARG] << ");"
- << STRS[ACE_CR] << " (CORBA::Object::_nil ());" << endl;
+ << STRS[ACE_CR] << " ( ::CORBA::Object::_nil ());" << endl;
}
os << "if (name == 0)" << endl
<< "{"
- << STRS[ACE_TR] << " (" << endl
- << "::CORBA::BAD_PARAM ()," << endl
+ << STRS[ACE_TR] << " ( " << STRS[EXCP_BP] << "," << endl
<< "::CORBA::Object::_nil ());" << endl
<< "}";
@@ -3620,8 +3539,9 @@ namespace
component_emitter.traverse (t);
}
- os << " return CORBA::Object::_nil ();"
+ os << "return ::CORBA::Object::_nil ();"
<< "}";
+
os << "// Supported operations." << endl << endl;
// Generate operations for all supported interfaces.
@@ -3643,7 +3563,7 @@ namespace
interface_emitter.edge_traverser (defines);
interface_emitter.edge_traverser (interface_inherits);
- AttributeEmitter<SemanticGraph::Component> attribute_emitter (ctx, t);
+ AttributeSourceEmitter<SemanticGraph::Component> attribute_emitter (ctx, t);
defines.node_traverser (attribute_emitter);
OperationEmitter<SemanticGraph::Component> operation_emitter (ctx, t);
@@ -3657,15 +3577,15 @@ namespace
operation_emitter.edge_traverser (returns);
operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ ParameterEmitter<Traversal::InParameter> in_param (ctx);
+ ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
+ ParameterEmitter<Traversal::OutParameter> out_param (ctx);
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -3674,9 +3594,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -3697,7 +3617,7 @@ namespace
Traversal::Defines defines;
component_emitter.edge_traverser (defines);
- AttributeEmitter<SemanticGraph::Component> attribute_emitter (ctx, t);
+ AttributeSourceEmitter<SemanticGraph::Component> attribute_emitter (ctx, t);
defines.node_traverser (attribute_emitter);
component_emitter.traverse (t);
@@ -3739,8 +3659,8 @@ namespace
{
HomeEmitter (Context& c)
: EmitterBase (c),
- repo_id_emitter_ (c.os ()),
- flat_name_emitter_ (c.os ())
+ repo_id_emitter_ (c),
+ flat_name_emitter_ (c)
{
repo_id_manages_.node_traverser (repo_id_emitter_);
flat_name_manages_.node_traverser (flat_name_emitter_);
@@ -3804,10 +3724,10 @@ namespace
{
FactoryOperationEmitter (Context& c, SemanticGraph::Home& home)
: EmitterBase (c),
- return_type_name_emitter_ (c.os ()),
- enclosing_type_name_emitter_ (c.os ()),
- simple_type_name_emitter_ (c.os ()),
- type_name_emitter_ (c.os ()),
+ return_type_name_emitter_ (c),
+ enclosing_type_name_emitter_ (c),
+ simple_type_name_emitter_ (c),
+ type_name_emitter_ (c),
scope_ (home)
{
returns_.node_traverser (return_type_name_emitter_);
@@ -3858,7 +3778,7 @@ namespace
virtual void
raises_pre (SemanticGraph::HomeFactory&)
{
- os << STRS[EXCP_START] << endl
+ os << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl;
}
@@ -3894,7 +3814,7 @@ namespace
operation_emitter.traverse (hf);
}
- os << STRS[ACE_CR] << " (";
+ os << STRS[ACE_CR] << " ( ";
Traversal::Home::manages (scope_, manages_);
@@ -3918,7 +3838,7 @@ namespace
<< "_ciao_ec.in ()" << endl
<< STRS[ENV_ARG] << ");" << endl;
- os << STRS[ACE_CR] << " (";
+ os << STRS[ACE_CR] << " ( ";
Traversal::Home::manages (scope_, manages_);
@@ -3941,7 +3861,7 @@ namespace
ReturnTypeNameEmitter return_type_name_emitter_;
EnclosingTypeNameEmitter enclosing_type_name_emitter_;
SimpleTypeNameEmitter simple_type_name_emitter_;
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
Traversal::Returns returns_;
Traversal::Manages enclosing_manages_;
Traversal::Manages simple_manages_;
@@ -3955,10 +3875,10 @@ namespace
{
FinderOperationEmitter (Context& c, SemanticGraph::Home& home)
: EmitterBase (c),
- type_name_emitter_ (c.os ()),
- return_type_name_emitter_ (c.os ()),
- enclosing_type_name_emitter_ (c.os ()),
- simple_type_name_emitter_ (c.os ()),
+ type_name_emitter_ (c),
+ return_type_name_emitter_ (c),
+ enclosing_type_name_emitter_ (c),
+ simple_type_name_emitter_ (c),
scope_ (home)
{
returns_.node_traverser (return_type_name_emitter_);
@@ -4009,7 +3929,7 @@ namespace
virtual void
raises_pre (SemanticGraph::HomeFinder&)
{
- os << STRS[EXCP_START] << endl
+ os << STRS[EXCP_START] << " "
<< STRS[EXCP_SYS] << "," << endl;
}
@@ -4023,8 +3943,7 @@ namespace
post (SemanticGraph::HomeFinder& hf)
{
os << "{"
- << STRS[ACE_TR] << " (" << endl
- << "::CORBA::NO_IMPLEMENT ()," << endl;
+ << STRS[ACE_TR] << " ( ::CORBA::NO_IMPLEMENT ()," << endl;
Traversal::HomeFinder::returns (hf, simple_returns_);
@@ -4039,7 +3958,7 @@ namespace
}
private:
- TypeNameEmitter type_name_emitter_;
+ FullTypeNameEmitter type_name_emitter_;
ReturnTypeNameEmitter return_type_name_emitter_;
EnclosingTypeNameEmitter enclosing_type_name_emitter_;
SimpleTypeNameEmitter simple_type_name_emitter_;
@@ -4108,15 +4027,15 @@ namespace
home_operation_emitter.edge_traverser (returns);
home_operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ ParameterEmitter<Traversal::InParameter> in_param (ctx);
+ ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
+ ParameterEmitter<Traversal::OutParameter> out_param (ctx);
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -4125,9 +4044,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -4155,7 +4074,7 @@ namespace
interface_emitter.edge_traverser (defines);
interface_emitter.edge_traverser (interface_inherits);
- AttributeEmitter<SemanticGraph::Home> attribute_emitter (ctx, t);
+ AttributeSourceEmitter<SemanticGraph::Home> attribute_emitter (ctx, t);
defines.node_traverser (attribute_emitter);
OperationEmitter<SemanticGraph::Home> operation_emitter (ctx, t);
@@ -4169,15 +4088,15 @@ namespace
operation_emitter.edge_traverser (returns);
operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ ParameterEmitter<Traversal::InParameter> in_param (ctx);
+ ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
+ ParameterEmitter<Traversal::OutParameter> out_param (ctx);
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -4186,9 +4105,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -4223,15 +4142,15 @@ namespace
finder_operation_emitter.edge_traverser (returns);
finder_operation_emitter.edge_traverser (raises);
- ParameterEmitter<Traversal::InParameter> in_param (os);
- ParameterEmitter<Traversal::InOutParameter> inout_param (os);
- ParameterEmitter<Traversal::OutParameter> out_param (os);
+ ParameterEmitter<Traversal::InParameter> in_param (ctx);
+ ParameterEmitter<Traversal::InOutParameter> inout_param (ctx);
+ ParameterEmitter<Traversal::OutParameter> out_param (ctx);
receives.node_traverser (in_param);
receives.node_traverser (inout_param);
receives.node_traverser (out_param);
- ReturnTypeNameEmitter return_type_emitter (os);
- TypeNameEmitter type_name_emitter (os);
+ ReturnTypeNameEmitter return_type_emitter (ctx);
+ FullTypeNameEmitter type_name_emitter (ctx);
returns.node_traverser (return_type_emitter);
raises.node_traverser (type_name_emitter);
@@ -4240,9 +4159,9 @@ namespace
inout_param.edge_traverser (inout_belongs);
out_param.edge_traverser (out_belongs);
- INArgTypeNameEmitter in_arg_emitter (os);
- INOUTArgTypeNameEmitter inout_arg_emitter (os);
- OUTArgTypeNameEmitter out_arg_emitter (os);
+ INArgTypeNameEmitter in_arg_emitter (ctx);
+ INOUTArgTypeNameEmitter inout_arg_emitter (ctx);
+ OUTArgTypeNameEmitter out_arg_emitter (ctx);
in_belongs.node_traverser (in_arg_emitter);
inout_belongs.node_traverser (inout_arg_emitter);
out_belongs.node_traverser (out_arg_emitter);
@@ -4263,7 +4182,7 @@ namespace
Traversal::Defines defines;
home_emitter.edge_traverser (defines);
- AttributeEmitter<SemanticGraph::Home> attribute_emitter (ctx, t);
+ AttributeSourceEmitter<SemanticGraph::Home> attribute_emitter (ctx, t);
defines.node_traverser (attribute_emitter);
home_emitter.traverse (t);
@@ -4280,7 +4199,7 @@ namespace
<< regex::perl_s (t.scoped_name ().str (), "/::/_/")
<< "_Servant (" << endl
<< "::Components::HomeExecutorBase_ptr p," << endl
- << "CIAO::Session_Container *c," << endl
+ << "::CIAO::Session_Container *c," << endl
<< "const char *ins_name" << endl
<< STRS[ENV_SRC] << ")" << endl
<< "{"
@@ -4314,30 +4233,6 @@ namespace
Traversal::Manages repo_id_manages_;
Traversal::Manages flat_name_manages_;
};
-
- //@@ There is exactly the same code in header generator.
- //
- struct CompositionEmitter : Traversal::Composition, EmitterBase
- {
- CompositionEmitter (Context& c)
- : EmitterBase (c)
- {
- }
-
- virtual void
- pre (Type& t)
- {
- ctx.composition_name (t.name ().str ());
-
- os << STRS[CIDL_NS] << t.name () << "{";
- }
-
- virtual void
- post (Type&)
- {
- os << "}";
- }
- };
}
ServantSourceEmitter::ServantSourceEmitter (std::ostream& os_,
@@ -4453,9 +4348,3 @@ ServantSourceEmitter::generate (TranslationUnit& u)
unit.traverse (u);
}
-/*
- * Local Variables:
- * mode: C++
- * c-basic-offset: 2
- * End:
- */
diff --git a/TAO/CIAO/CIDLC/Upcase.hpp b/TAO/CIAO/CIDLC/Upcase.hpp
new file mode 100644
index 00000000000..cf114dd8392
--- /dev/null
+++ b/TAO/CIAO/CIDLC/Upcase.hpp
@@ -0,0 +1,21 @@
+// file : CIDLC/Upcase.hpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef UPCASE_HPP
+#define UPCASE_HPP
+
+#include <cctype>
+
+namespace
+{
+ // On some platforms toupper can be something other than a
+ // function.
+ int
+ upcase (int c)
+ {
+ return std::toupper (c);
+ }
+}
+
+#endif // UPCASE_HPP
diff --git a/TAO/CIAO/CIDLC/UtilityTypeNameEmitters.cpp b/TAO/CIAO/CIDLC/UtilityTypeNameEmitters.cpp
new file mode 100644
index 00000000000..499cf3e4086
--- /dev/null
+++ b/TAO/CIAO/CIDLC/UtilityTypeNameEmitters.cpp
@@ -0,0 +1,57 @@
+// file : CIDLC/UtilityTypeNameEmitters.cpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#include "UtilityTypeNameEmitters.hpp"
+
+FullTypeNameEmitter::FullTypeNameEmitter (Context& c)
+ : EmitterBase (c)
+{
+}
+
+void
+FullTypeNameEmitter::traverse (SemanticGraph::Type& t)
+{
+ os << t.scoped_name ();
+}
+
+// ===================================================
+
+SimpleTypeNameEmitter::SimpleTypeNameEmitter (Context& c)
+ : EmitterBase (c)
+{
+}
+
+void
+SimpleTypeNameEmitter::traverse (SemanticGraph::Type& t)
+{
+ os << t.name ();
+}
+
+// ===================================================
+
+EnclosingTypeNameEmitter::EnclosingTypeNameEmitter (Context& c)
+ : EmitterBase (c)
+{
+}
+
+void
+EnclosingTypeNameEmitter::traverse (SemanticGraph::Type& t)
+{
+ os << t.scoped_name ().scope_name ();
+}
+
+// ===================================================
+
+StrippedTypeNameEmitter::StrippedTypeNameEmitter (Context& c)
+ : EmitterBase (c)
+{
+}
+
+void
+StrippedTypeNameEmitter::traverse (SemanticGraph::Type& t)
+{
+ ScopedName scoped (t.scoped_name ());
+ os << Name (scoped.begin () + 1, scoped.end ());
+}
+
diff --git a/TAO/CIAO/CIDLC/UtilityTypeNameEmitters.hpp b/TAO/CIAO/CIDLC/UtilityTypeNameEmitters.hpp
new file mode 100644
index 00000000000..aece771ca69
--- /dev/null
+++ b/TAO/CIAO/CIDLC/UtilityTypeNameEmitters.hpp
@@ -0,0 +1,56 @@
+// file : CIDLC/UtilityTypeNameEmitters.hpp
+// author : Jeff Parsons <j.parsons@vanderbilt.edu>
+// cvs-id : $Id$
+
+#ifndef UTILITYTYPENAMEEMITTERS_HPP
+#define UTILITYTYPENAMEEMITTERS_HPP
+
+#include "CCF/CIDL/SemanticGraph.hpp"
+#include "CCF/CIDL/Traversal.hpp"
+#include "EmitterBase.hpp"
+
+using namespace std;
+using namespace CCF::CIDL;
+using namespace CCF::CIDL::SemanticGraph;
+
+// Emits type's full scoped name.
+struct FullTypeNameEmitter : Traversal::Type,
+ EmitterBase
+{
+ FullTypeNameEmitter (Context&);
+
+ virtual void
+ traverse (SemanticGraph::Type&);
+};
+
+// Emits type's local name.
+struct SimpleTypeNameEmitter : Traversal::Type,
+ EmitterBase
+{
+ SimpleTypeNameEmitter (Context&);
+
+ virtual void
+ traverse (SemanticGraph::Type&);
+};
+
+// Emits name of type's enclosing scope.
+struct EnclosingTypeNameEmitter : Traversal::Type,
+ EmitterBase
+{
+ EnclosingTypeNameEmitter (Context&);
+
+ virtual void
+ traverse (SemanticGraph::Type&);
+};
+
+// Emits scoped name minus the leading double colon.
+struct StrippedTypeNameEmitter : Traversal::Type,
+ EmitterBase
+{
+ StrippedTypeNameEmitter (Context&);
+
+ virtual void
+ traverse (SemanticGraph::Type&);
+};
+
+#endif // UTILITYTYPENAMEEMITTERS_HPP
diff --git a/TAO/CIAO/ChangeLog b/TAO/CIAO/ChangeLog
index 99d480aa56b..32f169b38b2 100644
--- a/TAO/CIAO/ChangeLog
+++ b/TAO/CIAO/ChangeLog
@@ -1,3 +1,70 @@
+Fri Mar 17 14:23:53 UTC 2006 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * ciao/CCM_Core.mpc:
+ * ciao/Servant_Impl_Base.cpp:
+ * ciao/Servant_Impl_Base.h
+
+ - Changed port table types from
+ ACE_Hash_Map_Manager_Ex<> to ACE_Array_Map<>,
+ which is more lightweight and makes no
+ allocations if no entries are added to
+ the table.
+
+ - Implemented spec-defined methods
+ get_all_receptacles(), get_all_publishers(),
+ and disconnect_consumer().
+
+ * ciao/Servant_Impl_Utils_T.cpp:
+
+ New file, containing implementations of new
+ static template methods added to class
+ Servant_Impl_Base, which are called in
+ generated code as part of the implementation
+ of the spec-defined methods mentioned above.
+
+ * CCF/CCF/CIDLC/AttributeHeaderEmitters.cpp:
+ * CCF/CCF/CIDLC/AttributeHeaderEmitters.hpp:
+ * CCF/CCF/CIDLC/AttributeSourceEmitters_T.hpp:
+ * CCF/CCF/CIDLC/CompositionEmitter.cpp:
+ * CCF/CCF/CIDLC/CompositionEmitter.hpp:
+ * CCF/CCF/CIDLC/CorbaTypeNameEmitters.cpp:
+ * CCF/CCF/CIDLC/CorbaTypeNameEmitters.hpp:
+ * CCF/CCF/CIDLC/EmitterBase.cpp:
+ * CCF/CCF/CIDLC/EmitterBase.hpp:
+ * CCF/CCF/CIDLC/EmitterContext.cpp:
+ * CCF/CCF/CIDLC/EmitterContext.hpp:
+ * CCF/CCF/CIDLC/InterfaceEmitter.cpp:
+ * CCF/CCF/CIDLC/InterfaceEmitter.hpp:
+ * CCF/CCF/CIDLC/ModuleEmitter.cpp:
+ * CCF/CCF/CIDLC/ModuleEmitter.hpp:
+ * CCF/CCF/CIDLC/OperationHeaderEmitters.cpp:
+ * CCF/CCF/CIDLC/OperationHeaderEmitters.hpp:
+ * CCF/CCF/CIDLC/ParameterEmitter_T.hpp:
+ * CCF/CCF/CIDLC/Upcase.hpp:
+ * CCF/CCF/CIDLC/UtilityTypeNameEmitters.cpp:
+ * CCF/CCF/CIDLC/UtilityTypeNameEmitters.hpp:
+
+ New files, containing common code factored
+ out of the C++ source files below.
+
+ * CCF/CCF/CIDLC/CIDLC.mpc:
+ * CCF/CCF/CIDLC/DescriptorGenerator.cpp:
+ * CCF/CCF/CIDLC/ExecImplHeaderGenerator.cpp:
+ * CCF/CCF/CIDLC/ExecImplSourceGenerator.cpp:
+ * CCF/CCF/CIDLC/ExecutorMappingGenerator.cpp:
+ * CCF/CCF/CIDLC/Literals.cpp:
+ * CCF/CCF/CIDLC/Literals.hpp:
+ * CCF/CCF/CIDLC/ServantHeaderGenerator.cpp:
+ * CCF/CCF/CIDLC/ServantSourceGenerator.cpp:
+
+ - Added new generated code as part of the
+ implementation of the spec-defined methods
+ mentioned above.
+
+ - Added support for attribute exceptions in
+ code optionally generated for the stencil
+ executor implementation classes.
+
Thu Mar 16 16:31:51 UTC 2006 Jeff Parsons <j.parsons@vanderbilt.edu>
* ciao/CCM_Component.idl:
diff --git a/TAO/CIAO/ciao/CCM_Core.mpc b/TAO/CIAO/ciao/CCM_Core.mpc
index f73fb1b9b0b..c55a290a111 100644
--- a/TAO/CIAO/ciao/CCM_Core.mpc
+++ b/TAO/CIAO/ciao/CCM_Core.mpc
@@ -198,6 +198,7 @@ project (CIAO_DnC_Server) : orbsvcslib, portableserver, valuetype, naming, ifr_c
Swapping_Servant_Home_Impl_T.cpp
Dynamic_Component_Servant_T.cpp
Servant_Impl_T.cpp
+ Servant_Impl_Utils_T.cpp
Servant_Activator_T.cpp
}
}
diff --git a/TAO/CIAO/ciao/Servant_Impl_Base.cpp b/TAO/CIAO/ciao/Servant_Impl_Base.cpp
index 51c1ae27867..4dff1298c16 100644
--- a/TAO/CIAO/ciao/Servant_Impl_Base.cpp
+++ b/TAO/CIAO/ciao/Servant_Impl_Base.cpp
@@ -127,9 +127,9 @@ namespace CIAO
PortableServer::ObjectId_var oid;
- this->container_->uninstall_component ( ccmobjref.in (),
- oid.out ()
- ACE_ENV_ARG_PARAMETER);
+ this->container_->uninstall_component (ccmobjref.in (),
+ oid.out ()
+ ACE_ENV_ARG_PARAMETER);
ACE_TRY_CHECK;
this->home_servant_->update_component_map (oid);
@@ -173,11 +173,9 @@ namespace CIAO
this->get_all_receptacles (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
- /*
::Components::ConsumerDescriptions_var consumer_desc =
this->get_all_consumers (ACE_ENV_SINGLE_ARG_PARAMETER);
ACE_CHECK_RETURN (0);
- */
::Components::EmitterDescriptions_var emitter_desc =
this->get_all_emitters (ACE_ENV_SINGLE_ARG_PARAMETER);
@@ -189,7 +187,7 @@ namespace CIAO
retv->facets (facets_desc.in ());
retv->receptacles (receptacle_desc.in ());
- // retv->consumers (consumer_desc.in ());
+ retv->consumers (consumer_desc.in ());
retv->emitters (emitter_desc.in ());
retv->publishers (publisher_desc.in ());
@@ -204,7 +202,7 @@ namespace CIAO
ACE_THROW_SPEC ((CORBA::SystemException,
Components::InvalidName))
{
- if (name == 0)
+ if (0 == name)
{
ACE_THROW_RETURN (Components::InvalidName (),
CORBA::Object::_nil ());
@@ -242,7 +240,7 @@ namespace CIAO
{
tmp = this->lookup_facet_description (names[i].in ());
- if (tmp == 0)
+ if (0 == tmp)
{
ACE_THROW_RETURN (Components::InvalidName (),
0);
@@ -267,15 +265,15 @@ namespace CIAO
::Components::FacetDescriptions_var retval = tmp;
- retval->length (this->facet_table_.current_size ());
+ retval->length (this->facet_table_.size ());
CORBA::ULong i = 0;
- for (FacetTable::iterator iter = this->facet_table_.begin ();
+ for (FacetTable::const_iterator iter = this->facet_table_.begin ();
iter != this->facet_table_.end ();
++iter, ++i)
{
- FacetTable::ENTRY & entry = *iter;
- retval[i] = entry.int_id_;
+ FacetTable::const_reference entry = *iter;
+ retval[i] = entry.second;
}
return retval._retn ();
@@ -288,25 +286,25 @@ namespace CIAO
)
ACE_THROW_SPEC ((CORBA::SystemException))
{
-
::Components::ConsumerDescriptions *tmp = 0;
ACE_NEW_THROW_EX (tmp,
::Components::ConsumerDescriptions (
- this->consumer_table_.current_size ()),
+ this->consumer_table_.size ()),
CORBA::NO_MEMORY ());
+ ACE_CHECK_RETURN (0);
::Components::ConsumerDescriptions_var retval = tmp;
- retval->length (this->consumer_table_.current_size ());
+ retval->length (this->consumer_table_.size ());
CORBA::ULong i = 0;
- for (ConsumerTable::iterator iter = this->consumer_table_.begin ();
+ for (ConsumerTable::const_iterator iter = this->consumer_table_.begin ();
iter != this->consumer_table_.end ();
++iter, ++i)
{
// ACE_DEBUG ((LM_DEBUG, "EXECUTING \n"));
- ConsumerTable::ENTRY & entry = *iter;
- retval[i] = entry.int_id_;
+ ConsumerTable::const_reference entry = *iter;
+ retval[i] = entry.second;
}
return retval._retn ();
@@ -321,7 +319,7 @@ namespace CIAO
ACE_THROW_SPEC ((CORBA::SystemException,
Components::InvalidName))
{
- if (sink_name == 0)
+ if (0 == sink_name)
{
ACE_THROW_RETURN (Components::InvalidName (),
Components::EventConsumerBase::_nil ());
@@ -339,18 +337,6 @@ namespace CIAO
return retval;
}
- ::Components::EventConsumerBase_ptr
- Servant_Impl_Base::disconnect_consumer (
- const char * /* source_name */
- ACE_ENV_ARG_DECL
- )
- ACE_THROW_SPEC ((CORBA::SystemException,
- Components::InvalidName,
- Components::NoConnection))
- {
- ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);
- }
-
::Components::ConsumerDescriptions *
Servant_Impl_Base::get_named_consumers (
const ::Components::NameList & names
@@ -372,7 +358,7 @@ namespace CIAO
{
tmp = this->lookup_consumer_description (names[i].in ());
- if (tmp == 0)
+ if (0 == tmp)
{
ACE_THROW_RETURN (Components::InvalidName (),
0);
@@ -385,15 +371,6 @@ namespace CIAO
}
::Components::EmitterDescriptions *
- Servant_Impl_Base::get_all_emitters (
- ACE_ENV_SINGLE_ARG_DECL
- )
- ACE_THROW_SPEC ((CORBA::SystemException))
- {
- ACE_THROW_RETURN (CORBA::NO_IMPLEMENT (), 0);
- }
-
- ::Components::EmitterDescriptions *
Servant_Impl_Base::get_named_emitters (
const ::Components::NameList & /* names */
ACE_ENV_ARG_DECL
@@ -405,15 +382,6 @@ namespace CIAO
}
::Components::ReceptacleDescriptions *
- Servant_Impl_Base::get_all_receptacles (
- ACE_ENV_SINGLE_ARG_DECL
- )
- ACE_THROW_SPEC ((CORBA::SystemException))
- {
- ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);
- }
-
- ::Components::ReceptacleDescriptions *
Servant_Impl_Base::get_named_receptacles (
const ::Components::NameList & /* names */
ACE_ENV_ARG_DECL
@@ -425,15 +393,6 @@ namespace CIAO
}
::Components::PublisherDescriptions *
- Servant_Impl_Base::get_all_publishers (
- ACE_ENV_SINGLE_ARG_DECL
- )
- ACE_THROW_SPEC ((CORBA::SystemException))
- {
- ACE_THROW_RETURN (::CORBA::NO_IMPLEMENT (), 0);
- }
-
- ::Components::PublisherDescriptions *
Servant_Impl_Base::get_named_publishers (
const ::Components::NameList & /* names */
ACE_ENV_ARG_DECL
@@ -448,46 +407,84 @@ namespace CIAO
void
Servant_Impl_Base::add_facet (const char *port_name,
- CORBA::Object_ptr port_ref)
+ ::CORBA::Object_ptr port_ref
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC (( ::CORBA::SystemException))
{
+ if (0 == port_name || ::CORBA::is_nil (port_ref))
+ {
+ ACE_THROW ( ::CORBA::BAD_PARAM ());
+ return;
+ }
+
::Components::FacetDescription *fd = 0;
ACE_NEW (fd,
- OBV_Components::FacetDescription);
+ ::OBV_Components::FacetDescription);
::Components::FacetDescription_var safe = fd;
fd->name (port_name);
fd->type_id (port_ref->_interface_repository_id ());
fd->facet_ref (port_ref);
- if (this->facet_table_.bind (port_name, fd) == 0)
- {
- safe._retn ();
- }
+ FacetTable::value_type entry;
+ entry.first = port_name;
+ entry.second = safe._retn ();
+
+ ACE_WRITE_GUARD (TAO_SYNCH_MUTEX, mon, this->lock_);
+
+ (void) this->facet_table_.insert (entry);
}
CORBA::Object_ptr
Servant_Impl_Base::lookup_facet (const char *port_name)
{
- ::Components::FacetDescription_var fd;
+ if (0 == port_name)
+ {
+ return CORBA::Object::_nil ();
+ }
+
+ ACE_READ_GUARD_RETURN (TAO_SYNCH_MUTEX,
+ mon,
+ this->lock_,
+ CORBA::Object::_nil ());
- if (this->facet_table_.find (port_name, fd) != 0)
+ FacetTable::const_iterator iter =
+ this->facet_table_.find (port_name);
+
+ if (iter == this->facet_table_.end ())
{
return CORBA::Object::_nil ();
}
- return CORBA::Object::_duplicate (fd.in ()->facet_ref ());
+ return CORBA::Object::_duplicate (iter->second->facet_ref ());
}
::Components::FacetDescription *
Servant_Impl_Base::lookup_facet_description (const char *port_name)
{
- ::Components::FacetDescription_var fd;
-
- if (this->facet_table_.find (port_name, fd) != 0)
+ if (0 == port_name)
{
+ /// Calling function will throw InvalidName after getting this.
return 0;
}
+ ::Components::FacetDescription_var fd;
+ FacetTable::const_iterator iter;
+
+ {
+ ACE_READ_GUARD_RETURN (TAO_SYNCH_MUTEX,
+ mon,
+ this->lock_,
+ 0);
+
+ iter = this->facet_table_.find (port_name);
+
+ if (iter != this->facet_table_.end ())
+ {
+ fd = iter->second;
+ }
+ }
+
return fd._retn ();
}
@@ -495,35 +492,59 @@ namespace CIAO
Servant_Impl_Base::add_consumer (
const char *port_name,
::Components::EventConsumerBase_ptr port_ref
+ ACE_ENV_ARG_DECL
)
+ ACE_THROW_SPEC (( ::CORBA::SystemException))
{
+ if (0 == port_name || ::CORBA::is_nil (port_ref))
+ {
+ ACE_THROW ( ::CORBA::BAD_PARAM ());
+ return;
+ }
+
::Components::ConsumerDescription *cd = 0;
ACE_NEW (cd,
- OBV_Components::ConsumerDescription);
+ ::OBV_Components::ConsumerDescription);
::Components::ConsumerDescription_var safe = cd;
cd->name (port_name);
cd->type_id (port_ref->_interface_repository_id ());
cd->consumer (port_ref);
- if (this->consumer_table_.bind (port_name, cd) == 0)
- {
- safe._retn ();
- }
+ ConsumerTable::value_type entry;
+ entry.first = port_name;
+ entry.second = safe._retn ();
+
+ ACE_WRITE_GUARD (TAO_SYNCH_MUTEX, mon, this->lock_);
+
+ (void) this->consumer_table_.insert (entry);
}
::Components::EventConsumerBase_ptr
Servant_Impl_Base::lookup_consumer (const char *port_name)
{
- ::Components::ConsumerDescription_var cd;
+ if (0 == port_name)
+ {
+ return ::Components::EventConsumerBase::_nil ();
+ }
+
+ ACE_READ_GUARD_RETURN (TAO_SYNCH_MUTEX,
+ mon,
+ this->lock_,
+ ::Components::EventConsumerBase::_nil ());
- if (this->consumer_table_.find (port_name, cd) != 0)
+ ConsumerTable::const_iterator iter =
+ this->consumer_table_.find (port_name);
+
+ if (iter == this->consumer_table_.end ())
{
return ::Components::EventConsumerBase::_nil ();
}
return
- ::Components::EventConsumerBase::_duplicate (cd.in ()->consumer ());
+ ::Components::EventConsumerBase::_duplicate (
+ iter->second->consumer ()
+ );
}
::Components::ConsumerDescription *
@@ -531,17 +552,33 @@ namespace CIAO
const char *port_name
)
{
- ::Components::ConsumerDescription_var cd;
-
- if (this->consumer_table_.find (port_name, cd) != 0)
+ if (0 == port_name)
{
+ /// Calling function will throw InvalidName after getting this.
return 0;
}
+ ::Components::ConsumerDescription_var cd;
+ ConsumerTable::const_iterator iter;
+
+ {
+ ACE_READ_GUARD_RETURN (TAO_SYNCH_MUTEX,
+ mon,
+ this->lock_,
+ 0);
+
+ iter = this->consumer_table_.find (port_name);
+
+ if (iter != this->consumer_table_.end ())
+ {
+ cd = iter->second;
+ }
+ }
+
return cd._retn ();
}
-
- ::Components::StandardConfigurator_ptr
+
+ ::Components::StandardConfigurator_ptr
Servant_Impl_Base::get_standard_configurator (ACE_ENV_SINGLE_ARG_DECL)
ACE_THROW_SPEC ((CORBA::SystemException))
{
@@ -568,3 +605,4 @@ namespace CIAO
PortableServer::POA::_duplicate (container_->the_POA ());
}
}
+
diff --git a/TAO/CIAO/ciao/Servant_Impl_Base.h b/TAO/CIAO/ciao/Servant_Impl_Base.h
index abbc73091a8..da5603f98d2 100644
--- a/TAO/CIAO/ciao/Servant_Impl_Base.h
+++ b/TAO/CIAO/ciao/Servant_Impl_Base.h
@@ -19,12 +19,15 @@
#include /**/ "ace/pre.h"
-#include "ace/Hash_Map_Manager_T.h"
+#include "ace/Array_Map.h"
#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */
+#include "ace/Active_Map_Manager_T.h"
+#include "ace/Thread_Mutex.h"
+
#include "CCM_EventC.h"
#include "CIAO_Server_Export.h"
#include "CCM_ComponentS.h"
@@ -117,13 +120,6 @@ namespace CIAO
ACE_THROW_SPEC ((CORBA::SystemException,
Components::InvalidName));
- virtual ::Components::EventConsumerBase_ptr
- disconnect_consumer (const char *source_name
- ACE_ENV_ARG_DECL_WITH_DEFAULTS)
- ACE_THROW_SPEC ((CORBA::SystemException,
- Components::InvalidName,
- Components::NoConnection));
-
virtual ::Components::ConsumerDescriptions *
get_named_consumers (const ::Components::NameList & names
ACE_ENV_ARG_DECL_WITH_DEFAULTS)
@@ -131,30 +127,18 @@ namespace CIAO
Components::InvalidName));
virtual ::Components::EmitterDescriptions *
- get_all_emitters (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
- virtual ::Components::EmitterDescriptions *
- get_named_emitters (const ::Components::NameList & /* names */
+ get_named_emitters (const ::Components::NameList & names
ACE_ENV_ARG_DECL_WITH_DEFAULTS)
ACE_THROW_SPEC ((CORBA::SystemException,
Components::InvalidName));
virtual ::Components::ReceptacleDescriptions *
- get_all_receptacles (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
- virtual ::Components::ReceptacleDescriptions *
- get_named_receptacles (const ::Components::NameList & /* names */
+ get_named_receptacles (const ::Components::NameList & names
ACE_ENV_ARG_DECL_WITH_DEFAULTS)
ACE_THROW_SPEC ((CORBA::SystemException,
Components::InvalidName));
virtual ::Components::PublisherDescriptions *
- get_all_publishers (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS)
- ACE_THROW_SPEC ((CORBA::SystemException));
-
- virtual ::Components::PublisherDescriptions *
get_named_publishers (const ::Components::NameList & names
ACE_ENV_ARG_DECL_WITH_DEFAULTS)
ACE_THROW_SPEC ((CORBA::SystemException,
@@ -178,7 +162,9 @@ namespace CIAO
protected:
void add_facet (const char *port_name,
- CORBA::Object_ptr port_ref);
+ ::CORBA::Object_ptr port_ref
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC (( ::CORBA::SystemException));
CORBA::Object_ptr lookup_facet (const char *port_name);
@@ -187,7 +173,9 @@ namespace CIAO
);
void add_consumer (const char *port_name,
- ::Components::EventConsumerBase_ptr port_ref);
+ ::Components::EventConsumerBase_ptr port_ref
+ ACE_ENV_ARG_DECL)
+ ACE_THROW_SPEC (( ::CORBA::SystemException));
::Components::EventConsumerBase_ptr lookup_consumer (
const char *port_name
@@ -197,19 +185,52 @@ namespace CIAO
const char *port_name
);
+ /// Called from generated servant class to help with
+ /// get_all_*() methods.
+
+ template<typename T_var>
+ static void describe_simplex_receptacle (
+ const char *port_name,
+ const char *port_type_repo_id,
+ T_var &connection,
+ ::Components::ReceptacleDescriptions_var &descriptions,
+ CORBA::ULong slot
+ );
+
+ template<typename T_var>
+ static void describe_multiplex_receptacle (
+ const char *port_name,
+ const char *port_type_repo_id,
+ ACE_Active_Map_Manager<T_var> &objrefs,
+ ::Components::ReceptacleDescriptions_var &descriptions,
+ CORBA::ULong slot
+ );
+
+ template<typename T_var>
+ static void describe_pub_event_source (
+ const char *port_name,
+ const char *port_type_repo_id,
+ ACE_Active_Map_Manager<T_var> &consumers,
+ ::Components::PublisherDescriptions_var &descriptions,
+ CORBA::ULong slot
+ );
+
+ template<typename T_var>
+ static void describe_emit_event_source (
+ const char *port_name,
+ const char *port_type_repo_id,
+ T_var &consumer_ref,
+ ::Components::EmitterDescriptions_var &descriptions,
+ CORBA::ULong slot
+ );
+
protected:
- typedef ACE_Hash_Map_Manager_Ex<const char *,
- ::Components::FacetDescription_var,
- ACE_Hash<const char *>,
- ACE_Equal_To<const char *>,
- ACE_Null_Mutex>
+ typedef ACE_Array_Map<ACE_CString,
+ ::Components::FacetDescription_var>
FacetTable;
- typedef ACE_Hash_Map_Manager_Ex<const char *,
- ::Components::ConsumerDescription_var,
- ACE_Hash<const char *>,
- ACE_Equal_To<const char *>,
- ACE_Null_Mutex>
+ typedef ACE_Array_Map<ACE_CString,
+ ::Components::ConsumerDescription_var>
ConsumerTable;
FacetTable facet_table_;
@@ -220,9 +241,21 @@ namespace CIAO
private:
/// Not allowed to be used
Servant_Impl_Base (void);
+
+ private:
+ /// For internal locking of table reads and writes.
+ TAO_SYNCH_MUTEX lock_;
};
}
+#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
+#include "Servant_Impl_Utils_T.cpp"
+#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */
+
+#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
+#pragma implementation ("Servant_Impl_Utils_T.cpp")
+#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */
+
#include /**/ "ace/post.h"
#endif /* CIAO_SERVANT_IMPL_T_H */
diff --git a/TAO/CIAO/ciao/Servant_Impl_Utils_T.cpp b/TAO/CIAO/ciao/Servant_Impl_Utils_T.cpp
new file mode 100644
index 00000000000..7b4f668924b
--- /dev/null
+++ b/TAO/CIAO/ciao/Servant_Impl_Utils_T.cpp
@@ -0,0 +1,138 @@
+// $Id$
+
+#ifndef CIAO_SERVANT_IMPL_UTILS_T_C
+#define CIAO_SERVANT_IMPL_UTILS_T_C
+
+#include "Servant_Impl_Base.h"
+
+namespace CIAO
+{
+ template<typename T_var>
+ void
+ Servant_Impl_Base::describe_simplex_receptacle (
+ const char *port_name,
+ const char *port_type_repo_id,
+ T_var &connection,
+ ::Components::ReceptacleDescriptions_var &descriptions,
+ CORBA::ULong slot
+ )
+ {
+ ::Components::ReceptacleDescription *elem = 0;
+ ACE_NEW (elem,
+ ::OBV_Components::ReceptacleDescription);
+ ::Components::ReceptacleDescription_var safe_elem = elem;
+
+ elem->name (port_name);
+ elem->type_id (port_type_repo_id);
+ elem->is_multiple (false);
+ elem->connections ().length (1UL);
+ elem->connections ()[0UL]->ck (0);
+
+ // Valuetype 'set' call increments the reference count.
+ elem->connections ()[0UL]->objref (connection.in ());
+
+ descriptions[slot] = safe_elem._retn ();
+ }
+
+ template<typename T_var>
+ void
+ Servant_Impl_Base::describe_multiplex_receptacle (
+ const char *port_name,
+ const char *port_type_repo_id,
+ ACE_Active_Map_Manager<T_var> &objrefs,
+ ::Components::ReceptacleDescriptions_var &descriptions,
+ CORBA::ULong slot
+ )
+ {
+ ::Components::ReceptacleDescription *elem = 0;
+ ACE_NEW (elem,
+ ::OBV_Components::ReceptacleDescription);
+ ::Components::ReceptacleDescription_var safe_elem = elem;
+
+ elem->name (port_name);
+ elem->type_id (port_type_repo_id);
+ elem->is_multiple (true);
+ elem->connections ().length (objrefs.current_size ());
+
+ CORBA::ULong map_slot = 0UL;
+
+ for (ACE_Active_Map_Manager<T_var>::CONST_ITERATOR iter (objrefs);
+ 0 == iter.done ();
+ iter.advance (), ++map_slot)
+ {
+ ::Components::Cookie *cookie_from_key = 0;
+ ACE_NEW (cookie_from_key,
+ ::CIAO::Map_Key_Cookie ((*iter).ext_id_));
+
+ // Both valuetype 'set' calls increment the reference count.
+ elem->connections ()[map_slot]->ck (cookie_from_key);
+ CORBA::remove_ref (cookie_from_key);
+ elem->connections ()[map_slot]->objref ((*iter).int_id_.in ());
+ }
+
+ descriptions[slot] = safe_elem._retn ();
+ }
+
+ template<typename T_var>
+ void
+ Servant_Impl_Base::describe_pub_event_source (
+ const char *port_name,
+ const char *port_type_repo_id,
+ ACE_Active_Map_Manager<T_var> &consumers,
+ ::Components::PublisherDescriptions_var &descriptions,
+ CORBA::ULong slot
+ )
+ {
+ ::Components::PublisherDescription *elem = 0;
+ ACE_NEW (elem,
+ ::OBV_Components::PublisherDescription);
+ ::Components::PublisherDescription_var safe_elem = elem;
+
+ elem->name (port_name);
+ elem->type_id (port_type_repo_id);
+
+ CORBA::ULong map_slot = 0UL;
+
+ for (ACE_Active_Map_Manager<T_var>::CONST_ITERATOR iter (consumers);
+ 0 == iter.done ();
+ iter.advance (), ++map_slot)
+ {
+ ::Components::Cookie *cookie_from_key = 0;
+ ACE_NEW (cookie_from_key,
+ ::CIAO::Map_Key_Cookie ((*iter).ext_id_));
+
+ // Both valuetype 'set' calls increment the reference count.
+ elem->consumer ()[map_slot]->ck (cookie_from_key);
+ CORBA::remove_ref (cookie_from_key);
+ elem->consumer ()[map_slot]->consumer ((*iter).int_id_.in ());
+ }
+
+ descriptions[slot] = safe_elem._retn ();
+ }
+
+ template<typename T_var>
+ void
+ Servant_Impl_Base::describe_emit_event_source (
+ const char *port_name,
+ const char *port_type_repo_id,
+ T_var &consumer_ref,
+ ::Components::EmitterDescriptions_var &descriptions,
+ CORBA::ULong slot
+ )
+ {
+ ::Components::EmitterDescription *elem = 0;
+ ACE_NEW (elem,
+ ::OBV_Components::EmitterDescription);
+ ::Components::EmitterDescription_var safe_elem = elem;
+
+ elem->name (port_name);
+ elem->type_id (port_type_repo_id);
+
+ // Valuetype 'set' call increments the reference count.
+ elem->consumer (consumer_ref.in ());
+
+ descriptions[slot] = safe_elem._retn ();
+ }
+}
+
+#endif /* CIAO_SERVANT_IMPL_T_C */