#include "global_extern.h"
#include "TAO_IFR_BE_Export.h"
#include "be_extern.h"
#include "fe_extern.h"
#include "ast_root.h"
#include "ifr_visitor_macro.h"
#include "ifr_removing_visitor.h"
#include "ifr_adding_visitor.h"
Include dependency graph for be_produce.cpp:
Go to the source code of this file.
Functions | |
TAO_IFR_BE_Export void | BE_cleanup (void) |
TAO_IFR_BE_Export void | BE_abort (void) |
void | BE_create_holding_scope (void) |
int | BE_ifr_repo_init (void) |
TAO_IFR_BE_Export void | BE_produce (void) |
TAO_IFR_BE_Export void BE_abort | ( | void | ) |
Definition at line 92 of file be_produce.cpp.
References ACE_ERROR, ACE_TEXT(), and LM_ERROR.
Referenced by BE_produce().
00093 { 00094 ACE_ERROR ((LM_ERROR, 00095 ACE_TEXT ("Fatal Error - Aborting\n"))); 00096 00097 // BE_cleanup will be called after the exception is caught. 00098 throw Bailout (); 00099 }
TAO_IFR_BE_Export void BE_cleanup | ( | void | ) |
void BE_create_holding_scope | ( | void | ) |
Definition at line 102 of file be_produce.cpp.
References be_global, BE_GlobalData::holding_scope(), BE_GlobalData::holding_scope_name(), CORBA::is_nil(), and BE_GlobalData::repository().
Referenced by BE_produce().
00103 { 00104 CORBA::ModuleDef_ptr scope = CORBA::ModuleDef::_nil (); 00105 00106 // If we are multi-threaded, it may already be created. 00107 CORBA::Contained_var result = 00108 be_global->repository ()->lookup_id (be_global->holding_scope_name ()); 00109 00110 // Will live until the repository goes away for good. 00111 if (CORBA::is_nil (result.in ())) 00112 { 00113 scope = 00114 be_global->repository ()->create_module ( 00115 be_global->holding_scope_name (), 00116 be_global->holding_scope_name (), 00117 "1.0" 00118 ); 00119 } 00120 else 00121 { 00122 scope = CORBA::ModuleDef::_narrow (result.in ()); 00123 } 00124 00125 be_global->holding_scope (scope); 00126 }
int BE_ifr_repo_init | ( | void | ) |
Definition at line 129 of file be_produce.cpp.
References ACE_ERROR, ACE_ERROR_RETURN, ACE_TEXT(), be_global, TAO_Pseudo_Var_T< T >::in(), CORBA::is_nil(), LM_ERROR, BE_GlobalData::orb(), and BE_GlobalData::repository().
Referenced by BE_produce().
00130 { 00131 try 00132 { 00133 CORBA::Object_var object = 00134 be_global->orb ()->resolve_initial_references ("InterfaceRepository"); 00135 00136 if (CORBA::is_nil (object.in ())) 00137 { 00138 ACE_ERROR_RETURN (( 00139 LM_ERROR, 00140 ACE_TEXT ("Null objref from resolve_initial_references\n") 00141 ), 00142 -1 00143 ); 00144 } 00145 00146 CORBA::Repository_var repo = 00147 CORBA::Repository::_narrow (object.in ()); 00148 00149 if (CORBA::is_nil (repo.in ())) 00150 { 00151 ACE_ERROR_RETURN (( 00152 LM_ERROR, 00153 ACE_TEXT ("CORBA::Repository::_narrow failed\n") 00154 ), 00155 -1 00156 ); 00157 } 00158 00159 be_global->repository (repo._retn ()); 00160 } 00161 catch (CORBA::ORB::InvalidName &) 00162 { 00163 ACE_ERROR ((LM_ERROR, 00164 ACE_TEXT ("resolution of Interface Repository failed\n"))); 00165 throw Bailout (); 00166 } 00167 00168 return 0; 00169 }
TAO_IFR_BE_Export void BE_produce | ( | void | ) |
Definition at line 173 of file be_produce.cpp.
References CORBA::Exception::_tao_print_exception(), ACE_ERROR, ACE_TEXT(), BE_GlobalData::allow_duplicate_typedefs(), BE_abort(), BE_cleanup(), BE_create_holding_scope(), be_global, BE_ifr_repo_init(), LM_ERROR, BE_GlobalData::removing(), and TAO_IFR_VISITOR_WRITE_GUARD.
00174 { 00175 try 00176 { 00177 int status = BE_ifr_repo_init (); 00178 00179 if (status != 0) 00180 { 00181 return; 00182 } 00183 00184 BE_create_holding_scope (); 00185 00186 // Get the root node. 00187 AST_Decl *d = idl_global->root (); 00188 AST_Root *root = AST_Root::narrow_from_decl (d); 00189 00190 if (root == 0) 00191 { 00192 ACE_ERROR ((LM_ERROR, 00193 ACE_TEXT ("(%N:%l) BE_produce - ") 00194 ACE_TEXT ("No Root\n"))); 00195 00196 BE_abort (); 00197 } 00198 00199 if (be_global->removing ()) 00200 { 00201 ifr_removing_visitor visitor; 00202 00203 TAO_IFR_VISITOR_WRITE_GUARD; 00204 00205 // If the visitor is dispatched this way, we need to override 00206 // only visit_scope() for the removing visitor. 00207 if (visitor.visit_scope (root) == -1) 00208 { 00209 ACE_ERROR (( 00210 LM_ERROR, 00211 ACE_TEXT ("(%N:%l) BE_produce -") 00212 ACE_TEXT (" failed to accept removing visitor\n") 00213 )); 00214 00215 BE_abort (); 00216 } 00217 } 00218 else 00219 { 00220 ifr_adding_visitor visitor (d, 0, be_global->allow_duplicate_typedefs ()); 00221 00222 TAO_IFR_VISITOR_WRITE_GUARD; 00223 00224 if (root->ast_accept (&visitor) == -1) 00225 { 00226 ACE_ERROR (( 00227 LM_ERROR, 00228 ACE_TEXT ("(%N:%l) BE_produce -") 00229 ACE_TEXT (" failed to accept adding visitor\n") 00230 )); 00231 00232 BE_abort (); 00233 } 00234 } 00235 } 00236 catch (const CORBA::Exception& ex) 00237 { 00238 ex._tao_print_exception (ACE_TEXT ("BE_produce")); 00239 00240 } 00241 00242 // Clean up. 00243 BE_cleanup (); 00244 }