diff options
author | William R. Otte <wotte@dre.vanderbilt.edu> | 2006-07-24 15:50:11 +0000 |
---|---|---|
committer | William R. Otte <wotte@dre.vanderbilt.edu> | 2006-07-24 15:50:11 +0000 |
commit | 6b846cf03c0bcbd8c276cb0af61a181e5f98eaae (patch) | |
tree | da50d054f9c761c3f6a5923f6979e93306c56d68 /TAO/TAO_IDL/be/be_visitor_interface/interface_sh.cpp | |
parent | 0e555b9150d38e3b3473ba325b56db2642e6352b (diff) | |
download | ATCD-6b846cf03c0bcbd8c276cb0af61a181e5f98eaae.tar.gz |
Repo restructuring
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_interface/interface_sh.cpp')
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_interface/interface_sh.cpp | 406 |
1 files changed, 0 insertions, 406 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_interface/interface_sh.cpp b/TAO/TAO_IDL/be/be_visitor_interface/interface_sh.cpp deleted file mode 100644 index 82a0472a7ed..00000000000 --- a/TAO/TAO_IDL/be/be_visitor_interface/interface_sh.cpp +++ /dev/null @@ -1,406 +0,0 @@ -// -// $Id$ -// - -// ============================================================================ -// -// = LIBRARY -// TAO IDL -// -// = FILENAME -// interface_sh.cpp -// -// = DESCRIPTION -// Visitor generating code for Interfaces in the server header -// -// = AUTHOR -// Aniruddha Gokhale -// -// ============================================================================ - -ACE_RCSID (be_visitor_interface, - interface_sh, - "$Id$") - -// ************************************************************ -// Interface visitor for server header. -// ************************************************************ - -be_visitor_interface_sh::be_visitor_interface_sh (be_visitor_context *ctx) - : be_visitor_interface (ctx) -{ -} - -be_visitor_interface_sh::~be_visitor_interface_sh (void) -{ -} - -int -be_visitor_interface_sh::visit_interface (be_interface *node) -{ - if (node->srv_hdr_gen () - || node->imported () - || node->is_abstract ()) - { - return 0; - } - - // If this node is a AMH-RH node, then generate code for it - if (node->is_local ()) - { - if (this->is_amh_rh_node (node)) - { - // Create amh_rh_visitors. - be_visitor_amh_rh_interface_sh amh_rh_intf (this->ctx_); - amh_rh_intf.visit_interface (node); - } - - return 0; - } - - if (this->generate_amh_classes (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_interface_sh::" - "visit_interface - " - "codegen for AMH classes failed\n"), - -1); - } - - TAO_OutStream *os = this->ctx_->stream (); - ACE_CString class_name; - - // We shall have a POA_ prefix only if we are at the topmost level. - if (!node->is_nested ()) - { - // We are outermost. - class_name += "POA_"; - class_name += node->local_name (); - } - else - { - class_name += node->local_name (); - } - - *os << be_nl << be_nl - << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__; - - // Generate the skeleton class name. - *os << be_nl << be_nl - << "class " << class_name.c_str () << ";" << be_nl; - - // Generate the _ptr declaration. - *os << "typedef " << class_name.c_str () << " *" << class_name.c_str () - << "_ptr;"; - - - if (be_global->gen_direct_collocation ()) - { - *os << be_nl << be_nl - << "class " << node->direct_proxy_impl_name () << ";" << be_nl - << "class " << node->strategized_proxy_broker_name () << ";"; - } - - // Now generate the class definition. - *os << be_nl << be_nl - << "class " << be_global->skel_export_macro () - << " " << class_name.c_str () << be_idt_nl << ": " << be_idt; - - long n_parents = node->n_inherits (); - AST_Interface *parent = 0; - int has_concrete_parent = 0; - - for (int i = 0; i < n_parents; ++i) - { - parent = node->inherits ()[i]; - - if (parent->is_abstract ()) - { - continue; - } - - if (has_concrete_parent == 1) - { - *os << "," << be_nl; - } - - *os << "public virtual " << "POA_" - << parent->name (); - - has_concrete_parent = 1; - } - - if (has_concrete_parent == 0) - { - // We don't inherit from another user defined object, hence our - // base class is the ServantBase class. - *os << "public virtual PortableServer::ServantBase"; - } - - *os << be_uidt << be_uidt_nl - << "{" << be_nl - << "protected:" << be_idt_nl; - - // Default constructor. - *os << class_name.c_str () << " (void);" << be_uidt_nl << be_nl - << "public:" << be_idt_nl; - - // Some useful typedefs. - *os << "// Useful for template programming." << be_nl - << "typedef ::" << node->name () << " _stub_type;" << be_nl - << "typedef ::" << node->name () << "_ptr _stub_ptr_type;" << be_nl - << "typedef ::" << node->name () << "_var _stub_var_type;" - << be_nl << be_nl; - - // Copy constructor and destructor. - *os << class_name.c_str () << " (const " - << class_name.c_str () << "& rhs);" << be_nl - << "virtual ~" << class_name.c_str () << " (void);" << be_nl << be_nl; - - if (node->is_event_consumer ()) - { - *os << "// Default implementation of CIAO-specific operation," << be_nl - << "// overridden in derived class generated by the CIDL compiler." - << be_nl - << "virtual ::CORBA::Boolean ciao_is_substitutable (" - << be_idt << be_idt_nl - << "const char *event_repo_id" << env_dflts << be_uidt_nl - << ")" << be_nl - << "ACE_THROW_SPEC (( ::CORBA::SystemException));" - << be_uidt_nl << be_nl; - } - - // _is_a - *os << "virtual ::CORBA::Boolean _is_a (" << be_idt << be_idt_nl - << "const char* logical_type_id" << env_dflts << be_uidt_nl - << ");" << be_uidt_nl << be_nl; - - // Add a skeleton for our _is_a method. - *os << "static void _is_a_skel (" << be_idt << be_idt_nl - << "TAO_ServerRequest & req," << be_nl - << "void * servant_upcall," << be_nl - << "void * servant" << env_decl << be_uidt_nl - << ");" << be_uidt_nl << be_nl; - - // Add a skeleton for our _non_existent method. - *os << "static void _non_existent_skel (" << be_idt << be_idt_nl - << "TAO_ServerRequest & req," << be_nl - << "void * servant_upcall," << be_nl - << "void * servant" << env_decl << be_uidt_nl - << ");" << be_uidt_nl << be_nl; - - // Add a skeleton for our _interface method. - *os << "static void _interface_skel (" << be_idt << be_idt_nl - << "TAO_ServerRequest & req," << be_nl - << "void * servant_upcall," << be_nl - << "void * servant" << env_decl << be_uidt_nl - << ");" << be_uidt_nl << be_nl; - - // Add a skeleton for our _component method. - *os << "static void _component_skel (" << be_idt << be_idt_nl - << "TAO_ServerRequest & req," << be_nl - << "void * servant_upcall," << be_nl - << "void * servant" << env_decl << be_uidt_nl - << ");" << be_uidt_nl << be_nl; - - // Add a skeleton for our _repository_id method. - *os << "static void _repository_id_skel (" << be_idt << be_idt_nl - << "TAO_ServerRequest & req," << be_nl - << "void * servant_upcall," << be_nl - << "void * servant" << env_decl << be_uidt_nl - << ");" << be_uidt_nl << be_nl; - - - // Add the dispatch method. - *os << "virtual void _dispatch (" << be_idt << be_idt_nl - << "TAO_ServerRequest & req," << be_nl - << "void * servant_upcall" << env_decl << be_uidt_nl - << ");" << be_uidt_nl << be_nl; - - this->this_method (node); - - // The _interface_repository_id method. - *os << be_nl - << "virtual const char* _interface_repository_id " - << "(void) const;"; - - // Generate code for elements in the scope (e.g., operations). - if (this->visit_scope (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_interface_sh::" - "visit_interface - " - "codegen for scope failed\n"), - -1); - } - - // Generate skeletons for operations of our base classes. These - // skeletons just cast the pointer to the appropriate type - // before invoking the call. - int status = - node->traverse_inheritance_graph ( - be_interface::gen_skel_helper, - os - ); - - if (status == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "be_visitor_interface_sh::" - "visit_interface - " - "inheritance graph traversal failed\n"), - -1); - } - - *os << be_uidt_nl << "};"; - - be_visitor_context ctx (*this->ctx_); - - if (be_global->gen_direct_collocation ()) - { - ctx = *this->ctx_; - // Generate strategized proxy broker. - be_visitor_interface_strategized_proxy_broker_sh ispb_visitor (&ctx); - - if (node->accept (&ispb_visitor) == -1) - { - ACE_ERROR_RETURN (( - LM_ERROR, - "be_visitor_interface_sh::" - "visit_interface - " - "codegen for strategized proxy broker class failed\n" - ), - -1 - ); - } - } - - ctx = *this->ctx_; - - // Generate the collocated class. - - ctx = *this->ctx_; - - if (be_global->gen_direct_collocation ()) - { - ctx = *this->ctx_; - ctx.state (TAO_CodeGen::TAO_INTERFACE_DIRECT_PROXY_IMPL_SH); - be_visitor_interface_direct_proxy_impl_sh idpi_visitor (&ctx); - - if (node->accept (&idpi_visitor) == -1) - { - ACE_ERROR_RETURN (( - LM_ERROR, - "be_visitor_interface_sh::" - "visit_interface - " - "codegen for direct collocated class failed\n" - ), - -1 - ); - } - } - - return 0; -} - -int -be_visitor_interface_sh::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_ROOT_SH); - - 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_sh::" - "gen_abstract_ops_helper - " - "bad node in this scope\n"), - -1); - } - - UTL_ScopedName item_new_name (d->local_name (), - 0); - - if (d->node_type () == AST_Decl::NT_op) - { - be_operation *op = be_operation::narrow_from_decl (d); - be_visitor_operation_sh op_visitor (&ctx); - op_visitor.visit_operation (op); - } - 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 (), - &item_new_name, - attr->is_local (), - attr->is_abstract ()); - new_attr.set_defined_in (node); - - 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; -} - -void -be_visitor_interface_sh::this_method (be_interface *node) -{ - TAO_OutStream *os = this->ctx_->stream (); - - // Print out the _this() method. - *os << "::" << node->full_name () << " *_this (" << be_idt << be_idt_nl - << env_dflts << be_uidt_nl - << ");" << be_uidt << be_nl; -} - -int -be_visitor_interface_sh::generate_amh_classes (be_interface *node) -{ - // We have to check for any abstract ancestor until AMH is integrated - // with abstract interfaces. If the node itself is abstract, this - // visitor would not be created. - if (be_global->gen_amh_classes () && !node->has_mixed_parentage ()) - { - be_visitor_amh_interface_sh amh_intf (this->ctx_); - return amh_intf.visit_interface (node); - } - - return 0; -} |