be_produce.cpp File Reference

#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)


Function Documentation

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   ) 

Definition at line 85 of file be_produce.cpp.

Referenced by BE_produce().

00086 {
00087   idl_global->destroy ();
00088 }

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 }


Generated on Tue Feb 2 17:50:50 2010 for TAO_IFR by  doxygen 1.4.7