summaryrefslogtreecommitdiff
path: root/trunk/TAO/TAO_IDL/be/be_visitor_interface/direct_proxy_impl_ss.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/TAO/TAO_IDL/be/be_visitor_interface/direct_proxy_impl_ss.cpp')
-rw-r--r--trunk/TAO/TAO_IDL/be/be_visitor_interface/direct_proxy_impl_ss.cpp178
1 files changed, 178 insertions, 0 deletions
diff --git a/trunk/TAO/TAO_IDL/be/be_visitor_interface/direct_proxy_impl_ss.cpp b/trunk/TAO/TAO_IDL/be/be_visitor_interface/direct_proxy_impl_ss.cpp
new file mode 100644
index 00000000000..97a20419a8c
--- /dev/null
+++ b/trunk/TAO/TAO_IDL/be/be_visitor_interface/direct_proxy_impl_ss.cpp
@@ -0,0 +1,178 @@
+//
+//$Id$
+//
+
+ACE_RCSID (be_visitor_interface,
+ direct_proxy_impl_ss,
+ "$Id$")
+
+be_visitor_interface_direct_proxy_impl_ss::
+be_visitor_interface_direct_proxy_impl_ss (be_visitor_context *ctx)
+ : be_visitor_interface (ctx)
+{
+ // No-Op.
+}
+
+be_visitor_interface_direct_proxy_impl_ss::
+~be_visitor_interface_direct_proxy_impl_ss (void)
+{
+ // No-Op.
+}
+
+int
+be_visitor_interface_direct_proxy_impl_ss::visit_interface (
+ be_interface *node
+ )
+{
+ TAO_OutStream *os = this->ctx_->stream ();
+
+ this->ctx_->node (node);
+
+ *os << be_nl << be_nl
+ << "///////////////////////////////////////////////////////////////////////"
+ << be_nl
+ << "// Direct Proxy Implementation" << be_nl
+ << "//" << be_nl << be_nl;
+
+ // Ctor Implementation
+ *os << node->full_direct_proxy_impl_name () << "::"
+ << node->direct_proxy_impl_name () << " (void)"
+ << be_nl << "{}" << be_nl << be_nl;
+
+ // Destructor Implementation
+ *os << node->full_direct_proxy_impl_name () << "::~"
+ << node->direct_proxy_impl_name () << " (void)"
+ << be_nl << "{}" << be_nl << be_nl;
+
+ if (this->visit_scope (node) == -1)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "be_visitor_interface_direct_collocated_ss::"
+ "visit_scope - "
+ "codegen for scope failed\n"),
+ -1);
+ }
+
+ *os << be_nl << be_nl
+ << "//" << be_nl
+ << "// End Direct Proxy Implementation" << be_nl
+ << "///////////////////////////////////////////////////////////////////////";
+
+ return 0;
+}
+
+int
+be_visitor_interface_direct_proxy_impl_ss::gen_abstract_ops_helper (
+ be_interface *node,
+ be_interface *base,
+ TAO_OutStream *os
+ )
+{
+ if (!base->is_abstract ())
+ {
+ return 0;
+ }
+
+ AST_Decl *d = 0;
+ be_visitor_context ctx;
+ ctx.stream (os);
+ ctx.state (TAO_CodeGen::TAO_INTERFACE_DIRECT_PROXY_IMPL_SS);
+
+ for (UTL_ScopeActiveIterator si (base, UTL_Scope::IK_decls);
+ !si.is_done ();
+ si.next ())
+ {
+ d = si.item ();
+
+ if (d == 0)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "(%N:%l) be_visitor_interface_direct_proxy"
+ "_impl_ss::gen_abstract_ops_helper - "
+ "bad node in this scope\n"),
+ -1);
+ }
+
+ AST_Decl::NodeType nt = d->node_type ();
+
+ UTL_ScopedName *item_new_name = 0;
+ UTL_ScopedName *new_name = 0;
+
+ if (AST_Decl::NT_op == nt || AST_Decl::NT_attr == nt)
+ {
+ ACE_NEW_RETURN (item_new_name,
+ UTL_ScopedName (d->local_name ()->copy (),
+ 0),
+ -1);
+
+ new_name = (UTL_ScopedName *) node->name ()->copy ();
+ new_name->nconc (item_new_name);
+ }
+ else
+ {
+ continue;
+ }
+
+ // We pass the node's is_abstract flag to the operation
+ // constructor so we will get the right generated operation
+ // body if we are regenerating an operation from an
+ // abstract interface in a concrete interface or component.
+ if (d->node_type () == AST_Decl::NT_op)
+ {
+ be_operation *op = be_operation::narrow_from_decl (d);
+ UTL_ScopedName *old_name =
+ (UTL_ScopedName *) op->name ()->copy ();
+ op->set_name (new_name);
+ op->set_defined_in (node);
+ op->is_abstract (node->is_abstract ());
+
+ be_visitor_operation_direct_proxy_impl_ss op_visitor (&ctx);
+ op_visitor.visit_operation (op);
+
+ op->set_name (old_name);
+ op->set_defined_in (base);
+ op->is_abstract (base->is_abstract ());
+ }
+ else if (d->node_type () == AST_Decl::NT_attr)
+ {
+ AST_Attribute *attr = AST_Attribute::narrow_from_decl (d);
+ be_attribute new_attr (attr->readonly (),
+ attr->field_type (),
+ 0,
+ attr->is_local (),
+ attr->is_abstract ());
+ new_attr.set_defined_in (node);
+ new_attr.set_name (new_name);
+
+ UTL_ExceptList *get_exceptions = attr->get_get_exceptions ();
+
+ if (0 != get_exceptions)
+ {
+ new_attr.be_add_get_exceptions (get_exceptions->copy ());
+ }
+
+ UTL_ExceptList *set_exceptions = attr->get_set_exceptions ();
+
+ if (0 != set_exceptions)
+ {
+ new_attr.be_add_set_exceptions (set_exceptions->copy ());
+ }
+
+ be_visitor_attribute attr_visitor (&ctx);
+ attr_visitor.visit_attribute (&new_attr);
+ ctx.attribute (0);
+ new_attr.destroy ();
+ }
+ }
+
+ return 0;
+}
+
+int be_visitor_interface_direct_proxy_impl_ss::visit_component (
+ be_component *node
+ )
+{
+ return this->visit_interface (node);
+}
+
+