summaryrefslogtreecommitdiff
path: root/TAO
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-11-10 00:07:20 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-11-10 00:07:20 +0000
commitdd033b5b8ae738d2ee80e416c104368ca255f334 (patch)
tree74fd26b4dd7d9a1496467ea68b7633aa71d8fbfd /TAO
parente600a7c0a7764ddd9020caee54257bcdb25d4f5c (diff)
downloadATCD-dd033b5b8ae738d2ee80e416c104368ca255f334.tar.gz
ChangeLogTag: Sun Nov 9 17:57:40 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
Diffstat (limited to 'TAO')
-rw-r--r--TAO/ChangeLog17
-rw-r--r--TAO/TAO_IDL/be/be_codegen.cpp179
-rw-r--r--TAO/TAO_IDL/be/be_global.cpp61
-rw-r--r--TAO/TAO_IDL/be/be_visitor_root/root.cpp40
-rw-r--r--TAO/TAO_IDL/be/be_visitor_tmplinst/tmplinst_cs.cpp72
-rw-r--r--TAO/TAO_IDL/be_include/be_codegen.h16
-rw-r--r--TAO/TAO_IDL/be_include/be_global.h25
-rw-r--r--TAO/TAO_IDL/driver/drv_args.cpp6
8 files changed, 410 insertions, 6 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog
index b9d0f0f25e8..0faa3bad1c8 100644
--- a/TAO/ChangeLog
+++ b/TAO/ChangeLog
@@ -1,3 +1,19 @@
+Sun Nov 9 17:57:40 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_codegen.cpp:
+ * TAO_IDL/be/be_global.cpp:
+ * TAO_IDL/be/be_visitor_root/root.cpp:
+ * TAO_IDL/be/be_visitor_tmplinst/tmplinst_cs.cpp:
+ * TAO_IDL/be_include/be_codegen.h:
+ * TAO_IDL/be_include/be_global.h:
+ * TAO_IDL/driver/drv_args.cpp:
+
+ Added a new IDL compiler option (intended for use on TAO
+ .pidl files only) and associated mechanism to generate
+ Any operators into a separate set of .h and .cpp files.
+ This option will result in footprint reduction in most,
+ if not all, application programs that link to TAO.
+
Sun Nov 9 17:57:57 2003 Balachandran Natarajan <bala@dre.vanderbilt.edu>
* tao/Synch_Refcountable.h:
@@ -37,6 +53,7 @@ Sun Nov 9 17:57:57 2003 Balachandran Natarajan <bala@dre.vanderbilt.edu>
Fixed fuzz errors.
+>>>>>>> 1.2874
Sun Nov 9 22:12:29 UTC 2003 Don Hinton <dhinton@dresystems.com>
* tao/Makefile.dirs:
diff --git a/TAO/TAO_IDL/be/be_codegen.cpp b/TAO/TAO_IDL/be/be_codegen.cpp
index 14b5968d3b5..5f5e66bbeb4 100644
--- a/TAO/TAO_IDL/be/be_codegen.cpp
+++ b/TAO/TAO_IDL/be/be_codegen.cpp
@@ -43,11 +43,45 @@ TAO_CodeGen::TAO_CodeGen (void)
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)
{
+ // Initialize the anyop streams here so we won't have to fuss
+ // with it in the visitors.
+ if (be_global->gen_anyop_files ())
+ {
+ int status = 0;
+
+ status =
+ this->start_anyop_header (
+ be_global->be_get_anyop_header_fname ()
+ );
+
+ if (status == -1)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%N:%l) TAO_CodeGen::"
+ "TAO_CodeGen - "
+ "Error opening anyop header file\n"));
+ }
+
+ status =
+ this->start_anyop_source (
+ be_global->be_get_anyop_source_fname ()
+ );
+
+ if (status == -1)
+ {
+ ACE_ERROR ((LM_ERROR,
+ "(%N:%l) TAO_CodeGen::"
+ "TAO_CodeGen - "
+ "Error opening anyop source file\n"));
+ }
+ }
}
// destructor
@@ -64,6 +98,8 @@ TAO_CodeGen::~TAO_CodeGen (void)
delete this->client_inline_;
delete this->server_inline_;
delete this->server_template_inline_;
+ delete this->anyop_header_;
+ delete this->anyop_source_;
#if !defined (linux) && !defined (__QNX__)
// This causes a seg fault on Linux RH 5.1. Let it leak . . .
delete this->gperf_input_stream_;
@@ -786,6 +822,109 @@ TAO_CodeGen::server_template_inline (void)
return this->server_template_inline_;
}
+int
+TAO_CodeGen::start_anyop_header (const char *fname)
+{
+ // Retrieve the singleton instance to the outstream factory.
+ TAO_OutStream_Factory *factory = TAO_OUTSTREAM_FACTORY::instance ();
+
+ // Retrieve a specialized instance.
+ this->anyop_header_ = factory->make_outstream ();
+
+ if (!this->anyop_header_)
+ {
+ return -1;
+ }
+
+ if (this->anyop_header_->open (fname,
+ TAO_OutStream::TAO_CLI_HDR)
+ == -1)
+ {
+ return -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_",
+ "_ANYOP_H_");
+
+ if (be_global->pre_include () != 0)
+ {
+ *this->anyop_header_ << "#include /**/ \""
+ << be_global->pre_include ()
+ << "\"";
+ }
+
+ return 0;
+}
+
+TAO_OutStream *
+TAO_CodeGen::anyop_header (void)
+{
+ return this->anyop_header_;
+}
+
+int
+TAO_CodeGen::start_anyop_source (const char *fname)
+{
+ // Retrieve the singleton instance to the outstream factory.
+ TAO_OutStream_Factory *factory = TAO_OUTSTREAM_FACTORY::instance ();
+
+ // Retrieve a specialized instance.
+ this->anyop_source_ = factory->make_outstream ();
+
+ if (!this->anyop_source_)
+ {
+ return -1;
+ }
+
+ if (this->anyop_source_->open (fname,
+ TAO_OutStream::TAO_CLI_IMPL)
+ == -1)
+ {
+ return -1;
+ }
+
+ // Generate the include statement for the precompiled header file.
+ if (be_global->pch_include ())
+ {
+ *this->anyop_source_ << "#include \""
+ << be_global->pch_include ()
+ << "\"";
+ }
+
+ // 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_client_hdr_fname (1)
+ << "\"";
+
+ // Generate the include statement for the anyop 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_standard_include (this->anyop_source_,
+ "tao/Typecode.h");
+
+ return 0;
+}
+
+TAO_OutStream *
+TAO_CodeGen::anyop_source (void)
+{
+ return this->anyop_source_;
+}
// Set the server header stream.
int
@@ -936,6 +1075,7 @@ TAO_CodeGen::end_client_header (void)
}
*this->client_header_ << "#endif /* ifndef */" << be_nl << be_nl;
+
return 0;
}
@@ -1112,6 +1252,30 @@ TAO_CodeGen::end_server_skeletons (void)
return 0;
}
+int
+TAO_CodeGen::end_anyop_header (void)
+{
+ // Code to put the last #endif.
+ *this->anyop_header_ << "\n\n";
+
+ if (be_global->post_include () != 0)
+ {
+ *this->anyop_header_ << "#include /**/ \""
+ << be_global->post_include ()
+ << "\"\n\n";
+ }
+
+ *this->anyop_header_ << "#endif /* ifndef */" << be_nl << be_nl;
+
+ return 0;
+}
+
+int
+TAO_CodeGen::end_anyop_source (void)
+{
+ 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
@@ -1576,11 +1740,18 @@ TAO_CodeGen::gen_any_file_includes (void)
{
if (be_global->any_support ())
{
+ TAO_OutStream *stream = this->client_stubs_;
+
+ if (be_global->gen_anyop_files ())
+ {
+ stream = this->anyop_source_;
+ }
+
this->gen_cond_file_include (
idl_global->decls_seen_masks.interface_seen_
| idl_global->decls_seen_masks.valuetype_seen_,
"tao/Any_Impl_T.h",
- this->client_stubs_
+ stream
);
this->gen_cond_file_include (
@@ -1588,19 +1759,19 @@ TAO_CodeGen::gen_any_file_includes (void)
| idl_global->decls_seen_masks.seq_seen_
| idl_global->decls_seen_masks.exception_seen_,
"tao/Any_Dual_Impl_T.h",
- this->client_stubs_
+ stream
);
this->gen_cond_file_include (
idl_global->decls_seen_masks.array_seen_,
"tao/Any_Array_Impl_T.h",
- this->client_stubs_
+ stream
);
this->gen_cond_file_include (
idl_global->decls_seen_masks.enum_seen_,
"tao/Any_Basic_Impl_T.h",
- this->client_stubs_
+ stream
);
}
}
diff --git a/TAO/TAO_IDL/be/be_global.cpp b/TAO/TAO_IDL/be/be_global.cpp
index 1bdbe44e006..6bd0e665cb7 100644
--- a/TAO/TAO_IDL/be/be_global.cpp
+++ b/TAO/TAO_IDL/be/be_global.cpp
@@ -51,6 +51,8 @@ BE_GlobalData::BE_GlobalData (void)
server_template_skeleton_ending_ (ACE::strnew ("S_T.cpp")),
server_inline_ending_ (ACE::strnew ("S.i")),
server_template_inline_ending_ (ACE::strnew ("S_T.i")),
+ anyop_hdr_ending_ (ACE::strnew ("A.h")),
+ anyop_src_ending_ (ACE::strnew ("A.cpp")),
output_dir_ (0),
any_support_ (I_TRUE),
tc_support_ (I_TRUE),
@@ -75,7 +77,8 @@ BE_GlobalData::BE_GlobalData (void)
gen_tmplinst_ (I_FALSE),
lookup_strategy_ (TAO_PERFECT_HASH),
void_type_ (0),
- ccmobject_ (0)
+ ccmobject_ (0),
+ gen_anyop_files_ (I_FALSE)
{
}
@@ -269,6 +272,24 @@ BE_GlobalData::be_get_server_template_inline (UTL_String *idl_file_name,
}
const char *
+BE_GlobalData::be_get_anyop_header (UTL_String *idl_file_name,
+ int base_name_only)
+{
+ return be_change_idl_file_extension (idl_file_name,
+ be_global->anyop_header_ending (),
+ base_name_only);
+}
+
+const char *
+BE_GlobalData::be_get_anyop_source (UTL_String *idl_file_name,
+ int base_name_only)
+{
+ return be_change_idl_file_extension (idl_file_name,
+ be_global->anyop_source_ending (),
+ base_name_only);
+}
+
+const char *
BE_GlobalData::be_get_client_hdr_fname (int base_name_only)
{
return be_get_client_hdr (idl_global->stripped_filename (),
@@ -349,6 +370,20 @@ BE_GlobalData::be_get_server_template_inline_fname (int base_name_only)
base_name_only);
}
+const char *
+BE_GlobalData::be_get_anyop_header_fname (int base_name_only)
+{
+ return be_get_anyop_header (idl_global->stripped_filename (),
+ base_name_only);
+}
+
+const char *
+BE_GlobalData::be_get_anyop_source_fname (int base_name_only)
+{
+ return be_get_anyop_source (idl_global->stripped_filename (),
+ base_name_only);
+}
+
const char*
BE_GlobalData::skel_export_macro (void) const
{
@@ -609,6 +644,18 @@ BE_GlobalData::server_template_inline_ending (void) const
return this->server_template_inline_ending_;
}
+const char*
+BE_GlobalData::anyop_header_ending (void) const
+{
+ return this->anyop_hdr_ending_;
+}
+
+const char*
+BE_GlobalData::anyop_source_ending (void) const
+{
+ return this->anyop_src_ending_;
+}
+
void
BE_GlobalData::output_dir (const char* s)
{
@@ -905,3 +952,15 @@ BE_GlobalData::ccmobject (be_interface *val)
this->ccmobject_ = val;
}
+idl_bool
+BE_GlobalData::gen_anyop_files (void) const
+{
+ return this->gen_anyop_files_;
+}
+
+void
+BE_GlobalData::gen_anyop_files (idl_bool val)
+{
+ this->gen_anyop_files_ = val;
+}
+
diff --git a/TAO/TAO_IDL/be/be_visitor_root/root.cpp b/TAO/TAO_IDL/be/be_visitor_root/root.cpp
index c8e1b8014d8..2b4c7aa444d 100644
--- a/TAO/TAO_IDL/be/be_visitor_root/root.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_root/root.cpp
@@ -282,8 +282,20 @@ int be_visitor_root::visit_root (be_root *node)
if (be_global->any_support ())
{
+ if (be_global->gen_anyop_files ())
+ {
+ // Switch streams, ctx will be reassigned when this
+ // pass is done.
+ ctx.stream (tao_cg->anyop_header ());
+ }
+
be_visitor_root_any_op visitor (&ctx);
status = node->accept (&visitor);
+
+ if (be_global->gen_anyop_files ())
+ {
+ (void) tao_cg->end_anyop_header ();
+ }
}
break;
@@ -294,8 +306,20 @@ int be_visitor_root::visit_root (be_root *node)
if (be_global->any_support ())
{
+ if (be_global->gen_anyop_files ())
+ {
+ // Switch streams, ctx will be reassigned when this
+ // pass is done.
+ ctx.stream (tao_cg->anyop_source ());
+ }
+
be_visitor_root_any_op visitor (&ctx);
status = node->accept (&visitor);
+
+ if (be_global->gen_anyop_files ())
+ {
+ (void) tao_cg->end_anyop_source ();
+ }
}
break;
@@ -327,7 +351,6 @@ int be_visitor_root::visit_root (be_root *node)
-1);
}
-
// Make another pass over the entire tree and generate the CDR operators.
ctx = *this->ctx_;
status = 0;
@@ -1703,6 +1726,11 @@ be_visitor_root::gen_explicit_tmplinst (be_root *node,
os->gen_ifdef_AHETI ();
+ if (be_global->gen_anyop_files ())
+ {
+ tao_cg->anyop_source ()->gen_ifdef_AHETI ();
+ }
+
be_visitor_tmplinst_cs visitor (this->ctx_);
if (node->accept (&visitor) == -1)
@@ -1716,6 +1744,11 @@ be_visitor_root::gen_explicit_tmplinst (be_root *node,
os->gen_elif_AHETI ();
+ if (be_global->gen_anyop_files ())
+ {
+ tao_cg->anyop_source ()->gen_elif_AHETI ();
+ }
+
visitor.switch_mode ();
if (node->accept (&visitor) == -1)
@@ -1728,6 +1761,11 @@ be_visitor_root::gen_explicit_tmplinst (be_root *node,
}
os->gen_endif_AHETI ();
+
+ if (be_global->gen_anyop_files ())
+ {
+ tao_cg->anyop_source ()->gen_endif_AHETI ();
+ }
}
else if (this->ctx_->state () == TAO_CodeGen::TAO_ROOT_SS)
{
diff --git a/TAO/TAO_IDL/be/be_visitor_tmplinst/tmplinst_cs.cpp b/TAO/TAO_IDL/be/be_visitor_tmplinst/tmplinst_cs.cpp
index b09fa3d0ecb..4cddae02625 100644
--- a/TAO/TAO_IDL/be/be_visitor_tmplinst/tmplinst_cs.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_tmplinst/tmplinst_cs.cpp
@@ -142,11 +142,20 @@ be_visitor_tmplinst_cs::visit_interface (be_interface *node)
// For Any impl template class.
if (be_global->any_support ())
{
+ TAO_OutStream *tmp = os;
+
+ if (be_global->gen_anyop_files ())
+ {
+ os = tao_cg->anyop_source ();
+ }
+
*os << be_nl << be_nl
<< this->prefix_ << this->linebreak_ << be_idt << be_idt_nl
<< "TAO::Any_Impl_T<" << this->linebreak_ << be_idt << be_idt_nl
<< node->name () << this->linebreak_ << be_uidt_nl
<< ">" << this->suffix_ << be_uidt << be_uidt << be_uidt;
+
+ os = tmp;
}
this->this_mode_generated (node, I_TRUE);
@@ -224,11 +233,20 @@ be_visitor_tmplinst_cs::visit_valuetype (be_valuetype *node)
// For Any impl template class.
if (be_global->any_support ())
{
+ TAO_OutStream *tmp = os;
+
+ if (be_global->gen_anyop_files ())
+ {
+ os = tao_cg->anyop_source ();
+ }
+
*os << be_nl << be_nl
<< this->prefix_ << this->linebreak_ << be_idt << be_idt_nl
<< "TAO::Any_Impl_T<" << this->linebreak_ << be_idt << be_idt_nl
<< node->name () << this->linebreak_ << be_uidt_nl
<< ">" << this->suffix_ << be_uidt << be_uidt << be_uidt;
+
+ os = tmp;
}
this->this_mode_generated (node, I_TRUE);
@@ -369,12 +387,21 @@ be_visitor_tmplinst_cs::visit_sequence (be_sequence *node)
// For Any impl template class.
if (be_global->any_support ())
{
+ TAO_OutStream *tmp = os;
+
+ if (be_global->gen_anyop_files ())
+ {
+ os = tao_cg->anyop_source ();
+ }
+
*os << be_nl << be_nl
<< this->prefix_ << this->linebreak_ << be_idt << be_idt_nl
<< "TAO::Any_Dual_Impl_T<" << this->linebreak_
<< be_idt << be_idt_nl
<< node->name () << this->linebreak_ << be_uidt_nl
<< ">" << this->suffix_ << be_uidt << be_uidt << be_uidt;
+
+ os = tmp;
}
this->this_mode_generated (node, I_TRUE);
@@ -552,6 +579,13 @@ be_visitor_tmplinst_cs::visit_array (be_array *node)
// For Any impl template class.
if (be_global->any_support ())
{
+ TAO_OutStream *tmp = os;
+
+ if (be_global->gen_anyop_files ())
+ {
+ os = tao_cg->anyop_source ();
+ }
+
*os << be_nl << be_nl
<< this->prefix_ << this->linebreak_ << be_idt << be_idt_nl
<< "TAO::Any_Array_Impl_T<" << this->linebreak_
@@ -559,6 +593,8 @@ be_visitor_tmplinst_cs::visit_array (be_array *node)
<< fname << "_slice," << this->linebreak_ << be_nl
<< fname << "_forany" << this->linebreak_ << be_uidt_nl
<< ">" << this->suffix_ << be_uidt << be_uidt << be_uidt;
+
+ os = tmp;
}
this->this_mode_generated (node, I_TRUE);
@@ -648,12 +684,21 @@ be_visitor_tmplinst_cs::visit_enum (be_enum *node)
if (be_global->any_support ())
{
+ TAO_OutStream *tmp = os;
+
+ if (be_global->gen_anyop_files ())
+ {
+ os = tao_cg->anyop_source ();
+ }
+
*os << be_nl << be_nl
<< this->prefix_ << this->linebreak_ << be_idt << be_idt_nl
<< "TAO::Any_Basic_Impl_T<" << this->linebreak_
<< be_idt << be_idt_nl
<< node->name () << this->linebreak_ << be_uidt_nl
<< ">" << this->suffix_ << be_uidt << be_uidt << be_uidt;
+
+ os = tmp;
}
this->this_mode_generated (node, I_TRUE);
@@ -672,12 +717,21 @@ be_visitor_tmplinst_cs::visit_exception (be_exception *node)
if (be_global->any_support ())
{
+ TAO_OutStream *tmp = os;
+
+ if (be_global->gen_anyop_files ())
+ {
+ os = tao_cg->anyop_source ();
+ }
+
*os << be_nl << be_nl
<< this->prefix_ << this->linebreak_ << be_idt << be_idt_nl
<< "TAO::Any_Dual_Impl_T<" << this->linebreak_
<< be_idt << be_idt_nl
<< node->name () << this->linebreak_ << be_uidt_nl
<< ">" << this->suffix_ << be_uidt << be_uidt << be_uidt;
+
+ os = tmp;
}
this->this_mode_generated (node, I_TRUE);
@@ -743,12 +797,21 @@ be_visitor_tmplinst_cs::visit_structure (be_structure *node)
if (be_global->any_support ())
{
+ TAO_OutStream *tmp = os;
+
+ if (be_global->gen_anyop_files ())
+ {
+ os = tao_cg->anyop_source ();
+ }
+
*os << be_nl << be_nl
<< this->prefix_ << this->linebreak_ << be_idt << be_idt_nl
<< "TAO::Any_Dual_Impl_T<" << this->linebreak_
<< be_idt << be_idt_nl
<< node->name () << this->linebreak_ << be_uidt_nl
<< ">" << this->suffix_ << be_uidt << be_uidt << be_uidt;
+
+ os = tmp;
}
this->this_mode_generated (node, I_TRUE);
@@ -813,12 +876,21 @@ be_visitor_tmplinst_cs::visit_union (be_union *node)
if (be_global->any_support ())
{
+ TAO_OutStream *tmp = os;
+
+ if (be_global->gen_anyop_files ())
+ {
+ os = tao_cg->anyop_source ();
+ }
+
*os << be_nl << be_nl
<< this->prefix_ << this->linebreak_ << be_idt << be_idt_nl
<< "TAO::Any_Dual_Impl_T<" << this->linebreak_
<< be_idt << be_idt_nl
<< node->name () << this->linebreak_ << be_uidt_nl
<< ">" << this->suffix_ << be_uidt << be_uidt << be_uidt;
+
+ os = tmp;
}
this->this_mode_generated (node, I_TRUE);
diff --git a/TAO/TAO_IDL/be_include/be_codegen.h b/TAO/TAO_IDL/be_include/be_codegen.h
index 7c7097833bf..500def365b6 100644
--- a/TAO/TAO_IDL/be_include/be_codegen.h
+++ b/TAO/TAO_IDL/be_include/be_codegen.h
@@ -275,6 +275,10 @@ public:
int start_server_template_skeletons (const char *fname);
// Set the server template skeletons stream.
+ int start_anyop_header (const char *fname);
+ int start_anyop_source (const char *fname);
+ // TAO developers only.
+
int end_client_header (void);
// Generate code at the end such as the <<= and >>= operators alongwith the
// ending #endif statement.
@@ -300,6 +304,10 @@ public:
int end_server_skeletons (void);
// Put a last #endif in the server skeletons.
+ int end_anyop_header (void);
+ int end_anyop_source (void);
+ // TAO developers only.
+
TAO_OutStream *client_header (void);
// Get the client header stream.
@@ -333,6 +341,10 @@ public:
TAO_OutStream *server_template_inline (void);
// Get the server template inline stream.
+ TAO_OutStream *anyop_header (void);
+ TAO_OutStream *anyop_source (void);
+ // TAO developers only. Accessors to the streams.
+
void gperf_input_stream (TAO_OutStream *gperf_input);
// Set the gperf input file stream.
@@ -426,6 +438,10 @@ private:
TAO_OutStream *server_template_inline_;
// Server side template inline file.
+ TAO_OutStream *anyop_header_;
+ TAO_OutStream *anyop_source_;
+ // For use by TAO developers only.
+
TAO_OutStream *gperf_input_stream_;
// TAO_OutStream to collect the input for gperf program.
diff --git a/TAO/TAO_IDL/be_include/be_global.h b/TAO/TAO_IDL/be_include/be_global.h
index 24b18e004e3..63f9e376043 100644
--- a/TAO/TAO_IDL/be_include/be_global.h
+++ b/TAO/TAO_IDL/be_include/be_global.h
@@ -97,6 +97,12 @@ public:
static const char *be_get_server_template_inline_fname (
int base_name_only = 0
);
+ static const char *be_get_anyop_header_fname (
+ int base_name_only = 0
+ );
+ static const char *be_get_anyop_source_fname (
+ int base_name_only = 0
+ );
// Helper functions: obtain the names of each generated file given
// the IDL file name.
@@ -125,6 +131,10 @@ public:
int base_name_only = 0);
static const char *be_get_server_template_inline (UTL_String *idl_file_name,
int base_name_only = 0);
+ static const char *be_get_anyop_header (UTL_String *idl_file_name,
+ int base_name_only = 0);
+ static const char *be_get_anyop_source (UTL_String *idl_file_name,
+ int base_name_only = 0);
const char* skel_export_macro (void) const;
// returns the macro name for exporting server side classes in Win32
@@ -260,6 +270,10 @@ public:
const char* server_template_inline_ending (void) const;
// Get the server_template_inline_ending.
+ const char* anyop_header_ending (void) const;
+ const char* anyop_source_ending (void) const;
+ // TAO developers only.
+
void output_dir (const char* s);
// Set the directory where all the IDL-Compiler-Generated files are
// to be kept. Default is current directory from which the
@@ -405,6 +419,10 @@ public:
void ccmobject (be_interface *val);
// Accessors for the member.
+ idl_bool gen_anyop_files (void) const;
+ void gen_anyop_files (idl_bool val);
+ // Accessors for the member.
+
private:
size_t changing_standard_include_files_;
// To switch between changing or non-changing standard include
@@ -461,6 +479,10 @@ private:
// Server's template inline file name ending. Default is "S_T.i".
char* server_template_inline_ending_;
+ // Any operator file name endings.
+ char* anyop_hdr_ending_;
+ char* anyop_src_ending_;
+
char* output_dir_;
// Directory where all the IDL-Compiler-Generated files are to be
// kept. Default value is 0 for this string which means the current
@@ -531,6 +553,9 @@ private:
be_interface *ccmobject_;
// Reference holder for component skeleton visitors.
+
+ idl_bool gen_anyop_files_;
+ // @@@ (TAO TEAM ONLY) Separate files for generated Any operators?
};
#endif /* _BE_GLOBAL_H */
diff --git a/TAO/TAO_IDL/driver/drv_args.cpp b/TAO/TAO_IDL/driver/drv_args.cpp
index 050592dd356..f31c12df07b 100644
--- a/TAO/TAO_IDL/driver/drv_args.cpp
+++ b/TAO/TAO_IDL/driver/drv_args.cpp
@@ -1169,6 +1169,12 @@ DRV_parse_args (long ac, char **av)
// AMH classes.
be_global->gen_amh_classes (I_TRUE);
}
+ else if (av[i][2] == 'A')
+ {
+ // TAO-team-only, undocumented option to generate
+ // Any operators into a separate set of files.
+ be_global->gen_anyop_files (I_TRUE);
+ }
else if (av[i][2] == 'e')
{
idl_global->append_idl_flag (av[i+1]);