int ast_visitor_reifying::visit_param_holder (AST_Param_Holder *node) { size_t i = 0; FE_Utils::T_ARGLIST const *t_args = this->ctx_->template_args (); for (FE_Utils::T_PARAMLIST_INFO::ITERATOR iter ( *this->ctx_->template_params ()); !iter.done (); iter.advance (), ++i) { FE_Utils::T_Param_Info *item = 0; iter.next (item); ACE_CString name (item->name_); /// The param holder's info->name_ may be the same as the /// node's local name, but if the node comes from an /// alias, info->name_ will be the name of the alias's /// referenced template module parameter, while the local /// name will be that of the corresponding alias param /// name, which is what we want. if (name == node->local_name ()->get_string ()) { AST_Decl **ret_ptr = 0; if (t_args->get (ret_ptr, i) == 0) { AST_Decl *candidate = *ret_ptr; return candidate->ast_accept (this); } else { ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("ast_visitor_reifying::") ACE_TEXT ("visit_param_holder() - access of ") ACE_TEXT ("current template arglist failed - ") ACE_TEXT ("param=%C scope=%C index=%d\n"), item->name_.c_str (), ScopeAsDecl (idl_global->scopes ().top ())->full_name (), i), -1); } } } ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("ast_visitor_reifying::") ACE_TEXT ("visit_param_holder() - no match for ") ACE_TEXT ("template param %C in %C\n"), node->local_name ()->get_string (), ScopeAsDecl (idl_global->scopes ().top ())->full_name ()), -1); }
void be_visitor_servant_svs::gen_provides_top (void) { if (this->node_->n_provides () == 0UL) { return; } ACE_CString comp_sname_str ( ScopeAsDecl (node_->defined_in ())->full_name ()); const char *global = (comp_sname_str == "" ? "" : "::"); ACE_CString sname_str (ScopeAsDecl (node_->defined_in ())->full_name ()); os_ << be_nl_2 << "/// CIAO-specific." << be_nl << "::CORBA::Object_ptr" << be_nl << node_->local_name () << "_Servant::get_facet_executor (" << be_idt_nl << "const char * name)" << be_uidt_nl << "{" << be_idt_nl; os_ << "if (name == 0)" << be_idt_nl << "{" << be_idt_nl << "throw ::CORBA::BAD_PARAM ();" << be_uidt_nl << "}" << be_uidt << be_nl_2; os_ << "::" << sname_str << global << "CCM_" << node_->original_local_name () << "_var executor = " << be_idt_nl << "::" << sname_str << global << "CCM_" << node_->original_local_name () << "::_duplicate (this->executor_.in ());" << be_uidt << be_nl_2; os_ << "if ( ::CORBA::is_nil (executor.in ()))" << be_idt_nl << "{"<< be_idt_nl << "throw ::CORBA::INV_OBJREF ();" << be_uidt_nl << "}" << be_uidt; be_visitor_facet_executor_block feb_visitor (this->ctx_); if (feb_visitor.visit_component_scope (node_) == -1) { ACE_ERROR ((LM_ERROR, "be_visitor_servant_svs::" "gen_provides_top - " "facet executor block visitor failed\n")); return; } os_ << be_nl_2 << "throw ::Components::InvalidName ();" << be_uidt_nl << "}"; }
void be_util::gen_nesting_close (TAO_OutStream &os, AST_Decl *node) { AST_Decl *d = ScopeAsDecl (node->defined_in ()); AST_Decl::NodeType nt = d->node_type (); while (nt != AST_Decl::NT_root) { os << be_uidt_nl << "};"; d = ScopeAsDecl (d->defined_in ()); nt = d->node_type (); } }
int be_visitor_field_ch::emit_common (be_type *node) { TAO_OutStream *os = this->ctx_->stream (); be_type *bt = 0; if (this->ctx_->alias ()) { bt = this->ctx_->alias (); } else { bt = node; } // ACE_NESTED_CLASS macro generated by nested_type_name // is necessary if the struct, union, or valuetype containing this // field was not defined inside a module. In such a case, VC++ // complains that the non-module scope is not yet fully defined. UTL_Scope *holds_container = this->ctx_->scope ()->decl ()->defined_in (); AST_Decl *hc_decl = ScopeAsDecl (holds_container); if (hc_decl->node_type () != AST_Decl::NT_module) { *os << bt->nested_type_name (this->ctx_->scope ()->decl (), "_var"); } else { *os << bt->name () << "_var"; } return 0; }
void be_type::gen_fwd_helper_name (void) { AST_Decl *parent = ScopeAsDecl (this->defined_in ()); Identifier *segment = 0; char *tmp = 0; this->fwd_helper_name_.clear (true); if (parent != 0 && parent->node_type () != AST_Decl::NT_root) { for (UTL_IdListActiveIterator i (parent->name ()); !i.is_done (); i.next ()) { segment = i.item (); tmp = segment->get_string (); if (ACE_OS::strcmp (tmp, "") == 0) { continue; } this->fwd_helper_name_ += tmp; this->fwd_helper_name_ += "::"; } } else { this->fwd_helper_name_= ""; } this->fwd_helper_name_ += "tao_"; this->fwd_helper_name_ += this->local_name ()->get_string (); }
int be_visitor_facet_exs::visit_attribute (be_attribute *node) { AST_Decl::NodeType nt = this->node_->node_type (); // Executor attribute code generated for porttype attributes // always in connectors and only for mirrorports in components. if (this->in_ext_port_ && nt == AST_Decl::NT_component) { return 0; } be_decl *attr_scope = be_decl::narrow_from_decl (ScopeAsDecl (node->defined_in ())); nt = attr_scope->node_type (); // Components have implied IDL operations added to the AST, but // we are interested only in supported interface operations. if (nt == AST_Decl::NT_component || nt == AST_Decl::NT_connector) { return 0; } be_visitor_attribute v (this->ctx_); v.op_scope (this->op_scope_); return v.visit_attribute (node); }
int be_visitor_executor_private_exh::visit_provides (be_provides *node) { if (!this->do_provides_) return 0; be_type *impl = node->provides_type (); AST_Decl *i_scope = ScopeAsDecl (impl->defined_in ()); bool is_global = (i_scope->node_type () == AST_Decl::NT_root); const char *smart_scope = (is_global ? "" : "::"); ACE_CString scope_name = IdentifierHelper::orig_sn (i_scope->name (), false); os_ << be_nl_2; os_ << "/// Object reference to "<< this->ctx_->port_prefix ().c_str () << node->original_local_name () << " facet"; os_ << be_nl << smart_scope << scope_name.c_str () << "::CCM_" << impl->original_local_name () << "_var ciao_" << this->ctx_->port_prefix ().c_str () << node->original_local_name () << "_;"; return 0; }
bool AST_illegal_interface_recursion (AST_Decl *t) { // Can't be 0 since we know we have an interface or valuetype. AST_Decl *d = 0; // If we encounter the argument in an enclosing scope, it's illegal. for (UTL_ScopeStackActiveIterator i (idl_global->scopes ()); !i.is_done (); i.next ()) { d = ScopeAsDecl (i.item ()); // Exceptions cannot be recursive, but may contain a reference // to the interface they are defined in. if (d->node_type () == AST_Decl::NT_except) { return false; } if (d == t) { return true; } } return false; }
be_argument::be_argument (AST_Argument::Direction d, AST_Type *ft, UTL_ScopedName *n) : COMMON_Base (), AST_Decl (AST_Decl::NT_argument, n), AST_Field (AST_Decl::NT_argument, ft, n), AST_Argument (d, ft, n), be_decl (AST_Decl::NT_argument, n) { AST_Decl *dcl = ScopeAsDecl (this->defined_in ()); // If there have been previous errors, dcl may be 0, // and we don't want to crash, so we check for non-zero. // Also, we don't want to set the bit if the operation is // declared in an included file UNLESS the enclosing // interface is abstract, in which case we regenerate the // operation. if (dcl != 0 && !dcl->is_local () && (idl_global->in_main_file () || dcl->is_abstract ())) { be_type *bt = be_type::narrow_from_decl (ft); bt->seen_in_operation (true); be_util::set_arg_seen_bit (bt); idl_global->need_skeleton_includes_ = true; } }
void be_visitor_connector_dds_exh::gen_connector_traits (void) { AST_Decl *comp_scope = ScopeAsDecl (this->node_->defined_in ()); bool global_comp = (comp_scope->node_type () == AST_Decl::NT_root); os_ << be_nl_2 << "struct CCM_" << this->node_->flat_name () << "_Traits" << be_nl << "{" << be_idt_nl << "typedef ::CIAO_" << this->node_->flat_name () << "_Impl::" << this->node_->local_name () << "_Exec base_type;" << be_nl << "typedef " << (global_comp ? "" : "::") << comp_scope->name () << "::CCM_" << this->node_->local_name () << "_Context context_type;" << be_nl; if (this->visit_component_scope (this->node_) == -1) { ACE_ERROR ((LM_ERROR, ACE_TEXT ("be_visitor_connector_dds_exh::") ACE_TEXT ("gen_connector_traits - ") ACE_TEXT ("visit_scope_failed\n "))); return; } os_ << be_uidt_nl << "};"; }
int be_visitor_component_scope::visit_mirror_port ( be_mirror_port *node) { AST_Decl::NodeType nt = ScopeAsDecl (node->defined_in ())->node_type (); /// Skip if we are defined inside a porttype. /// Depends on nested ports not being allowed. if (nt == AST_Decl::NT_component || nt == AST_Decl::NT_connector) { this->ctx_->port_prefix () = node->local_name ()->get_string (); this->ctx_->port_prefix () += '_'; } int status = this->visit_porttype_scope_mirror (node->port_type ()); if (status == -1) { ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("be_visitor_component_scope") ACE_TEXT ("::visit_mirror_port - ") ACE_TEXT ("visit_porttype_scope") ACE_TEXT ("_mirror failed\n")), -1); } /// Reset port prefix string. this->ctx_->port_prefix () = ""; return 0; }
int be_visitor_attribute_ccm_init::visit_attribute ( be_attribute *node) { if (node->readonly ()) { return 0; } be_interface *intf = this->ctx_->interface (); if (intf != 0) { AST_Decl::NodeType snt = intf->node_type (); AST_Decl::NodeType ant = ScopeAsDecl (node->defined_in ())->node_type (); if (snt == AST_Decl::NT_component && ant == AST_Decl::NT_porttype) { return 0; } } attr_ = node; be_type *ft = be_type::narrow_from_decl (node->field_type ()); return ft->accept (this); }
int be_visitor_executor_exh::visit_provides (be_provides *node) { ACE_CString prefix (this->ctx_->port_prefix ()); prefix += node->local_name ()->get_string (); const char *port_name = prefix.c_str (); be_type *impl = node->provides_type (); AST_Decl *scope = ScopeAsDecl (impl->defined_in ()); ACE_CString sname_str (scope->full_name ()); const char *sname = sname_str.c_str (); // No '_cxx_' prefix. const char *lname = impl->original_local_name ()->get_string (); const char *global = (sname_str == "" ? "" : "::"); os_ << be_nl_2 << "/// Factory method and getter for " << port_name << " facet" << be_nl << "/// @return existing instance of facet if one exists, else creates one" << be_nl << "virtual " << global << sname << "::CCM_" << lname << "_ptr" << be_nl << "get_" << port_name << " (void);"; return 0; }
void be_util::gen_nesting_open (TAO_OutStream &os, AST_Decl *node) { AST_Decl::NodeType nt = node->node_type (); if (nt == AST_Decl::NT_root) { os << be_nl; return; } be_util::gen_nesting_open ( os, ScopeAsDecl (node->defined_in ())); if (nt == AST_Decl::NT_module) { ACE_CString module_name ( IdentifierHelper::try_escape (node->original_local_name ())); os << be_nl << "module " << module_name.c_str () << be_nl << "{" << be_idt; } }
// Add a node to set of nodes referenced in this scope void UTL_Scope::add_to_referenced(AST_Decl *e, idl_bool recursive) { UTL_Scope *s; AST_Decl **tmp; AST_Interface *itf; long oreferenced_allocated; long i; if (e == NULL) return ; // Special cases for forward declared interfaces and valuetypes in // the scope in which they're defined. Cannot add before full // definition is seen if ((e->node_type() == AST_Decl::NT_interface) || (e->node_type() == AST_Decl::NT_value)) { itf = AST_Interface::narrow_from_decl(e); if (itf != NULL && itf->defined_in() == this && !itf->is_defined()) return ; } // Only insert if it is not there already if (referenced(e)) return ; // Make sure there's space for one more if (pd_referenced_allocated == pd_referenced_used) { oreferenced_allocated = pd_referenced_allocated; pd_referenced_allocated += INCREMENT; tmp = new AST_Decl * [pd_referenced_allocated]; for (i = 0; i < oreferenced_allocated; i++) tmp[i] = pd_referenced[i]; delete [] pd_referenced; pd_referenced = tmp; } // Insert new reference pd_referenced[pd_referenced_used++] = e; // Now, if recursive is specified and "this" is not a common ancestor // of the referencing scope and the scope of definition of "e" then // add "e" to the set of referenced nodes in the parent of "this" if (recursive && !(e->has_ancestor(ScopeAsDecl(this)))) { s = e->defined_in(); if (s != NULL) s->add_to_referenced(e, recursive); } }
int be_visitor_field_ch::visit_enum (be_enum *node) { TAO_OutStream *os = this->ctx_->stream (); be_type *bt = 0; if (this->ctx_->alias ()) { bt = this->ctx_->alias (); } else { bt = node; } // If not a typedef and we are defined in the use scope, we must be defined. if (!this->ctx_->alias () // not a typedef && node->is_child (this->ctx_->scope ()->decl ())) { // Instantiate a visitor context with a copy of our context. This info // will be modified based on what type of node we are visiting. be_visitor_context ctx (*this->ctx_); ctx.node (node); // First generate the enum declaration. be_visitor_enum_ch visitor (&ctx); if (node->accept (&visitor) == -1) { ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_field_ch::" "visit_enum - " "codegen failed\n"), -1); } } // This was a typedefed array. // ACE_NESTED_CLASS macro generated by nested_type_name // is necessary if the struct, union, or valuetype containing this // field was not defined inside a module. In such a case, VC++ // complains that the non-module scope is not yet fully defined. UTL_Scope *holds_container = this->ctx_->scope ()->decl ()->defined_in (); AST_Decl *hc_decl = ScopeAsDecl (holds_container); if (hc_decl->node_type () != AST_Decl::NT_module) { *os << bt->nested_type_name (this->ctx_->scope ()->decl ()); } else { *os << bt->name (); } return 0; }
void be_visitor_connector_ami_exh::gen_entrypoint (void) { os_ << be_nl_2 << "extern \"C\" " << this->export_macro_.c_str () << " ::Components::EnterpriseComponent_ptr" << be_nl << "create_" << ScopeAsDecl (this->node_->defined_in ())->flat_name () << "_Impl (void);"; }
int be_visitor_field_ch::visit_union (be_union *node) { TAO_OutStream *os = this->ctx_->stream (); be_type *bt = 0; if (this->ctx_->alias ()) { bt = this->ctx_->alias (); } else { bt = node; } if (!this->ctx_->alias () && node->is_child (this->ctx_->scope ()->decl ())) { be_visitor_context ctx (*this->ctx_); ctx.node (node); be_visitor_union_ch visitor (&ctx); if (node->accept (&visitor) == -1) { ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_field_ch::" "visit_union - " "codegen failed\n"), -1); } } *os << be_nl_2; // This was a typedefed array. // ACE_NESTED_CLASS macro generated by nested_type_name // is necessary if the struct, union, or valuetype containing this // field was not defined inside a module. In such a case, VC++ // complains that the non-module scope is not yet fully defined. UTL_Scope *holds_container =\ this->ctx_->scope ()->decl ()->defined_in (); AST_Decl *hc_decl = ScopeAsDecl (holds_container); if (hc_decl->node_type () != AST_Decl::NT_module) { *os << bt->nested_type_name (this->ctx_->scope ()->decl ()); } else { *os << bt->name (); } return 0; }
UTL_ScopedName * AST_Constant::enum_full_name (void) { if (this->pd_et == AST_Expression::EV_enum) { UTL_Scope * const s = this->defined_in (); AST_Decl * const d = s->lookup_by_name (this->pd_constant_value->n (), 1); return (d ? (ScopeAsDecl (d->defined_in ()))->name () : 0); } else { return 0; } }
int be_visitor_executor_exs::visit_provides (be_provides *node) { ACE_CString prefix (this->ctx_->port_prefix ()); prefix += node->local_name ()->get_string (); const char *port_name = prefix.c_str (); be_type *obj = node->provides_type (); const char *iname = obj->original_local_name ()->get_string (); AST_Decl *scope = ScopeAsDecl (obj->defined_in ()); ACE_CString sname_str (scope->full_name ()); const char *sname = sname_str.c_str (); const char *global = (sname_str == "" ? "" : "::"); ACE_CString lname_str (this->ctx_->port_prefix ()); lname_str += node->original_local_name ()->get_string (); const char *lname = lname_str.c_str (); os_ << be_nl_2 << global << sname << "::CCM_" << iname << "_ptr" << be_nl << node_->local_name () << "_exec_i::get_" << port_name << " (void)" << be_nl << "{" << be_idt_nl << "if ( ::CORBA::is_nil (this->ciao_" << port_name << "_.in ()))" << be_idt_nl << "{" << be_idt_nl << lname << "_exec_i *tmp = 0;" << be_nl << "ACE_NEW_RETURN (" << be_idt_nl << "tmp," << be_nl << lname << "_exec_i (" << be_idt_nl << "this->ciao_context_.in ())," << be_nl << global << sname << "::CCM_" << iname << "::_nil ());" << be_uidt << be_nl_2 << "this->ciao_" << port_name << "_ = tmp;" << be_uidt << be_uidt_nl << "}" << be_uidt << be_nl_2 << "return" << be_idt_nl << global << sname << "::CCM_" << iname << "::_duplicate (" << be_idt_nl << "this->ciao_" << port_name << "_.in ());" << be_uidt << be_uidt << be_uidt_nl << "}"; return 0; }
int be_visitor_executor_exs::visit_operation (be_operation *node) { AST_Decl::NodeType nt = ScopeAsDecl (node->defined_in ())->node_type (); // Components have implied IDL operations added to the AST, but // we are interested only in supported interface operations. if (nt == AST_Decl::NT_component || nt == AST_Decl::NT_connector) { return 0; } be_visitor_operation_exs v (this->ctx_); v.scope (op_scope_); return v.visit_operation (node); }
UTL_ScopedName * make_fully_scoped_name (Identifier * id) { UTL_ScopedName * result = NULL; UTL_Scope *s = idl_global->scopes()->top_non_null(); AST_Decl * d = ScopeAsDecl(s); UTL_ScopedName * lastComponent = new UTL_ScopedName(id, NULL); UTL_ScopedName * leadComponents = d->name(); if (leadComponents) { result = (UTL_IdList*)leadComponents->copy(); // YO downcast result->nconc(lastComponent); } else { result = lastComponent; } return result; }
AST_Template_Module * FE_Utils::get_tm_container (AST_Decl *contained) { AST_Decl *d = contained; while (d != 0) { AST_Template_Module *tm = AST_Template_Module::narrow_from_decl (d); if (tm != 0) { return tm; } d = ScopeAsDecl (d->defined_in ()); } return 0; }
int be_visitor_connector_dds_exh::visit_attribute ( be_attribute *node) { AST_Decl::NodeType nt = ScopeAsDecl (node->defined_in ())->node_type (); /// We are interested in attributes in extended ports /// and connectors, skip all others. if (nt == AST_Decl::NT_component) { return 0; } os_ << be_nl << "typedef " << node->field_type ()->full_name () << " " << node->local_name ()->get_string () << "_type;"; return 0; }
void be_visitor_home_svs::gen_entrypoint (void) { ACE_CString sname_str ( ScopeAsDecl (node_->defined_in ())->full_name ()); const char *sname = sname_str.c_str (); // Avoid _cxx_ prefix. const char *lname = node_->original_local_name ()->get_string (); const char *global = (sname_str == "" ? "" : "::"); os_ << be_nl_2 << "extern \"C\" " << export_macro_.c_str () << " ::PortableServer::Servant" << be_nl << "create_" << node_->flat_name () << "_Servant (" << be_idt_nl << "::Components::HomeExecutorBase_ptr p," << be_nl << "::CIAO::" << be_global->ciao_container_type () << "_Container_ptr c," << be_nl << "const char * ins_name)" << be_uidt_nl << "{" << be_idt_nl << "::PortableServer::Servant retval = 0;" << be_nl << global << sname << "::CCM_" << lname << "_var x =" << be_idt_nl << global << sname << "::CCM_" << lname << "::_narrow (p);" << be_uidt_nl << be_nl << "if (! ::CORBA::is_nil (x.in ()))" << be_idt_nl << "{" << be_idt_nl << "ACE_NEW_NORETURN (retval," << be_nl << " " << lname << "_Servant (" << be_idt_nl << " x.in ()," << be_nl << " ins_name," << be_nl << " c));" << be_uidt << be_uidt_nl << "}" << be_uidt_nl << be_nl << "return retval;" << be_uidt_nl << "}"; }
void be_visitor_component_scope::gen_svnt_entrypoint_defn (void) { ACE_CString sname_str ( ScopeAsDecl (node_->defined_in ())->full_name ()); const char *sname = sname_str.c_str (); const char *lname = node_->local_name (); const char *global = (sname_str == "" ? "" : "::"); os_ << be_nl_2 << "extern \"C\" " << export_macro_.c_str () << " ::PortableServer::Servant" << be_nl << "create_" << node_->flat_name () << "_Servant (" << be_idt_nl << "::Components::EnterpriseComponent_ptr p," << be_nl << "::CIAO::" << be_global->ciao_container_type () << "_Container_ptr c," << be_nl << "const char * ins_name)" << be_uidt_nl << "{" << be_idt_nl << global << sname << "::CCM_" << lname << "_var x =" << be_idt_nl << global << sname << "::CCM_" << lname << "::_narrow (p);" << be_uidt_nl << be_nl << "if ( ::CORBA::is_nil (x.in ()))" << be_idt_nl << "{" << be_idt_nl << "return 0;" << be_uidt_nl << "}" << be_uidt_nl << be_nl << "::PortableServer::Servant retval = 0;" << be_nl << "ACE_NEW_RETURN (retval," << be_nl << " " << lname << "_Servant (" << be_idt_nl << " x.in ()," << be_nl << " ::Components::CCMHome::_nil ()," << be_nl << " ins_name," << be_nl << " 0," << be_nl << " c)," << be_uidt_nl << " 0);" << be_nl_2 << "return retval;" << be_uidt_nl << "}"; }
void be_visitor_connector_dds_exh::gen_interface_connector_trait ( be_interface *iface, be_field *port_elem, bool for_facet) { if (!iface->dds_connector_traits_done ()) { AST_Decl *scope = ScopeAsDecl (iface->defined_in ()); bool global = (scope->node_type () == AST_Decl::NT_root); const char *smart_scope = (global ? "" : "::"); const char *lname = iface->local_name (); os_ << be_nl << "typedef ::" << scope->name () << smart_scope << (!for_facet ? "" : "CCM_") << lname << " " << port_elem->local_name ()->get_string () << "_type;"; iface->dds_connector_traits_done (true); this->port_ifaces_.enqueue_tail (iface); } }
UTL_ScopedName * be_visitor_xplicit_pre_proc::xplicit_iface_rel_name (AST_Decl *d) { AST_Decl *tmp = d; ACE_CString name (d->full_name ()); while (tmp != 0) { if (be_home::narrow_from_decl (tmp) != 0) { ACE_CString head (tmp->local_name ()->get_string ()); ACE_CString::size_type start = name.find (head) + 2; ACE_CString tail (name.substr (start + head.length ())); return FE_Utils::string_to_scoped_name (tail.c_str ()); } tmp = ScopeAsDecl (tmp->defined_in ()); } return 0; }
UTL_ScopedName * ast_visitor_reifying::template_module_rel_name (AST_Decl *d) { AST_Decl *tmp = d; ACE_CString name (d->full_name ()); while (tmp != 0) { if (AST_Template_Module::narrow_from_decl (tmp) != 0) { ACE_CString head (tmp->local_name ()->get_string ()); ACE_CString::size_type start = name.find (head) + 2; ACE_CString tail (name.substr (start + head.length ())); return FE_Utils::string_to_scoped_name (tail.c_str ()); } tmp = ScopeAsDecl (tmp->defined_in ()); } return 0; }
int be_visitor_facet_exh::visit_provides (be_provides *node) { be_type *impl = node->provides_type (); const char *iname = impl->original_local_name ()->get_string (); ACE_CString lname_str (this->ctx_->port_prefix ()); lname_str += node->original_local_name ()->get_string (); const char *lname = lname_str.c_str (); AST_Decl *s = ScopeAsDecl (impl->defined_in ()); ACE_CString sname_str = IdentifierHelper::orig_sn (s->name (), false); const char *sname = sname_str.c_str (); const char *global = (sname_str == "" ? "" : "::"); AST_Decl *c_scope = ScopeAsDecl (this->node_->defined_in ()); bool is_global = (c_scope->node_type () == AST_Decl::NT_root); const char *smart_scope = (is_global ? "" : "::"); os_ << be_nl_2 << "/// Executor implementation class for " << lname << " facet"; os_ << be_nl << "class " << lname << "_exec_i" << be_idt_nl << ": public virtual " << global << sname << "::CCM_" << iname << "," << be_idt_nl << "public virtual ::CORBA::LocalObject" << be_uidt << be_uidt_nl << "{" << be_nl << "public:" << be_idt_nl << "/// Constructor" << be_nl << "/// @param[in] ctx - Container context" << be_nl << lname << "_exec_i (" << be_idt_nl << smart_scope << c_scope->full_name () << "::CCM_" << this->node_->local_name () << "_Context_ptr ctx);" << be_uidt_nl << "/// Destructor" << be_nl << "virtual ~" << lname << "_exec_i (void);"; if (impl->node_type () == AST_Decl::NT_interface) { be_interface *intf = be_interface::narrow_from_decl (impl); os_ << be_nl_2 << "/** @name Operations and attributes from " << intf->full_name () << " */" << be_nl << "//@{"; int const status = intf->traverse_inheritance_graph ( be_visitor_facet_exh::method_helper, &os_); if (status == -1) { ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("be_visitor_facet_exh::") ACE_TEXT ("visit_provides - ") ACE_TEXT ("traverse_inheritance_graph() ") ACE_TEXT ("failed\n")), -1); } os_ << be_nl << "//@}"; } os_ << be_uidt << be_nl_2 << "private:" << be_idt_nl << "/// Context for component instance. Used for all middleware communication." << be_nl << smart_scope << c_scope->full_name () << "::CCM_" << this->node_->local_name () << "_Context_var ciao_context_;" << be_uidt_nl << "};"; return 0; }