summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be/be_codegen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/TAO_IDL/be/be_codegen.cpp')
-rw-r--r--TAO/TAO_IDL/be/be_codegen.cpp2436
1 files changed, 0 insertions, 2436 deletions
diff --git a/TAO/TAO_IDL/be/be_codegen.cpp b/TAO/TAO_IDL/be/be_codegen.cpp
deleted file mode 100644
index 2393171c558..00000000000
--- a/TAO/TAO_IDL/be/be_codegen.cpp
+++ /dev/null
@@ -1,2436 +0,0 @@
-// $Id$
-
-// ============================================================================
-//
-// = LIBRARY
-// TAO IDL
-//
-// = FILENAME
-// be_codegen.cpp
-//
-// = DESCRIPTION
-// Code generation
-//
-// = AUTHOR
-// Aniruddha Gokhale
-//
-// ============================================================================
-
-#include "be_codegen.h"
-#include "be_helper.h"
-#include "be_visitor_factory.h"
-#include "be_stream_factory.h"
-#include "be_extern.h"
-#include "global_extern.h"
-#include "utl_string.h"
-#include "idl_defines.h"
- #include "ace/os_include/os_ctype.h"
-
-ACE_RCSID (be,
- be_codegen,
- "$Id$")
-
-TAO_CodeGen * tao_cg = 0;
-
-TAO_CodeGen::TAO_CodeGen (void)
- : client_header_ (0),
- client_stubs_ (0),
- client_inline_ (0),
- server_header_ (0),
- implementation_header_(0),
- implementation_skeleton_(0),
- server_template_header_ (0),
- server_skeletons_ (0),
- server_template_skeletons_ (0),
- server_inline_ (0),
- server_template_inline_ (0),
- anyop_header_ (0),
- anyop_source_ (0),
- gperf_input_stream_ (0),
- gperf_input_filename_ (0),
- curr_os_ (0),
- visitor_factory_ (0)
-{
-}
-
-// destructor
-TAO_CodeGen::~TAO_CodeGen (void)
-{
-}
-
-// visitor factory method
-be_visitor *
-TAO_CodeGen::make_visitor (be_visitor_context *ctx)
-{
-
- if (this->visitor_factory_ == 0)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- ACE_TEXT ("TAO_CodeGen::make_visitor - ")
- ACE_TEXT ("No Visitor Factory\n\n")),
- 0);
- }
-
- return this->visitor_factory_->make_visitor (ctx);
-}
-
-// Change the string to all upper case.
-const char *
-TAO_CodeGen::upcase (const char *str)
-{
- static char upcase_str [NAMEBUFSIZE];
-
- ACE_OS::memset (upcase_str,
- '\0',
- NAMEBUFSIZE);
-
- // Convert letters in str to upper case.
- for (unsigned int i = 0; i < ACE_OS::strlen (str); ++i)
- {
- if (isalpha (str[i]))
- {
- upcase_str[i] = static_cast<char> (toupper (str[i]));
- }
- else
- {
- // Copy it as it is.
- upcase_str[i] = str[i];
- }
- }
-
- return upcase_str;
-}
-
-// Set the client header stream.
-int
-TAO_CodeGen::start_client_header (const char *fname)
-{
- if (0 == fname)
- {
- // Bad file name.
- return -1;
- }
-
- // @@ We are making use of "included_idl_files" that is in the
- // idl_global. We need to make sure the validity of those files.
- idl_global->validate_included_idl_files ();
-
- // Retrieve the singleton instance to the outstream factory.
- TAO_OutStream_Factory *factory = TAO_OUTSTREAM_FACTORY::instance ();
-
- // Clean up between multiple files.
- delete this->client_header_;
- this->client_header_ = factory->make_outstream ();
-
- if (!this->client_header_)
- {
- return -1;
- }
-
- if (this->client_header_->open (fname, TAO_OutStream::TAO_CLI_HDR) == -1)
- {
- return -1;
- }
-
- *this->client_header_ << be_nl << "// TAO_IDL - Generated from" << be_nl
- << "// " << __FILE__ << ":" << __LINE__
- << be_nl << be_nl;
-
- // Generate the #ident string, if any.
- this->gen_ident_string (this->client_header_);
-
- ACE_CString pidl_checker (idl_global->filename ()->get_string ());
- bool got_pidl =
- (pidl_checker.substr (pidl_checker.length () - 5) == ".pidl");
-
- if (!got_pidl)
- {
- // Generate the #ifndef clause.
- this->gen_ifndef_string (fname,
- this->client_header_,
- "_TAO_IDL_",
- "_H_");
- }
- else
- {
- // Generate the #ifndef clause.
- this->gen_ifndef_string (fname,
- this->client_header_,
- "_TAO_PIDL_",
- "_H_");
- }
-
- if (be_global->pre_include () != 0)
- {
- *this->client_header_ << "#include /**/ \""
- << be_global->pre_include ()
- << "\"\n\n";
- }
-
- if (be_global->include_guard () != 0)
- {
- *this->client_header_ << "#ifndef "
- << be_global->include_guard ()
- << "\n";
-
- *this->client_header_ << "#error "
- << "You should not include " << fname;
-
- if (be_global->safe_include () != 0)
- {
- *this->client_header_ << ", use " << be_global->safe_include ();
- }
-
- *this->client_header_ << "\n";
-
- *this->client_header_ << "#endif /* "
- << be_global->include_guard ()
- << " */\n";
- }
-
- // To get ACE_UNUSED_ARGS
- this->gen_standard_include (this->client_header_,
- "ace/config-all.h");
-
- // Some compilers don't optimize the #ifndef header include
- // protection, but do optimize based on #pragma once.
- *this->client_header_ << "\n\n#if !defined (ACE_LACKS_PRAGMA_ONCE)\n"
- << "# pragma once\n"
- << "#endif /* ACE_LACKS_PRAGMA_ONCE */";
-
- *this->client_header_ << be_nl;
-
- // Other include files.
-
- if (be_global->stub_export_include () != 0)
- {
- *this->client_header_ << "\n#include \""
- << be_global->stub_export_include ()
- << "\"";
- }
-
- this->gen_stub_hdr_includes ();
-
- size_t nfiles = idl_global->n_included_idl_files ();
-
- if (nfiles > 0)
- {
- *this->client_header_ << "\n";
- }
-
- // We must include all the client headers corresponding to
- // IDL files included by the current IDL file.
- // We will use the included IDL file names as they appeared
- // in the original main IDL file, not the one which went
- // thru CC preprocessor.
- for (size_t j = 0; j < nfiles; ++j)
- {
- char* idl_name = idl_global->included_idl_files ()[j];
-
- // Make a String out of it.
- UTL_String idl_name_str = idl_name;
-
- // Make sure this file was actually got included, not
- // ignored by some #if defined compiler directive.
-
-
- // Get the clnt header from the IDL file name.
- const char* client_hdr =
- BE_GlobalData::be_get_client_hdr (&idl_name_str,
- 1);
-
- idl_name_str.destroy ();
-
- // Sanity check and then print.
- if (client_hdr != 0)
- {
- this->client_header_->print ("\n#include \"%s\"",
- client_hdr);
- }
- else
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- ACE_TEXT ("\nERROR, invalid file '%s' included"),
- idl_name),
- -1);
- }
- }
-
- // Generate the TAO_EXPORT_MACRO macro.
- *this->client_header_ << "\n\n#if defined (TAO_EXPORT_MACRO)\n";
- *this->client_header_ << "#undef TAO_EXPORT_MACRO\n";
- *this->client_header_ << "#endif\n";
- *this->client_header_ << "#define TAO_EXPORT_MACRO "
- << be_global->stub_export_macro ();
-
- // Begin versioned namespace support after initial headers have been
- // included, but before the inline file and post include
- // directives.
- *this->client_header_ << be_global->versioning_begin ();
-
- return 0;
-}
-
-// Get the client header stream.
-TAO_OutStream *
-TAO_CodeGen::client_header (void)
-{
- return this->client_header_;
-}
-
-// Set the client stub stream.
-int
-TAO_CodeGen::start_client_stubs (const char *fname)
-{
- // Retrieve the singleton instance to the outstream factory.
- TAO_OutStream_Factory *factory = TAO_OUTSTREAM_FACTORY::instance ();
-
- // Clean up between multiple files.
- delete this->client_stubs_;
- this->client_stubs_ = factory->make_outstream ();
-
- if (!this->client_stubs_)
- {
- return -1;
- }
-
- if (this->client_stubs_->open (fname, TAO_OutStream::TAO_CLI_IMPL) == -1)
- {
- return -1;
- }
-
- *this->client_stubs_ << be_nl << "// TAO_IDL - Generated from" << be_nl
- << "// " << __FILE__ << ":" << __LINE__
- << be_nl << be_nl;
-
- this->gen_stub_src_includes ();
-
- // Generate the ident string, if any.
- this->gen_ident_string (this->client_stubs_);
-
- // Only when we generate a client inline file generate the include
- if (be_global->gen_client_inline ())
- {
- // Generate the code that includes the inline file if not included in the
- // header file.
- *this->client_stubs_ << "\n\n#if !defined (__ACE_INLINE__)";
- *this->client_stubs_ << "\n#include \""
- << be_global->be_get_client_inline_fname (1)
- << "\"";
- *this->client_stubs_ << "\n#endif /* !defined INLINE */";
- }
-
- // Begin versioned namespace support after all headers have been
- // included, but before any code is generated.
- *this->client_stubs_ << be_global->versioning_begin ();
-
- return 0;
-}
-
-// Get the client stubs stream.
-TAO_OutStream *
-TAO_CodeGen::client_stubs (void)
-{
- return this->client_stubs_;
-}
-
-// Set the client inline stream.
-int
-TAO_CodeGen::start_client_inline (const char *fname)
-{
- // Retrieve the singleton instance to the outstream factory.
- TAO_OutStream_Factory *factory = TAO_OUTSTREAM_FACTORY::instance ();
-
- // Clean up between multiple files.
- delete this->client_inline_;
- this->client_inline_ = factory->make_outstream ();
-
- if (!this->client_inline_)
- {
- return -1;
- }
-
- if (this->client_inline_->open (fname, TAO_OutStream::TAO_CLI_INL) == -1)
- {
- return -1;
- }
-
- // Generate the ident string, if any.
- this->gen_ident_string (this->client_inline_);
-
- // Begin versioned namespace support after initial headers, if any,
- // have been included.
- *this->client_inline_ << be_global->versioning_begin ();
-
- return 0;
-}
-
-// Get the client inline stream.
-TAO_OutStream *
-TAO_CodeGen::client_inline (void)
-{
- return this->client_inline_;
-}
-
-// Set the server header stream.
-int
-TAO_CodeGen::start_server_header (const char *fname)
-{
- // Retrieve the singleton instance to the outstream factory.
- TAO_OutStream_Factory *factory = TAO_OUTSTREAM_FACTORY::instance ();
-
- // Clean up between multiple files.
- delete this->server_header_;
- this->server_header_ = factory->make_outstream ();
-
- if (!this->server_header_)
- {
- return -1;
- }
-
- if (this->server_header_->open (fname, TAO_OutStream::TAO_SVR_HDR) == -1)
- {
- return -1;
- }
-
- // If we are suppressing skel file generation, bail after generating the
- // copyright text and an informative message.
- if (!be_global->gen_skel_files ())
- {
- *this->server_header_ << be_nl
- << "// Skeleton file generation suppressed with "
- << "command line option -SS" << be_nl;
-
- return 0;
- }
-
- *this->server_header_ << be_nl
- << "// TAO_IDL - Generated from" << be_nl
- << "// " << __FILE__ << ":" << __LINE__
- << be_nl << be_nl;
-
- // Generate the ident string, if any.
- this->gen_ident_string (this->server_header_);
-
- // Generate the #ifndef clause.
- this->gen_ifndef_string (fname,
- this->server_header_,
- "_TAO_IDL_",
- "_H_");
-
- if (be_global->pre_include () != 0)
- {
- *this->server_header_ << "#include /**/ \""
- << be_global->pre_include ()
- << "\"\n";
- }
-
- // The server header should include the client header.
- *this->server_header_ << "\n#include \""
- << be_global->be_get_client_hdr_fname (1)
- << "\"";
-
- // We must include all the skeleton headers corresponding to
- // IDL files included by the current IDL file.
- // We will use the included IDL file names as they appeared
- // in the original main IDL file, not the one which went
- // thru CC preprocessor.
- for (size_t j = 0;
- j < idl_global->n_included_idl_files ();
- ++j)
- {
- char* idl_name = idl_global->included_idl_files ()[j];
-
- // String'ifying the name.
- UTL_String idl_name_str (idl_name);
-
- const char* server_hdr =
- BE_GlobalData::be_get_server_hdr (&idl_name_str, 1);
-
- idl_name_str.destroy ();
-
- this->server_header_->print ("\n#include \"%s\"",
- server_hdr);
- }
-
- // Some compilers don't optimize the #ifndef header include
- // protection, but do optimize based on #pragma once.
- *this->server_header_ << "\n\n#if !defined (ACE_LACKS_PRAGMA_ONCE)\n"
- << "# pragma once\n"
- << "#endif /* ACE_LACKS_PRAGMA_ONCE */\n";
-
- // Include the definitions for the PortableServer namespace,
- // this forces the application to link the POA library, a good
- // thing, because we need the definitions there, it also
- // registers the POA factory with the Service_Configurator, so
- // the ORB can automatically find it.
- if (idl_global->non_local_iface_seen_)
- {
- // Include the Messaging files if AMI is enabled.
- if (be_global->ami_call_back () == true)
- {
- // Include Messaging skeleton file.
- this->gen_standard_include (this->server_header_,
- "tao/Messaging/MessagingS.h");
- }
-
- this->gen_standard_include (this->server_header_,
- "tao/Collocation_Proxy_Broker.h");
- this->gen_standard_include (this->server_header_,
- "tao/PortableServer/PortableServer.h");
- this->gen_standard_include (this->server_header_,
- "tao/PortableServer/Servant_Base.h");
-
- if (be_global->gen_amh_classes ())
- {
- this->gen_standard_include (this->server_header_,
- "tao/Messaging/AMH_Response_Handler.h");
- }
- }
-
- if (be_global->skel_export_include () != 0)
- {
- *this->server_header_ << "\n\n#include \""
- << be_global->skel_export_include ()
- << "\"";
-
- // Generate the TAO_EXPORT_MACRO macro.
- *this->server_header_ << "\n\n#if defined (TAO_EXPORT_MACRO)\n";
- *this->server_header_ << "#undef TAO_EXPORT_MACRO\n";
- *this->server_header_ << "#endif\n";
- *this->server_header_ << "#define TAO_EXPORT_MACRO "
- << be_global->skel_export_macro ();
- }
-
- // Begin versioned namespace support after initial headers have been
- // included, but before the inline file and post include
- // directives.
- *this->server_header_ << be_global->versioning_begin ();
-
- return 0;
-}
-
-// Get the server header stream.
-TAO_OutStream *
-TAO_CodeGen::server_header (void)
-{
- return this->server_header_;
-}
-
-// Set the server header stream.
-int
-TAO_CodeGen::start_server_template_header (const char *fname)
-{
- // Retrieve the singleton instance to the outstream factory.
- TAO_OutStream_Factory *factory = TAO_OUTSTREAM_FACTORY::instance ();
-
- // Clean up between multiple files.
- delete this->server_template_header_;
- this->server_template_header_ = factory->make_outstream ();
-
- if (!this->server_template_header_)
- {
- return -1;
- }
-
- if (this->server_template_header_->open (fname,
- TAO_OutStream::TAO_SVR_TMPL_HDR)
- == -1)
- {
- return -1;
- }
-
- *this->server_template_header_ << be_nl << "// TAO_IDL - Generated from"
- << be_nl
- << "// " << __FILE__ << ":" << __LINE__
- << be_nl << be_nl;
-
- // Generate the ident string, if any.
- this->gen_ident_string (this->server_template_header_);
-
- // Generate the #ifndef clause.
- this->gen_ifndef_string (fname,
- this->server_template_header_,
- "_TAO_IDL_",
- "_H_");
-
- if (be_global->pre_include () != 0)
- {
- *this->server_template_header_ << "#include /**/ \""
- << be_global->pre_include ()
- << "\"";
- }
-
- // Begin versioned namespace support after initial headers have been
- // included, but before the inline file and post include
- // directives.
- *this->server_template_header_ << be_global->versioning_begin ();
-
- return 0;
-}
-
-// Get the server header stream.
-TAO_OutStream *
-TAO_CodeGen::server_template_header (void)
-{
- return this->server_template_header_;
-}
-
-// Set the server skeletons stream.
-int
-TAO_CodeGen::start_server_skeletons (const char *fname)
-{
- // Retrieve the singleton instance to the outstream factory.
- TAO_OutStream_Factory *factory = TAO_OUTSTREAM_FACTORY::instance ();
-
- // Clean up between multiple files.
- delete this->server_skeletons_;
- this->server_skeletons_ = factory->make_outstream ();
-
- if (!this->server_skeletons_)
- {
- return -1;
- }
-
- if (this->server_skeletons_->open (fname,
- TAO_OutStream::TAO_SVR_IMPL)
- == -1)
- {
- return -1;
- }
-
- *this->server_skeletons_ << be_nl << be_nl << "// TAO_IDL - Generated from "
- << be_nl << "// " << __FILE__ << ":" << __LINE__
- << be_nl << be_nl;
-
- // Generate the ident string, if any.
- this->gen_ident_string (this->server_skeletons_);
-
- // Generate the include statement for the precompiled header file.
- if (be_global->pch_include ())
- {
- *this->server_skeletons_ << "#include \""
- << be_global->pch_include ()
- << "\"\n";
- }
-
- // Generate the #ifndef clause.
- this->gen_ifndef_string (fname,
- this->server_skeletons_,
- "_TAO_IDL_",
- "_CPP_");
-
- // Generate the include statement for the server header.
- *this->server_skeletons_
- << "\n#include \""
- << be_global->be_get_server_hdr_fname (1)
- << "\"";
-
- this->gen_skel_src_includes ();
-
- // Only when we generate a server inline file generate the include
- if (be_global->gen_server_inline ())
- {
- // Generate the code that includes the inline file if not included in the
- // header file.
- *this->server_skeletons_ << "\n\n#if !defined (__ACE_INLINE__)\n";
- *this->server_skeletons_ << "#include \""
- << be_global->be_get_server_inline_fname (1)
- << "\"\n";
- *this->server_skeletons_ << "#endif /* !defined INLINE */";
- }
-
- // Begin versioned namespace support after initial headers have been
- // included, but before the inline file and post include
- // directives.
- *this->server_skeletons_ << be_global->versioning_begin ();
-
- return 0;
-}
-
-// Get the server skeletons stream.
-TAO_OutStream *
-TAO_CodeGen::server_skeletons (void)
-{
- return this->server_skeletons_;
-}
-
-// Start the server template skeleton stream.
-int
-TAO_CodeGen::start_server_template_skeletons (const char *fname)
-{
- // Retrieve the singleton instance to the outstream factory.
- TAO_OutStream_Factory *factory = TAO_OUTSTREAM_FACTORY::instance ();
-
- // Clean up between multiple files.
- delete this->server_template_skeletons_;
- this->server_template_skeletons_ = factory->make_outstream ();
-
- if (!this->server_template_skeletons_)
- {
- return -1;
- }
-
- if (this->server_template_skeletons_->open (fname,
- TAO_OutStream::TAO_SVR_TMPL_IMPL)
- == -1)
- {
- return -1;
- }
-
- *this->server_template_skeletons_ << be_nl << "// TAO_IDL - Generated from "
- << be_nl << "// "
- << __FILE__ << ":" << __LINE__
- << be_nl << be_nl;
-
- // Generate the ident string, if any.
- this->gen_ident_string (this->server_template_skeletons_);
-
- // Generate the #ifndef clause.
- this->gen_ifndef_string (fname,
- this->server_template_skeletons_,
- "_TAO_IDL_",
- "_CPP_");
-
- // Generate the include statement for the server header.
- *this->server_template_skeletons_
- << "#include \""
- << be_global->be_get_server_template_hdr_fname (1)
- << "\"";
-
- // Generate the code that includes the inline file if not included in the
- // header file.
- *this->server_template_skeletons_ << "\n\n#if !defined (__ACE_INLINE__)";
- *this->server_template_skeletons_
- << "\n#include \""
- << be_global->be_get_server_template_inline_fname (1)
- << "\"";
- *this->server_template_skeletons_ << "\n#endif /* !defined INLINE */\n\n";
-
- // Begin versioned namespace support after initial headers have been
- // included, but before the inline file and post include
- // directives.
- *this->server_template_skeletons_ << be_global->versioning_begin ();
-
- return 0;
-}
-
-// Get the server template skeletons stream.
-TAO_OutStream *
-TAO_CodeGen::server_template_skeletons (void)
-{
- return this->server_template_skeletons_;
-}
-
-// Set the server inline stream.
-int
-TAO_CodeGen::start_server_inline (const char *fname)
-{
- // Retrieve the singleton instance to the outstream factory.
- TAO_OutStream_Factory *factory = TAO_OUTSTREAM_FACTORY::instance ();
-
- // Clean up between multiple files.
- delete this->server_inline_;
- this->server_inline_ = factory->make_outstream ();
-
- if (!this->server_inline_)
- {
- return -1;
- }
-
- if (this->server_inline_->open (fname, TAO_OutStream::TAO_SVR_INL) == -1)
- {
- return -1;
- }
-
- // Generate the ident string, if any.
- this->gen_ident_string (this->server_inline_);
-
- // Begin versioned namespace support after initial headers, if any, have been
- // included.
- *this->server_inline_ << be_global->versioning_begin ();
-
- return 0;
-}
-
-// Get the server inline stream.
-TAO_OutStream *
-TAO_CodeGen::server_inline (void)
-{
- return this->server_inline_;
-}
-
-// Set the server template inline stream.
-int
-TAO_CodeGen::start_server_template_inline (const char *fname)
-{
- // Retrieve the singleton instance to the outstream factory.
- TAO_OutStream_Factory *factory = TAO_OUTSTREAM_FACTORY::instance ();
-
- // Clean up between multiple files.
- delete this->server_template_inline_;
- this->server_template_inline_ = factory->make_outstream ();
-
- if (!this->server_template_inline_)
- {
- return -1;
- }
-
- if (this->server_template_inline_->open (fname,
- TAO_OutStream::TAO_SVR_INL)
- == -1)
- {
- return -1;
- }
-
- // Generate the ident string, if any.
- this->gen_ident_string (this->server_template_inline_);
-
- // Begin versioned namespace support after initial headers have been
- // included, but before the inline file and post include
- // directives.
- *this->server_template_inline_ << be_global->versioning_begin ();
-
- return 0;
-}
-
-// Get the server template inline stream.
-TAO_OutStream *
-TAO_CodeGen::server_template_inline (void)
-{
- return this->server_template_inline_;
-}
-
-int
-TAO_CodeGen::start_anyop_header (const char *fname)
-{
- if (!be_global->gen_anyop_files ())
- {
- return 0;
- }
-
- // Retrieve the singleton instance to the outstream factory.
- TAO_OutStream_Factory *factory = TAO_OUTSTREAM_FACTORY::instance ();
-
- // Clean up between multiple files.
- delete this->anyop_header_;
- this->anyop_header_ = factory->make_outstream ();
-
- if (0 == this->anyop_header_)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "TAO_CodeGen::start_anyop_header - "
- "Error creating file stream\n"),
- -1);
- }
-
- if (this->anyop_header_->open (fname,
- TAO_OutStream::TAO_CLI_HDR)
- == -1)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "TAO_CodeGen::start_anyop_header - "
- "Error opening file\n"),
- -1);
- }
-
- *this->anyop_header_ << be_nl
- << "// TAO_IDL - Generated from" << be_nl
- << "// " << __FILE__ << ":" << __LINE__
- << be_nl << be_nl;
-
- // Generate the #ident string, if any.
- this->gen_ident_string (this->anyop_header_);
-
- // Generate the #ifndef clause.
- this->gen_ifndef_string (fname,
- this->anyop_header_,
- "_TAO_IDL_",
- "_H_");
-
- if (be_global->pre_include () != 0)
- {
- *this->anyop_header_ << "#include /**/ \""
- << be_global->pre_include ()
- << "\"\n";
- }
-
- // If anyop macro hasn't been set, default to stub macro.
- if (be_global->anyop_export_include () != 0)
- {
- *this->anyop_header_ << "\n#include \""
- << be_global->anyop_export_include ()
- << "\"";
- }
- else if (be_global->stub_export_include () != 0)
- {
- *this->anyop_header_ << "\n#include \""
- << be_global->stub_export_include ()
- << "\"";
- }
-
- const char *tao_prefix = "";
- ACE_CString pidl_checker (idl_global->filename ()->get_string ());
- bool got_pidl =
- (pidl_checker.substr (pidl_checker.length () - 5) == ".pidl");
-
- // If we're here and we have a .pidl file, we need to generate
- // the *A.h include from the AnyTypeCode library.
- if (got_pidl)
- {
- tao_prefix = "tao/";
- }
-
- // Generate the include statement for the client header. We just
- // need to put only the base names. Path info is not required.
- *this->anyop_header_ << "\n#include \"" << tao_prefix
- << be_global->be_get_client_hdr_fname ()
- << "\"";
-
- // If we have not suppressed Any operator generation and also
- // are not generating the operators in a separate file, we
- // need to include the *A.h file from all .pidl files here.
- if (be_global->any_support ())
- {
- for (size_t j = 0; j < idl_global->n_included_idl_files (); ++j)
- {
- char* idl_name = idl_global->included_idl_files ()[j];
-
- // Make a String out of it.
- UTL_String idl_name_str = idl_name;
-
- const char *anyop_hdr =
- BE_GlobalData::be_get_anyop_header (&idl_name_str, 1);
-
- idl_name_str.destroy ();
-
- ACE_CString pidl_checker (idl_name);
- bool got_pidl =
- (pidl_checker.substr (pidl_checker.length () - 5) == ".pidl");
-
- // If we're here and we have a .pidl file, we need to generate
- // the *A.h include from the AnyTypeCode library.
- if (got_pidl)
- {
- // Stripped off any scope in the name and add the
- // AnyTypeCode prefix.
- ACE_CString work_hdr (anyop_hdr);
- ACE_CString final_hdr = "tao/AnyTypeCode/";
- ACE_CString::size_type pos = work_hdr.rfind ('/');
-
- if (pos != ACE_SString::npos)
- {
- ACE_CString scope (work_hdr.substr (0, pos - 1));
-
- // If we find a '/' in the containing scope name, it
- // means we are including a .pidl file from a
- // subdirectory of $TAO_ROOT/tao, and so we should
- // include the anyop_hdr string as is, and not strip
- // off the scope name and prepend "tao/AnyTypeCode/".
- // Only .pidl files in $TAO_ROOT/tao itself have
- // their generated *A.* files moved to the AnyTypeCode
- // library.
- if (scope.find ('/') == ACE_SString::npos)
- {
- work_hdr = work_hdr.substr (pos + 1);
- final_hdr += work_hdr;
- }
- else
- {
- final_hdr = work_hdr;
- }
- }
-
- this->anyop_header_->print ("\n#include \"%s\"",
- final_hdr.c_str ());
- }
- else
- {
- this->anyop_header_->print ("\n#include \"%s\"",
- anyop_hdr);
- }
- }
- }
- *this->anyop_header_ << "\n";
-
- // Begin versioned namespace support after initial headers have been
- // included, but before the inline file and post include
- // directives.
- *this->anyop_header_ << be_global->versioning_begin ();
-
- return 0;
-}
-
-int
-TAO_CodeGen::start_anyop_source (const char *fname)
-{
- if (!be_global->gen_anyop_files ())
- {
- return 0;
- }
-
- // Retrieve the singleton instance to the outstream factory.
- TAO_OutStream_Factory *factory = TAO_OUTSTREAM_FACTORY::instance ();
-
- // Clean up between multiple files.
- delete this->anyop_source_;
- this->anyop_source_ = factory->make_outstream ();
-
- if (0 == this->anyop_source_)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "TAO_CodeGen::start_anyop_source - "
- "Error creating file stream\n"),
- -1);
- }
-
- if (this->anyop_source_->open (fname,
- TAO_OutStream::TAO_CLI_IMPL)
- == -1)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "TAO_CodeGen::start_anyop_source - "
- "Error opening file\n"),
- -1);
- }
-
- // Generate the include statement for the precompiled header file.
- if (be_global->pch_include ())
- {
- *this->anyop_source_ << "#include \""
- << be_global->pch_include ()
- << "\"";
- }
-
- if (be_global->safe_include ())
- {
- // Generate the safe include if it is defined instead of the client header
- // need to put only the base names. Path info is not required.
- *this->anyop_source_ << "\n#include \""
- << be_global->safe_include ()
- << "\"";
- }
- else
- {
- // Generate the include statement for the client header. We just
- // need to put only the base names. Path info is not required.
- *this->anyop_source_ << "\n#include \""
- << be_global->be_get_anyop_header_fname (1)
- << "\"";
- }
-
- this->gen_typecode_includes (this->anyop_source_);
-
- this->gen_any_file_includes (this->anyop_source_);
-
- // Begin versioned namespace support after initial headers have been
- // included, but before the inline file and post include
- // directives.
- *this->anyop_source_ << be_global->versioning_begin ();
-
- return 0;
-}
-
-TAO_OutStream *
-TAO_CodeGen::anyop_header (void)
-{
- return this->anyop_header_;
-}
-
-TAO_OutStream *
-TAO_CodeGen::anyop_source (void)
-{
- return this->anyop_source_;
-}
-
-// Set the server header stream.
-int
-TAO_CodeGen::start_implementation_header (const char *fname)
-{
- // Retrieve the singleton instance to the outstream factory.
- TAO_OutStream_Factory *factory = TAO_OUTSTREAM_FACTORY::instance ();
-
- // Clean up between multiple files.
- delete this->implementation_header_;
- this->implementation_header_ = factory->make_outstream ();
-
- if (!this->implementation_header_)
- {
- return -1;
- }
-
- if (this->implementation_header_->open (fname,
- TAO_OutStream::TAO_IMPL_HDR)
- == -1)
- {
- return -1;
- }
-
- *this->implementation_header_ << be_nl << "// TAO_IDL - Generated from "
- << be_nl << "// "
- << __FILE__ << ":" << __LINE__
- << be_nl << be_nl;
-
- // Generate the ident string, if any.
- this->gen_ident_string (this->implementation_header_);
-
- // Generate the #ifndef clause.
- this->gen_ifndef_string (fname,
- this->implementation_header_,
- "",
- "_H_");
-
- const char* server_hdr = BE_GlobalData::be_get_server_hdr_fname (1);
-
- *this->implementation_header_<< "#include \"" << server_hdr <<"\"";
-
- *this->implementation_header_
- << "\n\n#if !defined (ACE_LACKS_PRAGMA_ONCE)\n"
- << "#pragma once\n"
- << "#endif /* ACE_LACKS_PRAGMA_ONCE */\n\n";
-
- if (idl_global->local_iface_seen_)
- {
- *this->implementation_header_ << "#include \"tao/LocalObject.h\"\n\n";
- }
-
- return 0;
-}
-
-
-// Get the implementation header stream.
-TAO_OutStream *
-TAO_CodeGen::implementation_header (void)
-{
- return this->implementation_header_;
-}
-
-
-// Set the implementation skeleton stream.
-int
-TAO_CodeGen::start_implementation_skeleton (const char *fname)
-{
- // Retrieve the singleton instance to the outstream factory.
- TAO_OutStream_Factory *factory = TAO_OUTSTREAM_FACTORY::instance ();
-
- // Clean up between multiple files.
- delete this->implementation_skeleton_;
- this->implementation_skeleton_ = factory->make_outstream ();
-
- if (!this->implementation_skeleton_)
- {
- return -1;
- }
-
- if (this->implementation_skeleton_->open (fname,
- TAO_OutStream::TAO_IMPL_SKEL)
- == -1)
- {
- return -1;
- }
-
- *this->implementation_skeleton_ << be_nl << "// TAO_IDL - Generated from "
- << be_nl << "// "
- << __FILE__ << ":" << __LINE__
- << be_nl << be_nl;
-
- // Generate the ident string, if any.
- this->gen_ident_string (this->implementation_skeleton_);
-
- const char* impl_hdr =
- BE_GlobalData::be_get_implementation_hdr_fname ();
-
- this->implementation_skeleton_->print ("#include \"%s\"\n\n",
- impl_hdr);
-
- return 0;
-}
-
-// Get the implementation header stream.
-TAO_OutStream *
-TAO_CodeGen::implementation_skeleton (void)
-{
- return this->implementation_skeleton_;
-}
-
-// Put the last #endif in the client and server headers.
-int
-TAO_CodeGen::end_client_header (void)
-{
- // Generate the <<= and >>= operators here.
-
- *this->client_header_ << be_nl << be_nl << "// TAO_IDL - Generated from"
- << be_nl << "// " << __FILE__ << ":" <<
- __LINE__ << be_nl;
-
- // End versioned namespace support before remaining include
- // directives at end of file.
- *this->client_header_ << be_global->versioning_end ();
-
- // Only when we generate a client inline file generate the include
- if (be_global->gen_client_inline ())
- {
- // Insert the code to include the inline file.
- *this->client_header_ << "#if defined (__ACE_INLINE__)\n";
- *this->client_header_ << "#include \""
- << be_global->be_get_client_inline_fname (1)
- << "\"\n";
- *this->client_header_ << "#endif /* defined INLINE */\n\n";
- }
-
- // Code to put the last #endif.
-
- if (be_global->post_include () != 0)
- {
- *this->client_header_ << "#include /**/ \""
- << be_global->post_include ()
- << "\"\n\n";
- }
-
- *this->client_header_ << "#endif /* ifndef */" << be_nl << be_nl;
-
- return 0;
-}
-
-void
-TAO_CodeGen::end_client_inline (void)
-{
- *this->client_inline_ << "\n";
-
- // End versioned namespace support. Do not place include directives
- // before this.
- *this->client_inline_ << be_global->versioning_end ();
-}
-
-void
-TAO_CodeGen::end_client_stubs (void)
-{
- *this->client_stubs_ << "\n";
-
- // End versioned namespace support. Do not place include directives
- // before this.
- *this->client_stubs_ << be_global->versioning_end ();
-}
-
-int
-TAO_CodeGen::end_server_header (void)
-{
- *this->server_header_ << be_nl << be_nl << "// TAO_IDL - Generated from "
- << be_nl << "// " << __FILE__ << ":" << __LINE__
- << be_nl << be_nl;
-
- // End versioned namespace support. Do not place include directives
- // before this.
- *this->server_header_ << be_global->versioning_end ();
-
- // Insert the template header.
- if (be_global->gen_tie_classes ())
- {
- *this->server_header_ << "#include \""
- << be_global->be_get_server_template_hdr_fname (1)
- << "\"\n";
- }
-
- // Only when we generate a server inline file generate the include
- if (be_global->gen_server_inline ())
- {
- // Insert the code to include the inline file.
- *this->server_header_ << "\n#if defined (__ACE_INLINE__)\n";
- *this->server_header_ << "#include \""
- << be_global->be_get_server_inline_fname (1)
- << "\"\n";
- *this->server_header_ << "#endif /* defined INLINE */";
- }
-
- // Code to put the last #endif.
- *this->server_header_ << "\n\n";
-
- if (be_global->post_include () != 0)
- {
- *this->server_header_ << "#include /**/ \""
- << be_global->post_include ()
- << "\"\n";
- }
-
- *this->server_header_ << "#endif /* ifndef */\n";
- return 0;
-}
-
-void
-TAO_CodeGen::end_server_inline (void)
-{
- *this->server_inline_ << "\n";
-
- // End versioned namespace support. Do not place include directives
- // before this.
- *this->server_inline_ << be_global->versioning_end ();
-}
-
-int
-TAO_CodeGen::end_implementation_header (const char *fname)
-{
- char macro_name [NAMEBUFSIZE] = { 0 };
-
- const char *suffix = ACE_OS::strrchr (fname, '.');
-
- if (suffix == 0)
- {
- // File seems to have no extension, so let us take the name
- // as it is.
- if (fname == 0)
- {
- // Bad file name.
- return -1;
- }
- else
- {
- suffix = fname;
- }
- }
-
- // Convert letters in fname to upper case.
- for (int i = 0; i < (suffix - fname); ++i)
- {
- if (isalpha (fname [i]))
- {
- macro_name[i] = static_cast<char> (toupper (fname [i]));
- }
- else if (isdigit (fname [i]))
- {
- macro_name[i] = fname[i];
- }
- else
- {
- macro_name[i] = '_';
- }
- }
-
- ACE_OS::strcat (macro_name,
- "_H_");
-
- // Code to put the last #endif.
- this->implementation_header_->print ("\n#endif /* %s */\n",
- macro_name);
- return 0;
-}
-
-int
-TAO_CodeGen::end_server_template_header (void)
-{
- *this->server_template_header_ << be_nl << be_nl << "// TAO_IDL - Generated from "
- << be_nl << "// "
- << __FILE__ << ":" << __LINE__ << "\n";
-
- // End versioned namespace support. Do not place include directives
- // before this.
- *this->server_template_header_ << be_global->versioning_end ();
-
- // Insert the code to include the inline file.
- *this->server_template_header_ << "#if defined (__ACE_INLINE__)";
- *this->server_template_header_
- << "\n#include \""
- << be_global->be_get_server_template_inline_fname (1)
- << "\"";
- *this->server_template_header_ << "\n#endif /* defined INLINE */";
-
- // Insert the code to include the template source file.
- *this->server_template_header_
- << "\n\n#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)";
- *this->server_template_header_
- << "\n#include \""
- << be_global->be_get_server_template_skeleton_fname (1)
- << "\"";
- *this->server_template_header_ << "\n#endif /* defined REQUIRED SOURCE */";
-
- // Insert the code to include the template pragma.
- *this->server_template_header_
- << "\n\n#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)";
- *this->server_template_header_
- << "\n#pragma implementation (\""
- << be_global->be_get_server_template_skeleton_fname (1)
- << "\")";
- *this->server_template_header_ << "\n#endif /* defined REQUIRED PRAGMA */";
-
- // Code to put the last #endif.
- *this->server_template_header_ << "\n\n";
-
- if (be_global->post_include () != 0)
- {
- *this->server_template_header_ << "#include /**/ \""
- << be_global->post_include ()
- << "\"\n";
- }
-
- *this->server_template_header_ << "#endif /* ifndef */\n";
- return 0;
-}
-
-int
-TAO_CodeGen::end_server_template_inline (void)
-{
- *this->server_template_inline_ << "\n";
-
- // End versioned namespace support. Do not place include directives
- // before this.
- *this->server_template_inline_ << be_global->versioning_end ();
-
- return 0;
-}
-
-int
-TAO_CodeGen::end_server_template_skeletons (void)
-{
- // End versioned namespace support. Do not place include directives
- // before this.
- *this->server_template_skeletons_ << be_global->versioning_end ();
-
- // Code to put the last #endif.
- *this->server_template_skeletons_ << "\n#endif /* ifndef */\n";
-
- return 0;
-}
-
-int
-TAO_CodeGen::end_server_skeletons (void)
-{
- // End versioned namespace support. Do not place include directives
- // before this.
- *this->server_skeletons_ << be_global->versioning_end ();
-
- // Code to put the last #endif.
- *this->server_skeletons_ << "\n\n#endif /* ifndef */\n";
-
- return 0;
-}
-
-int
-TAO_CodeGen::end_anyop_header (void)
-{
- // End versioned namespace support. Do not place include directives
- // before this.
- *this->anyop_header_ << be_global->versioning_end ();
-
-
- if (be_global->post_include () != 0)
- {
- *this->anyop_header_ << "\n\n#include /**/ \""
- << be_global->post_include ()
- << "\"";
- }
-
- // Code to put the last #endif.
- *this->anyop_header_ << "\n\n#endif /* ifndef */\n";
-
- return 0;
-}
-
-int
-TAO_CodeGen::end_anyop_source (void)
-{
- // End versioned namespace support. Do not place include directives
- // before this.
- *this->anyop_source_ << be_global->versioning_end ();
-
- *this->anyop_source_ << "\n";
-
- return 0;
-}
-
-// We use the following helper functions to pass information. This class is the
-// best place to pass such information rather than passing information through
-// global variables spread everywhere. This class is a singleton and is
-// effectively a global.
-
-void
-TAO_CodeGen::gperf_input_stream (TAO_OutStream *os)
-{
-#if !defined (linux) && !defined (__QNX__) && !defined (__GLIBC__)
- // This causes a seg fault on Linux RH 5.1. Let it leak . . .
- delete this->gperf_input_stream_;
-#endif /* ! linux */
- this->gperf_input_stream_ = os;
-}
-
-TAO_OutStream *
-TAO_CodeGen::gperf_input_stream (void)
-{
- return this->gperf_input_stream_;
-}
-
-void
-TAO_CodeGen::gperf_input_filename (char *filename)
-{
- delete [] this->gperf_input_filename_;
- this->gperf_input_filename_ = filename;
-}
-
-char *
-TAO_CodeGen::gperf_input_filename (void)
-{
- return this->gperf_input_filename_;
-}
-
-void
-TAO_CodeGen::outstream (TAO_OutStream *os)
-{
- this->curr_os_ = os;
-}
-
-TAO_OutStream *
-TAO_CodeGen::outstream (void)
-{
- return this->curr_os_;
-}
-
-void
-TAO_CodeGen::node (be_decl *n)
-{
- this->node_ = n;
-}
-
-be_decl *
-TAO_CodeGen::node (void)
-{
- return this->node_;
-}
-
-void
-TAO_CodeGen::config_visitor_factory (void)
-{
- this->visitor_factory_ = TAO_VISITOR_FACTORY::instance ();
-}
-
-void
-TAO_CodeGen::gen_ident_string (TAO_OutStream *stream) const
-{
- const char *str = idl_global->ident_string ();
-
- if (str != 0)
- {
- *stream << "#" << str << be_nl << be_nl;
- }
-}
-
-void
-TAO_CodeGen::gen_ifndef_string (const char *fname,
- TAO_OutStream *stream,
- const char *prefix,
- const char *suffix)
-{
- char macro_name [NAMEBUFSIZE] = { 0 };
-
- const char *extension = ACE_OS::strrchr (fname, '.');
-
- if (extension == 0)
- {
- // File seems to have no extension, so let us take the name
- // as it is.
- extension = fname;
- }
-
- ACE_OS::sprintf (macro_name, prefix);
-
- size_t offset = ACE_OS::strlen (prefix);
-
- // Convert letters in fname to upper case.
- for (int i = 0; i < (extension - fname); i++)
- {
- if (isalpha (fname [i]))
- {
- macro_name[i + offset] = static_cast<char> (toupper (fname [i]));
- }
- else if (isdigit (fname [i]))
- {
- macro_name[i + offset] = fname[i];
- }
- else
- {
- macro_name[i + offset] = '_';
- }
- }
-
- ACE_OS::strcat (macro_name, suffix);
-
- // Generate the #ifndef ... #define statements.
- stream->print ("#ifndef %s\n",
- macro_name);
- stream->print ("#define %s\n\n",
- macro_name);
-}
-
-void
-TAO_CodeGen::gen_standard_include (TAO_OutStream *stream,
- const char *included_file)
-{
- // Switch between changing or non-changing standard include files
- // include files, so that #include statements can be
- // generated with ""s or <>s respectively, for the standard include
- // files (e.g. tao/corba.h).
-
- const char *start_delimiter = "\"";
- const char *end_delimiter = "\"";
-
- if (be_global->changing_standard_include_files () == 0)
- {
- start_delimiter = "<";
- end_delimiter = ">";
- }
-
- *stream << "\n#include " << start_delimiter
- << included_file
- << end_delimiter;
-}
-
-void
-TAO_CodeGen::gen_stub_hdr_includes (void)
-{
- // Include valuetype and Any/TypeCode headers before ORB core
- // headers to make sure some things are parsed before some templates
- // (e.g. TAO_Pseudo_{Var,Out}_T). Addresses issues with compilers
- // that require all necessary non-dependent names be parsed prior to
- // parsing templates that may use them (e.g. GNU g++ 3.4.x).
-
- this->gen_cond_file_include (be_global->tc_support ()
- && !be_global->gen_anyop_files (),
- "tao/AnyTypeCode/AnyTypeCode_methods.h",
- this->client_header_);
-
- if (idl_global->abstract_iface_seen_)
- {
- // Include the AbstractBase file from the Valuetype library.
- this->gen_standard_include (this->client_header_,
- "tao/Valuetype/AbstractBase.h");
-
- // Turn on generation of the rest of the Valuetype library includes.
- idl_global->valuetype_seen_ = true;
- }
-
- if (idl_global->valuebase_seen_)
- {
- // Include files from the Valuetype library.
- this->gen_standard_include (this->client_header_,
- "tao/Valuetype/ValueBase.h");
-
- // Valuebox needs CDR for _tao_marshal_v code in .inl file
- this->gen_standard_include (this->client_header_,
- "tao/CDR.h");
- }
-
- if (idl_global->valuetype_seen_)
- {
- // Don't want to generate this twice.
- if (!idl_global->valuebase_seen_)
- {
- this->gen_standard_include (this->client_header_,
- "tao/Valuetype/ValueBase.h");
- }
-
- this->gen_standard_include (this->client_header_,
- "tao/Valuetype/Valuetype_Adapter_Factory_Impl.h");
-
- // Check for setting this bit performed in y.tab.cpp, actual checking
- // code is in be_valuetype.cpp.
- this->gen_cond_file_include (
- idl_global->valuefactory_seen_,
- "tao/Valuetype/ValueFactory.h",
- this->client_header_
- );
- }
-
- // @note This header should not go first. See the discussion above
- // regarding non-dependent template names.
- this->gen_cond_file_include (
- be_global->gen_orb_h_include (),
- "tao/ORB.h",
- this->client_header_
- );
-
- this->gen_cond_file_include (
- idl_global->operation_seen_ || idl_global->valuefactory_seen_
- || idl_global->valuebase_seen_,
- "tao/SystemException.h",
- this->client_header_
- );
-
- // For IDL exception, we need full knowledge of CORBA::UserException.
- this->gen_cond_file_include (
- idl_global->exception_seen_,
- "tao/UserException.h",
- this->client_header_
- );
-
- this->gen_standard_include (this->client_header_,
- "tao/Environment.h");
-
- // Conditionally included.
-
- // DDS/DCPS marshaling.
- this->gen_cond_file_include (
- be_global->gen_dcps_type_support (),
- "dds/DCPS/Serializer.h",
- this->client_header_
- );
-
- // Non-abstract interface or keyword 'Object'.
- this->gen_cond_file_include (
- idl_global->non_local_iface_seen_
- | idl_global->local_iface_seen_
- | idl_global->base_object_seen_,
- "tao/Object.h",
- this->client_header_
- );
-
- // This is true if we have a typecode or TCKind in the IDL file.
- // If not included here, it will appear in *C.cpp, if TCs not suppressed.
- this->gen_cond_file_include (
- idl_global->typecode_seen_
- | idl_global->any_seen_,
- "tao/AnyTypeCode/TypeCode.h",
- this->client_header_
- );
-
- this->gen_cond_file_include (
- idl_global->any_seen_
- | idl_global->typecode_seen_,
- "tao/AnyTypeCode/TypeCode_Constants.h",
- this->client_header_);
-
- // This is true if we have an 'any' in the IDL file.
- // If not included here, it will appear in *C.cpp, if Anys not suppressed.
- this->gen_cond_file_include (
- idl_global->any_seen_,
- "tao/AnyTypeCode/Any.h",
- this->client_header_
- );
-
- // Generated if (w)string member of struct/union/exception/array/valuetype
- // has been seen.
- this->gen_cond_file_include (idl_global->string_member_seen_,
- "tao/String_Manager_T.h",
- this->client_header_);
-
- // Include the Messaging library entry point, if AMI is enabled.
- if (be_global->ami_call_back () == true)
- {
- // Include Messaging skeleton file.
- this->gen_standard_include (this->client_header_,
- "tao/Messaging/Messaging.h");
- }
-
- // Include the smart proxy base class if smart proxies are enabled.
- if (be_global->gen_smart_proxies () == true)
- {
- this->gen_standard_include (this->client_header_,
- "tao/SmartProxies/Smart_Proxies.h");
- }
-
- // If we have not suppressed Any operator generation and also
- // are not generating the operators in a separate file, we
- // need to include the *A.h file from all .pidl files here.
- if (be_global->any_support () && !be_global->gen_anyop_files ())
- {
- for (size_t j = 0; j < idl_global->n_included_idl_files (); ++j)
- {
- char* idl_name = idl_global->included_idl_files ()[j];
-
- ACE_CString pidl_checker (idl_name);
- bool got_pidl =
- (pidl_checker.substr (pidl_checker.length () - 5) == ".pidl")
- && (pidl_checker.find ("IFR_Client") == ACE_CString::npos);
- // We can't use the -GA option on IFR_Client .pidl files,
- // because there are decls inside interfaces.
-
- // If we're here and we have a .pidl file, we need to generate
- // the *A.h include from the AnyTypeCode library.
- if (got_pidl)
- {
- // Make a String out of it.
- UTL_String idl_name_str = idl_name;
-
- const char *anyop_hdr =
- BE_GlobalData::be_get_anyop_header (&idl_name_str, 1);
-
- idl_name_str.destroy ();
-
- // Stripped off any scope in the name and add the
- // AnyTypeCode prefix.
- ACE_CString work_hdr (anyop_hdr);
- ACE_CString final_hdr = "tao/AnyTypeCode/";
- ACE_CString::size_type pos = work_hdr.rfind ('/');
-
- if (pos != ACE_SString::npos)
- {
- ACE_CString scope (work_hdr.substr (0, pos));
-
- // If we find a '/' in the containing scope name, it
- // means we are including a .pidl file from a
- // subdirectory of $TAO_ROOT/tao, and so we should
- // include the anyop_hdr string as is, and not strip
- // off the scope name and prepend "tao/AnyTypeCode/".
- // Only .pidl files in $TAO_ROOT/tao itself have
- // their generated *A.* files moved to the AnyTypeCode
- // library.
- if (scope.find ('/') == ACE_SString::npos)
- {
- work_hdr = work_hdr.substr (pos + 1);
- final_hdr += work_hdr;
- }
- else
- {
- final_hdr = work_hdr;
- }
- }
-
- this->client_header_->print ("\n#include \"%s\"",
- final_hdr.c_str ());
- }
- }
- }
-
-
- // Must have knowledge of the base class.
- this->gen_seq_file_includes ();
-
- // _vars and _outs are typedefs of template class instantiations.
- this->gen_var_file_includes ();
-
- // Versioned namespace support.
- this->gen_standard_include (this->client_header_,
- "tao/Versioned_Namespace.h");
-}
-
-void
-TAO_CodeGen::gen_stub_src_includes (void)
-{
- // Generate the include statement for the precompiled header file.
- if (be_global->pch_include ())
- {
- *this->client_stubs_ << "#include \""
- << be_global->pch_include ()
- << "\"";
- }
-
- if (be_global->safe_include ())
- {
- // Generate the safe include if it is defined instead of the client header
- // need to put only the base names. Path info is not required.
- *this->client_stubs_ << "\n#include \""
- << be_global->safe_include ()
- << "\"";
- }
- else
- {
- // Generate the include statement for the client header. We just
- // need to put only the base names. Path info is not required.
- *this->client_stubs_ << "\n#include \""
- << be_global->be_get_client_hdr_fname (1)
- << "\"";
- }
-
- if (be_global->tc_support ()
- && !be_global->gen_anyop_files ())
- {
- this->gen_typecode_includes (this->client_stubs_);
- }
-
- // Always generated.
- this->gen_standard_include (this->client_stubs_,
- "tao/CDR.h");
-
- // Conditional includes.
-
- if (idl_global->non_local_op_seen_)
- {
- this->gen_standard_include (this->client_stubs_,
- "tao/Exception_Data.h");
- }
-
- // Operations for local interfaces are pure virtual.
- if (idl_global->non_local_op_seen_)
- {
- this->gen_standard_include (this->client_stubs_,
- "tao/Invocation_Adapter.h");
- }
-
- // Any abstract interface present will probably have an operation.
- if (idl_global->abstract_iface_seen_)
- {
- this->gen_standard_include (
- this->client_stubs_,
- "tao/Valuetype/AbstractBase_Invocation_Adapter.h"
- );
-
- this->gen_standard_include (
- this->client_stubs_,
- "tao/Valuetype/AbstractBase_T.h"
- );
- }
-
- if (be_global->ami_call_back () == true)
- {
- this->gen_standard_include (this->client_stubs_,
- "tao/Messaging/Asynch_Invocation_Adapter.h");
-
- this->gen_standard_include (this->client_stubs_,
- "tao/Messaging/ExceptionHolder_i.h");
- }
-
- // If valuefactory_seen_ was set, this was generated in the stub header file,
- // otherwise it needs to go here - used in _tao_unmarshal().
- if (idl_global->valuetype_seen_
- && !idl_global->valuefactory_seen_)
- {
- this->gen_standard_include (this->client_stubs_,
- "tao/Valuetype/ValueFactory.h");
- }
-
- if (idl_global->non_local_iface_seen_)
- {
- // Needed for _narrow(), which is now template-based.
- this->gen_standard_include (this->client_stubs_,
- "tao/Object_T.h");
- }
-
- if (idl_global->octet_seq_seen_)
- {
- // Needed for the TAO_NO_COPY_OCTET_SEQUENCES optimization. Note that
- // it is preferable to just refer to CORBA::OctetSeq in the IDL file.
- this->gen_standard_include (this->client_stubs_,
- "tao/ORB_Core.h");
- }
-
- // The UserException::_tao_{en,de}code() methods can throw a
- // CORBA::MARSHAL exception so make sure that system exception is
- // fully declared/defined by including "tao/SystemException.h".
- // However, only include "tao/SystemException.h" if a user exception
- // was encountered and if we're not already including it in the stub
- // header.
- if (idl_global->exception_seen_
- && !idl_global->operation_seen_)
- {
- this->gen_standard_include (this->client_stubs_,
- "tao/SystemException.h");
- }
-
- // Includes whatever Any template classes that may be needed.
- if (!be_global->gen_anyop_files ())
- {
- this->gen_any_file_includes (this->client_stubs_);
- }
-
- // Includes whatever arg helper template classes that may be needed.
- this->gen_stub_arg_file_includes (this->client_stubs_);
-
- // strlen() for DCPS marshaling or
- // strcmp() is used with interfaces and exceptions.
- if ((be_global->gen_dcps_type_support ()
- && (idl_global->string_seen_
- || idl_global->string_seq_seen_
- || idl_global->wstring_seq_seen_) )
- || idl_global->interface_seen_
- || idl_global->exception_seen_
- || idl_global->union_seen_)
- {
- // Needed for _narrow(), which is now template-based.
- this->gen_standard_include (this->client_stubs_,
- "ace/OS_NS_string.h");
- }
-
- if (be_global->gen_amh_classes () == true)
- {
- // Necessary for the AIX compiler.
- this->gen_standard_include (this->client_stubs_,
- "ace/Auto_Ptr.h");
- }
-}
-
-void
-TAO_CodeGen::gen_skel_src_includes (void)
-{
- // Only non-local interfaces generate anything in the skeleton.
- if (!(idl_global->non_local_iface_seen_
- || idl_global->need_skeleton_includes_))
- {
- return;
- }
-
- switch (be_global->lookup_strategy ())
- {
- case BE_GlobalData::TAO_DYNAMIC_HASH:
- {
- this->gen_standard_include (this->server_skeletons_,
- "tao/PortableServer/Operation_Table_Dynamic_Hash.h");
- }
- break;
- case BE_GlobalData::TAO_LINEAR_SEARCH:
- {
- this->gen_standard_include (this->server_skeletons_,
- "tao/PortableServer/Operation_Table_Linear_Search.h");
- }
- break;
- case BE_GlobalData::TAO_BINARY_SEARCH:
- {
- this->gen_standard_include (this->server_skeletons_,
- "tao/PortableServer/Operation_Table_Binary_Search.h");
- }
- break;
- case BE_GlobalData::TAO_PERFECT_HASH:
- {
- this->gen_standard_include (this->server_skeletons_,
- "tao/PortableServer/Operation_Table_Perfect_Hash.h");
- }
- break;
- }
-
- if (be_global->gen_direct_collocation ())
- {
- this->gen_standard_include (
- this->server_skeletons_,
- "tao/PortableServer/Direct_Collocation_Upcall_Wrapper.h"
- );
- }
-
- this->gen_standard_include (this->server_skeletons_,
- "tao/PortableServer/Upcall_Command.h");
- this->gen_standard_include (this->server_skeletons_,
- "tao/PortableServer/Upcall_Wrapper.h");
-
- this->gen_standard_include (this->server_skeletons_,
- "tao/TAO_Server_Request.h");
- this->gen_standard_include (this->server_skeletons_,
- "tao/ORB_Core.h");
- this->gen_standard_include (this->server_skeletons_,
- "tao/Profile.h");
- this->gen_standard_include (this->server_skeletons_,
- "tao/Stub.h");
- this->gen_standard_include (this->server_skeletons_,
- "tao/IFR_Client_Adapter.h");
- this->gen_standard_include (this->server_skeletons_,
- "tao/Object_T.h");
- this->gen_standard_include (this->server_skeletons_,
- "tao/AnyTypeCode/TypeCode.h");
- this->gen_standard_include (this->server_skeletons_,
- "tao/AnyTypeCode/DynamicC.h");
- this->gen_standard_include (this->server_skeletons_,
- "tao/CDR.h");
- this->gen_standard_include (this->server_skeletons_,
- "tao/operation_details.h");
- this->gen_standard_include (this->server_skeletons_,
- "tao/PortableInterceptor.h");
-
- this->gen_skel_arg_file_includes (this->server_skeletons_);
-
- if (be_global->gen_thru_poa_collocation ()
- || be_global->gen_direct_collocation ())
- {
- // Collocation skeleton code doesn't use "SArg" variants.
- this->gen_stub_arg_file_includes (this->server_skeletons_);
- }
-
- // The following header must always be included.
- if (be_global->gen_amh_classes ())
- {
- this->gen_standard_include (this->server_skeletons_,
- "tao/Thread_Lane_Resources.h");
- this->gen_standard_include (this->server_skeletons_,
- "tao/Buffer_Allocator_T.h");
- this->gen_standard_include (this->server_skeletons_,
- "ace/Auto_Functor.h");
- }
-
- this->gen_standard_include (this->server_skeletons_,
- "ace/Dynamic_Service.h");
-
- // For Static_Allocator_Base
- this->gen_standard_include (this->server_skeletons_,
- "ace/Malloc_Allocator.h");
-}
-
-void
-TAO_CodeGen::gen_seq_file_includes (void)
-{
- // @@@ (JP) These can get more specialized, after the TAO seq template
- // files have been split up.
-
- this->gen_cond_file_include (
- idl_global->vt_seq_seen_,
- "tao/Valuetype/Sequence_T.h",
- this->client_header_
- );
-
- this->gen_cond_file_include (
- idl_global->seq_seen_,
- "tao/Sequence_T.h",
- this->client_header_
- );
-}
-
-void
-TAO_CodeGen::gen_any_file_includes (TAO_OutStream * stream)
-{
- if (be_global->any_support ())
- {
- this->gen_standard_include (stream,
- "tao/CDR.h");
-
- // Any_Impl_T.cpp needs the full CORBA::Any type.
- this->gen_cond_file_include (
- idl_global->interface_seen_
- | idl_global->valuetype_seen_,
- "tao/AnyTypeCode/Any.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->interface_seen_
- | idl_global->valuetype_seen_,
- "tao/AnyTypeCode/Any_Impl_T.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->aggregate_seen_
- | idl_global->seq_seen_
- | idl_global->exception_seen_,
- "tao/AnyTypeCode/Any_Dual_Impl_T.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->array_seen_,
- "tao/AnyTypeCode/Any_Array_Impl_T.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->enum_seen_,
- "tao/AnyTypeCode/Any_Basic_Impl_T.h",
- stream
- );
- }
-}
-
-void
-TAO_CodeGen::gen_var_file_includes (void)
-{
- this->gen_cond_file_include (
- idl_global->valuetype_seen_
- | idl_global->fwd_valuetype_seen_,
- "tao/Valuetype/Value_VarOut_T.h",
- this->client_header_
- );
-
- this->gen_cond_file_include (
- idl_global->interface_seen_
- | idl_global->fwd_iface_seen_,
- "tao/Objref_VarOut_T.h",
- this->client_header_
- );
-
- this->gen_cond_file_include (
- idl_global->seq_seen_,
- "tao/Seq_Var_T.h",
- this->client_header_
- );
-
- this->gen_cond_file_include (
- idl_global->seq_seen_,
- "tao/Seq_Out_T.h",
- this->client_header_
- );
-
- this->gen_cond_file_include (
- idl_global->aggregate_seen_,
- "tao/VarOut_T.h",
- this->client_header_
- );
-
- this->gen_cond_file_include (
- idl_global->array_seen_,
- "tao/Array_VarOut_T.h",
- this->client_header_
- );
-}
-
-void
-TAO_CodeGen::gen_stub_arg_file_includes (TAO_OutStream * stream)
-{
- this->gen_cond_file_include (
- idl_global->basic_arg_seen_,
- "tao/Basic_Arguments.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->bd_string_arg_seen_,
- "tao/BD_String_Argument_T.h",
- stream
- );
-
- // If we have a bound string and we have any generation enabled we must
- // include Any.h to get the <<= operator for BD_String
- this->gen_cond_file_include (
- idl_global->bd_string_arg_seen_ && be_global->any_support (),
- "tao/AnyTypeCode/Any.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->fixed_array_arg_seen_,
- "tao/Fixed_Array_Argument_T.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->fixed_size_arg_seen_,
- "tao/Fixed_Size_Argument_T.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->object_arg_seen_,
- "tao/Object_Argument_T.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->special_basic_arg_seen_,
- "tao/Special_Basic_Arguments.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->ub_string_arg_seen_,
- "tao/UB_String_Arguments.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->var_array_arg_seen_,
- "tao/Var_Array_Argument_T.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->var_size_arg_seen_,
- "tao/Var_Size_Argument_T.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->any_arg_seen_,
- "tao/AnyTypeCode/Any_Arg_Traits.h",
- stream
- );
-}
-
-
-void
-TAO_CodeGen::gen_skel_arg_file_includes (TAO_OutStream * stream)
-{
- this->gen_cond_file_include (
- idl_global->basic_arg_seen_,
- "tao/PortableServer/Basic_SArguments.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->bd_string_arg_seen_,
- "tao/PortableServer/BD_String_SArgument_T.h",
- stream
- );
-
- // If we have a bound string and we have any generation enabled we must
- // include Any.h to get the <<= operator for BD_String
- this->gen_cond_file_include (
- idl_global->bd_string_arg_seen_ && be_global->any_support (),
- "tao/AnyTypeCode/Any.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->fixed_array_arg_seen_,
- "tao/PortableServer/Fixed_Array_SArgument_T.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->fixed_size_arg_seen_,
- "tao/PortableServer/Fixed_Size_SArgument_T.h",
- stream
- );
-
- // Always needed for CORBA::Object handling in _component() skeleton
- // code when an unconstrained (non-local) IDL interface is defined.
- this->gen_cond_file_include (
- idl_global->non_local_iface_seen_
- || idl_global->object_arg_seen_,
- "tao/PortableServer/Object_SArgument_T.h",
- stream
- );
-
- // Always needed for CORBA::Boolean handling in _is_a() skeleton
- // code when an unconstrained (non-local) IDL interface is defined.
- this->gen_cond_file_include (
- idl_global->non_local_iface_seen_
- || idl_global->special_basic_arg_seen_,
- "tao/PortableServer/Special_Basic_SArguments.h",
- stream
- );
-
- // Always needed for string argument handling in _is_a() skeleton
- // code when an unconstrained (non-local) IDL interface is defined.
- this->gen_cond_file_include (
- idl_global->non_local_iface_seen_
- || idl_global->ub_string_arg_seen_,
- "tao/PortableServer/UB_String_SArguments.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->var_array_arg_seen_,
- "tao/PortableServer/Var_Array_SArgument_T.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->var_size_arg_seen_,
- "tao/PortableServer/Var_Size_SArgument_T.h",
- stream
- );
-
- this->gen_cond_file_include (
- idl_global->any_arg_seen_,
- "tao/PortableServer/Any_SArg_Traits.h",
- stream
- );
-
- this->gen_standard_include (stream,
- "tao/PortableServer/TypeCode_SArg_Traits.h");
- this->gen_standard_include (stream,
- "tao/PortableServer/Object_SArg_Traits.h");
-
- if (be_global->gen_thru_poa_collocation ())
- {
- // Thru-POA/skeleton argument selection function templates.
- this->gen_cond_file_include (idl_global->non_local_iface_seen_,
- "tao/PortableServer/get_arg.h",
- stream);
-
- // We need the stub side argument templates when thru-POA
- // collocation is enabled for type resolution.
- // this->gen_stub_arg_file_includes (stream);
-
- // Always needed for CORBA::Boolean handling in _is_a() skeleton
- // code when an unconstrained (non-local) IDL interface is defined.
- this->gen_cond_file_include (idl_global->non_local_iface_seen_,
- "tao/Special_Basic_Arguments.h",
- stream);
-
- // Always needed for string argument handling in _is_a() skeleton
- // code when an unconstrained (non-local) IDL interface is defined.
- this->gen_cond_file_include (idl_global->non_local_iface_seen_,
- "tao/UB_String_Arguments.h",
- stream);
- }
-}
-
-void
-TAO_CodeGen::gen_cond_file_include (bool condition_green,
- const char *filepath,
- TAO_OutStream *stream)
-{
- if (condition_green)
- {
- this->gen_standard_include (stream,
- filepath);
- }
-}
-
-void
-TAO_CodeGen::gen_typecode_includes (TAO_OutStream * stream)
-{
- this->gen_standard_include (stream,
- "tao/AnyTypeCode/Null_RefCount_Policy.h");
-
- this->gen_standard_include (stream,
- "tao/AnyTypeCode/TypeCode_Constants.h");
-
- // Just assume we're going to need alias TypeCodes since there is
- // currently no alias_seen_ or typedef_seen_ flag in idl_global.
- this->gen_standard_include (stream,
- "tao/AnyTypeCode/Alias_TypeCode_Static.h");
-
- this->gen_cond_file_include (idl_global->enum_seen_,
- "tao/AnyTypeCode/Enum_TypeCode_Static.h",
- stream);
-
- this->gen_cond_file_include (idl_global->interface_seen_,
- "tao/AnyTypeCode/Objref_TypeCode_Static.h",
- stream);
-
- this->gen_cond_file_include (idl_global->seq_seen_
- | idl_global->array_seen_,
- "tao/AnyTypeCode/Sequence_TypeCode_Static.h",
- stream);
-
- this->gen_cond_file_include (idl_global->string_seen_,
- "tao/AnyTypeCode/String_TypeCode_Static.h",
- stream);
-
- this->gen_cond_file_include (
- idl_global->exception_seen_
- | idl_global->aggregate_seen_,
- "tao/AnyTypeCode/Struct_TypeCode_Static.h",
- stream);
-
- this->gen_cond_file_include (
- idl_global->exception_seen_
- | idl_global->aggregate_seen_,
- "tao/AnyTypeCode/TypeCode_Struct_Field.h",
- stream);
-
- this->gen_cond_file_include (idl_global->union_seen_,
- "tao/AnyTypeCode/TypeCode_Case_T.h",
- stream);
-
- this->gen_cond_file_include (idl_global->union_seen_,
- "tao/AnyTypeCode/Union_TypeCode_Static.h",
- stream);
-
- this->gen_cond_file_include (idl_global->valuetype_seen_,
- "tao/AnyTypeCode/Value_TypeCode_Static.h",
- stream);
-
- this->gen_cond_file_include (idl_global->valuetype_seen_,
- "tao/AnyTypeCode/TypeCode_Value_Field.h",
- stream);
-
- this->gen_cond_file_include (idl_global->recursive_type_seen_,
- "tao/AnyTypeCode/Recursive_Type_TypeCode.h",
- stream);
-}
-
-void
-TAO_CodeGen::destroy (void)
-{
- delete this->client_header_;
- delete this->server_header_;
- delete this->implementation_header_;
- delete this->implementation_skeleton_;
- delete this->server_template_header_;
- delete this->client_stubs_;
- delete this->server_skeletons_;
- delete this->server_template_skeletons_;
- delete this->client_inline_;
- delete this->server_inline_;
- delete this->server_template_inline_;
- delete this->anyop_source_;
- delete this->anyop_header_;
-#if !defined (linux) && !defined (__QNX__) && !defined (__GLIBC__)
- // This causes a seg fault on Linux RH 5.1. Let it leak . . .
- delete this->gperf_input_stream_;
-#endif /* ! linux */
- delete [] this->gperf_input_filename_;
- this->curr_os_ = 0;
-}