diff options
Diffstat (limited to 'TAO/TAO_IDL/be/be_visitor_interface/thru_poa_proxy_impl_sh.cpp')
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_interface/thru_poa_proxy_impl_sh.cpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_interface/thru_poa_proxy_impl_sh.cpp b/TAO/TAO_IDL/be/be_visitor_interface/thru_poa_proxy_impl_sh.cpp index 83f0263cb1a..8c82eb6f2dd 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/thru_poa_proxy_impl_sh.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/thru_poa_proxy_impl_sh.cpp @@ -95,3 +95,56 @@ be_visitor_interface_thru_poa_proxy_impl_sh::visit_interface ( return 0; } + +int +be_visitor_interface_thru_poa_proxy_impl_sh::gen_abstract_ops_helper ( + be_interface *node, + be_interface *base, + TAO_OutStream *os + ) +{ + if (node == base) + { + return 0; + } + + AST_Decl *d = 0; + be_visitor_context ctx; + ctx.stream (os); + + 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_thru_poa_proxy_" + "impl_sh::abstract_base_ops_helper - " + "bad node in this scope\n"), + -1); + } + + if (d->node_type () == AST_Decl::NT_op) + { + UTL_ScopedName item_new_name (d->local_name (), + 0); + + AST_Operation *op = AST_Operation::narrow_from_decl (d); + be_operation new_op (op->return_type (), + op->flags (), + &item_new_name, + op->is_local (), + op->is_abstract ()); + + ctx.state (TAO_CodeGen::TAO_OPERATION_THRU_POA_COLLOCATED_SH); + be_visitor_operation_proxy_impl_xh op_visitor (&ctx); + op_visitor.visit_operation (&new_op); + } + } + + return 0; +} + |