summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-10-29 22:36:11 +0000
committercoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-10-29 22:36:11 +0000
commitbc3d33e0ec5c7b51155432a8ceb3a82c6c4b6d57 (patch)
treeba89b82495b0d6478c662694dde9cfaa796a6657
parent6cb4c3df2f7686618a1e8fe501a8414f6a513688 (diff)
downloadATCD-bc3d33e0ec5c7b51155432a8ceb3a82c6c4b6d57.tar.gz
ChangeLogTag:Thu Oct 29 16:25:50 1998 Carlos O'Ryan <coryan@cs.wustl.edu>
-rw-r--r--TAO/ChangeLog-98c23
-rw-r--r--TAO/TAO_IDL/Makefile11
-rw-r--r--TAO/TAO_IDL/be/be_decl.cpp13
-rw-r--r--TAO/TAO_IDL/be/be_visitor_factory.cpp4
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface/cdr_op_ch.cpp10
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface/cdr_op_cs.cpp14
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface_fwd.cpp1
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface_fwd/cdr_op_ci.cpp71
-rw-r--r--TAO/TAO_IDL/be/be_visitor_module/module.cpp4
-rw-r--r--TAO/TAO_IDL/be/be_visitor_root/cdr_op.cpp6
-rw-r--r--TAO/TAO_IDL/be/be_visitor_root/root.cpp9
-rw-r--r--TAO/TAO_IDL/be/be_visitor_scope.cpp8
-rw-r--r--TAO/TAO_IDL/be_include/be_codegen.h2
-rw-r--r--TAO/TAO_IDL/be_include/be_decl.h3
-rw-r--r--TAO/TAO_IDL/be_include/be_interface_fwd.h4
-rw-r--r--TAO/TAO_IDL/be_include/be_visitor_interface_fwd.h1
-rw-r--r--TAO/TAO_IDL/be_include/be_visitor_interface_fwd/cdr_op_ci.h51
17 files changed, 213 insertions, 22 deletions
diff --git a/TAO/ChangeLog-98c b/TAO/ChangeLog-98c
index 3c2ef97aefa..408a12ad8ef 100644
--- a/TAO/ChangeLog-98c
+++ b/TAO/ChangeLog-98c
@@ -1,3 +1,26 @@
+Thu Oct 29 16:25:50 1998 Carlos O'Ryan <coryan@cs.wustl.edu>
+
+ * TAO_IDL/Makefile:
+ * TAO_IDL/be/be_visitor_interface_fwd/cdr_op_ci.cpp:
+ * TAO_IDL/be_include/be_visitor_interface_fwd/cdr_op_ci.h:
+ A forward declaration of an interface also generates the forward
+ declaration of its << and >> operators.
+
+ * TAO_IDL/be_include/be_visitor_interface_fwd.h:
+ * TAO_IDL/be_include/be_interface_fwd.h:
+ * TAO_IDL/be_include/be_decl.h:
+ * TAO_IDL/be_include/be_codegen.h:
+ * TAO_IDL/be/be_visitor_root/root.cpp:
+ * TAO_IDL/be/be_visitor_root/cdr_op.cpp:
+ * TAO_IDL/be/be_visitor_module/module.cpp:
+ * TAO_IDL/be/be_visitor_interface/cdr_op_ch.cpp:
+ * TAO_IDL/be/be_visitor_interface/cdr_op_cs.cpp:
+ * TAO_IDL/be/be_visitor_scope.cpp:
+ * TAO_IDL/be/be_visitor_interface_fwd.cpp:
+ * TAO_IDL/be/be_visitor_factory.cpp:
+ * TAO_IDL/be/be_decl.cpp:
+ Some cleanup and added support for the new additions above.
+
Thu Oct 29 07:49:51 1998 David L. Levine <levine@cs.wustl.edu>
* tao/DynUnion_i.cpp: added a bunch of .in () dereferences
diff --git a/TAO/TAO_IDL/Makefile b/TAO/TAO_IDL/Makefile
index 5634db11dd0..b5341266e9f 100644
--- a/TAO/TAO_IDL/Makefile
+++ b/TAO/TAO_IDL/Makefile
@@ -6205,6 +6205,7 @@ tags:
be_include/be_visitor_interface_fwd.h \
be_include/be_visitor_interface_fwd/interface_fwd_ch.h \
be_include/be_visitor_interface_fwd/interface_fwd_ci.h \
+ be_include/be_visitor_interface_fwd/cdr_op_ci.h \
be_include/be_visitor_module.h be_include/be_visitor_module/module.h \
be_include/be_visitor_module/module_ch.h \
be_include/be_visitor_module/module_sh.h \
@@ -7507,7 +7508,8 @@ tags:
be/be_visitor_interface/cdr_op_ch.cpp \
be/be_visitor_interface/cdr_op_cs.cpp
.obj/be_visitor_interface_fwd.o .obj/be_visitor_interface_fwd.so .shobj/be_visitor_interface_fwd.o .shobj/be_visitor_interface_fwd.so: be/be_visitor_interface_fwd.cpp \
- include/idl.h $(ACE_ROOT)/ace/ACE.h \
+ include/idl.h \
+ $(ACE_ROOT)/ace/ACE.h \
$(ACE_ROOT)/ace/OS.h \
$(ACE_ROOT)/ace/inc_user_config.h \
$(ACE_ROOT)/ace/config.h \
@@ -7609,8 +7611,10 @@ tags:
be_include/be_visitor_decl.h \
be_include/be_visitor_interface_fwd/interface_fwd_ch.h \
be_include/be_visitor_interface_fwd/interface_fwd_ci.h \
+ be_include/be_visitor_interface_fwd/cdr_op_ci.h \
be/be_visitor_interface_fwd/interface_fwd_ch.cpp \
- be/be_visitor_interface_fwd/interface_fwd_ci.cpp
+ be/be_visitor_interface_fwd/interface_fwd_ci.cpp \
+ be/be_visitor_interface_fwd/cdr_op_ci.cpp
.obj/be_visitor_module.o .obj/be_visitor_module.so .shobj/be_visitor_module.o .shobj/be_visitor_module.so: be/be_visitor_module.cpp include/idl.h \
$(ACE_ROOT)/ace/ACE.h \
$(ACE_ROOT)/ace/OS.h \
@@ -8665,7 +8669,8 @@ tags:
be/be_visitor_union/any_op_cs.cpp be/be_visitor_union/cdr_op_ch.cpp \
be/be_visitor_union/cdr_op_cs.cpp
.obj/be_visitor_union_branch.o .obj/be_visitor_union_branch.so .shobj/be_visitor_union_branch.o .shobj/be_visitor_union_branch.so: be/be_visitor_union_branch.cpp \
- include/idl.h $(ACE_ROOT)/ace/ACE.h \
+ include/idl.h \
+ $(ACE_ROOT)/ace/ACE.h \
$(ACE_ROOT)/ace/OS.h \
$(ACE_ROOT)/ace/inc_user_config.h \
$(ACE_ROOT)/ace/config.h \
diff --git a/TAO/TAO_IDL/be/be_decl.cpp b/TAO/TAO_IDL/be/be_decl.cpp
index 11bf6344fcf..a45c555951b 100644
--- a/TAO/TAO_IDL/be/be_decl.cpp
+++ b/TAO/TAO_IDL/be/be_decl.cpp
@@ -37,6 +37,7 @@ be_decl::be_decl (void)
cli_stub_any_op_gen_ (I_FALSE),
cli_hdr_cdr_op_gen_ (I_FALSE),
cli_stub_cdr_op_gen_ (I_FALSE),
+ cli_inline_cdr_op_gen_ (I_FALSE),
fullname_ (0),
flatname_ (0),
repoID_ (0),
@@ -567,6 +568,12 @@ be_decl::cli_stub_cdr_op_gen (void)
}
idl_bool
+be_decl::cli_inline_cdr_op_gen (void)
+{
+ return this->cli_inline_cdr_op_gen_;
+}
+
+idl_bool
be_decl::cli_inline_gen (void)
{
return this->cli_inline_gen_;
@@ -628,6 +635,12 @@ be_decl::cli_stub_cdr_op_gen (idl_bool val)
}
void
+be_decl::cli_inline_cdr_op_gen (idl_bool val)
+{
+ this->cli_inline_cdr_op_gen_ = val;
+}
+
+void
be_decl::cli_inline_gen (idl_bool val)
{
this->cli_inline_gen_ = val;
diff --git a/TAO/TAO_IDL/be/be_visitor_factory.cpp b/TAO/TAO_IDL/be/be_visitor_factory.cpp
index b9b32240b24..a2f123ed18c 100644
--- a/TAO/TAO_IDL/be/be_visitor_factory.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_factory.cpp
@@ -106,7 +106,9 @@ TAO_Common_Visitor_Factory::make_visitor (be_visitor_context *ctx)
else
// return a NO_OP visitor
return new be_visitor_decl (new_ctx);
+
case TAO_CodeGen::TAO_ROOT_CDR_OP_CH:
+ case TAO_CodeGen::TAO_ROOT_CDR_OP_CI:
case TAO_CodeGen::TAO_ROOT_CDR_OP_CS:
// this is the starting point for generation of all CDR operators. If we
// do not use compiled marshaling, we do not need these operators
@@ -166,6 +168,8 @@ TAO_Common_Visitor_Factory::make_visitor (be_visitor_context *ctx)
return new be_visitor_interface_fwd_ch (new_ctx);
case TAO_CodeGen::TAO_INTERFACE_FWD_CI:
return new be_visitor_interface_fwd_ci (new_ctx);
+ case TAO_CodeGen::TAO_INTERFACE_FWD_CDR_OP_CI:
+ return new be_visitor_interface_fwd_cdr_op_ci (new_ctx);
case TAO_CodeGen::TAO_STRUCT_CH:
return new be_visitor_structure_ch (new_ctx);
diff --git a/TAO/TAO_IDL/be/be_visitor_interface/cdr_op_ch.cpp b/TAO/TAO_IDL/be/be_visitor_interface/cdr_op_ch.cpp
index 7b4d88f71ca..0874e4517d1 100644
--- a/TAO/TAO_IDL/be/be_visitor_interface/cdr_op_ch.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_interface/cdr_op_ch.cpp
@@ -51,11 +51,11 @@ be_visitor_interface_cdr_op_ch::visit_interface (be_interface *node)
// generate the CDR << and >> operator declarations
os->indent ();
- *os << "CORBA::Boolean " << idl_global->export_macro ()
- << " operator<< (TAO_OutputCDR &, const " << node->name ()
- << "_ptr ); // " << be_nl;
- *os << "CORBA::Boolean " << idl_global->export_macro ()
- << " operator>> (TAO_InputCDR &, "
+ *os << "CORBA::Boolean " << idl_global->export_macro () << be_nl
+ << "operator<< (TAO_OutputCDR &, const " << node->name ()
+ << "_ptr );" << be_nl;
+ *os << "CORBA::Boolean " << idl_global->export_macro () << be_nl
+ << "operator>> (TAO_InputCDR &, "
<< node->name () << "_ptr &);\n";
diff --git a/TAO/TAO_IDL/be/be_visitor_interface/cdr_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_interface/cdr_op_cs.cpp
index a4f5e55fdda..de39fe04f7f 100644
--- a/TAO/TAO_IDL/be/be_visitor_interface/cdr_op_cs.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_interface/cdr_op_cs.cpp
@@ -67,8 +67,11 @@ be_visitor_interface_cdr_op_cs::visit_interface (be_interface *node)
// set the sub state as generating code for the output operator
this->ctx_->sub_state(TAO_CodeGen::TAO_CDR_OUTPUT);
- *os << "ACE_INLINE CORBA::Boolean operator<< (TAO_OutputCDR &strm, "
- << "const " << node->name () << "_ptr _tao_objref)" << be_nl
+ *os << "ACE_INLINE CORBA::Boolean" << be_nl
+ << "operator<< (" << be_idt << be_idt_nl
+ << "TAO_OutputCDR &strm," << be_nl
+ << "const " << node->name () << "_ptr _tao_objref" << be_uidt_nl
+ << ")" << be_uidt_nl
<< "{" << be_idt_nl;
// hand over the encoding to the TAO's internal engine
// *os << "CORBA::Environment env;" << be_nl;
@@ -94,8 +97,11 @@ be_visitor_interface_cdr_op_cs::visit_interface (be_interface *node)
// set the substate as generating code for the input operator
this->ctx_->sub_state(TAO_CodeGen::TAO_CDR_INPUT);
- *os << "ACE_INLINE CORBA::Boolean operator>> (TAO_InputCDR &strm, "
- << node->name () << "_ptr &_tao_objref)" << be_nl
+ *os << "ACE_INLINE CORBA::Boolean" << be_nl
+ << "operator>> (" << be_idt << be_idt_nl
+ << "TAO_InputCDR &strm," << be_nl
+ << node->name () << "_ptr &_tao_objref" << be_uidt_nl
+ << ")" << be_uidt_nl
<< "{" << be_idt_nl;
// hand over to the TAO's internal marshaling engine
// *os << "CORBA::Environment env;" << be_nl;
diff --git a/TAO/TAO_IDL/be/be_visitor_interface_fwd.cpp b/TAO/TAO_IDL/be/be_visitor_interface_fwd.cpp
index dddb1fc84dc..18b5d80cb4c 100644
--- a/TAO/TAO_IDL/be/be_visitor_interface_fwd.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_interface_fwd.cpp
@@ -27,6 +27,7 @@
// include all the individual files
#include "be_visitor_interface_fwd/interface_fwd_ch.cpp"
#include "be_visitor_interface_fwd/interface_fwd_ci.cpp"
+#include "be_visitor_interface_fwd/cdr_op_ci.cpp"
ACE_RCSID(be, be_visitor_interface_fwd, "$Id$")
diff --git a/TAO/TAO_IDL/be/be_visitor_interface_fwd/cdr_op_ci.cpp b/TAO/TAO_IDL/be/be_visitor_interface_fwd/cdr_op_ci.cpp
new file mode 100644
index 00000000000..e7edc5c7ad5
--- /dev/null
+++ b/TAO/TAO_IDL/be/be_visitor_interface_fwd/cdr_op_ci.cpp
@@ -0,0 +1,71 @@
+//
+// $Id$
+//
+
+// ================================================================
+//
+// = LIBRARY
+// TAO IDL
+//
+// = FILENAME
+// cdr_op_ci.cpp
+//
+// = DESCRIPTION
+// Visitor generating code for CDR operators for forward
+// declarations of interfaces. This uses compiled marshaling.
+//
+// = AUTHOR
+// Aniruddha Gokhale & Carlos O'Ryan
+//
+// ================================================================
+
+#include "idl.h"
+#include "idl_extern.h"
+#include "be.h"
+
+#include "be_visitor_interface_fwd.h"
+
+ACE_RCSID(be_visitor_interface_fwd, cdr_op_ci, "$Id$")
+
+// ****************************************************************
+// Interface visitor for generating CDR operator declarations in the
+// client header
+// ****************************************************************
+
+be_visitor_interface_fwd_cdr_op_ci::
+be_visitor_interface_fwd_cdr_op_ci (be_visitor_context *ctx)
+ : be_visitor_decl (ctx)
+{
+}
+
+be_visitor_interface_fwd_cdr_op_ci::
+~be_visitor_interface_fwd_cdr_op_ci (void)
+{
+}
+
+int
+be_visitor_interface_fwd_cdr_op_ci::
+visit_interface_fwd (be_interface_fwd *node)
+{
+ if (node->cli_inline_cdr_op_gen () || node->imported ())
+ return 0;
+
+ TAO_OutStream *os = this->ctx_->stream ();
+
+ // generate the CDR << and >> operator declarations
+ os->indent ();
+ *os << "ACE_INLINE CORBA::Boolean" << be_nl
+ << "operator<< (" << be_idt << be_idt_nl
+ << "TAO_OutputCDR &," << be_nl
+ << "const " << node->name () << "_ptr" << be_uidt_nl
+ << ");" << be_uidt_nl;
+ *os << "ACE_INLINE CORBA::Boolean" << be_nl
+ << "operator>> (" << be_idt << be_idt_nl
+ << "TAO_InputCDR &," << be_nl
+ << node->name () << "_ptr &" << be_uidt_nl
+ << ");" << be_uidt << "\n";
+
+ node->cli_inline_cdr_op_gen (1);
+ return 0;
+}
+
diff --git a/TAO/TAO_IDL/be/be_visitor_module/module.cpp b/TAO/TAO_IDL/be/be_visitor_module/module.cpp
index 7fda90e94bd..6ad52622bd8 100644
--- a/TAO/TAO_IDL/be/be_visitor_module/module.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_module/module.cpp
@@ -362,10 +362,12 @@ be_visitor_module::visit_interface_fwd (be_interface_fwd *node)
case TAO_CodeGen::TAO_MODULE_CI:
ctx.state (TAO_CodeGen::TAO_INTERFACE_FWD_CI);
break;
+ case TAO_CodeGen::TAO_MODULE_CDR_OP_CS:
+ ctx.state (TAO_CodeGen::TAO_INTERFACE_FWD_CDR_OP_CI);
+ break;
case TAO_CodeGen::TAO_MODULE_ANY_OP_CH:
case TAO_CodeGen::TAO_MODULE_ANY_OP_CS:
case TAO_CodeGen::TAO_MODULE_CDR_OP_CH:
- case TAO_CodeGen::TAO_MODULE_CDR_OP_CS:
case TAO_CodeGen::TAO_MODULE_CS:
case TAO_CodeGen::TAO_MODULE_SH:
case TAO_CodeGen::TAO_MODULE_SI:
diff --git a/TAO/TAO_IDL/be/be_visitor_root/cdr_op.cpp b/TAO/TAO_IDL/be/be_visitor_root/cdr_op.cpp
index 08ee3748b79..36f9214da42 100644
--- a/TAO/TAO_IDL/be/be_visitor_root/cdr_op.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_root/cdr_op.cpp
@@ -49,7 +49,8 @@ be_visitor_root_cdr_op::visit_root (be_root *node)
if (this->ctx_->state () == TAO_CodeGen::TAO_ROOT_CDR_OP_CH)
{
- *os << "#ifndef __ACE_INLINE__\n\n";
+ *os << be_nl
+ << "#ifndef __ACE_INLINE__\n\n";
}
// all we have to do is to visit the scope and generate code
@@ -62,7 +63,8 @@ be_visitor_root_cdr_op::visit_root (be_root *node)
if (this->ctx_->state () == TAO_CodeGen::TAO_ROOT_CDR_OP_CH)
{
- *os << "#endif /* __ACE_INLINE__ */\n\n";
+ *os << be_nl
+ << "#endif /* __ACE_INLINE__ */\n\n";
}
return 0;
diff --git a/TAO/TAO_IDL/be/be_visitor_root/root.cpp b/TAO/TAO_IDL/be/be_visitor_root/root.cpp
index 020b90304f2..6c04442da7f 100644
--- a/TAO/TAO_IDL/be/be_visitor_root/root.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_root/root.cpp
@@ -117,8 +117,8 @@ int be_visitor_root::visit_root (be_root *node)
), -1);
}
- // generate the <<= and >>= operators for all the user-defined data types in
- // the outermost scope
+ // generate the << and >> operators for all the user-defined
+ // data types in the outermost scope
if (node->accept (visitor) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
@@ -500,10 +500,13 @@ be_visitor_root::visit_interface_fwd (be_interface_fwd *node)
case TAO_CodeGen::TAO_ROOT_CI:
ctx.state (TAO_CodeGen::TAO_INTERFACE_FWD_CI);
break;
+ case TAO_CodeGen::TAO_ROOT_CDR_OP_CS:
+ ctx.state (TAO_CodeGen::TAO_INTERFACE_FWD_CDR_OP_CI);
+ break;
case TAO_CodeGen::TAO_ROOT_ANY_OP_CH:
case TAO_CodeGen::TAO_ROOT_ANY_OP_CS:
case TAO_CodeGen::TAO_ROOT_CDR_OP_CH:
- case TAO_CodeGen::TAO_ROOT_CDR_OP_CS:
+ case TAO_CodeGen::TAO_ROOT_CDR_OP_CI:
case TAO_CodeGen::TAO_ROOT_CS:
case TAO_CodeGen::TAO_ROOT_SH:
case TAO_CodeGen::TAO_ROOT_SI:
diff --git a/TAO/TAO_IDL/be/be_visitor_scope.cpp b/TAO/TAO_IDL/be/be_visitor_scope.cpp
index d5fa6145dd5..8ee75eff8df 100644
--- a/TAO/TAO_IDL/be/be_visitor_scope.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_scope.cpp
@@ -71,12 +71,16 @@ be_visitor_scope::visit_scope (be_scope *node)
}
be_decl *bd = be_decl::narrow_from_decl (d);
- // set the scope node as "node" in which the code is being generated
- // so that elements in the node's scope can use it for code generation
+ // set the scope node as "node" in which the code is being
+ // generated so that elements in the node's scope can use it
+ // for code generation
+
this->ctx_->scope (node->decl ());
+
// set the node to be visited
this->ctx_->node (bd);
this->elem_number_++;
+
// do any pre processing using the next item info
if (this->pre_process (bd) == -1)
{
diff --git a/TAO/TAO_IDL/be_include/be_codegen.h b/TAO/TAO_IDL/be_include/be_codegen.h
index d220a89a749..25d101305bb 100644
--- a/TAO/TAO_IDL/be_include/be_codegen.h
+++ b/TAO/TAO_IDL/be_include/be_codegen.h
@@ -144,6 +144,7 @@ public:
// emitting code for the interface forward declaration
TAO_INTERFACE_FWD_CH,
TAO_INTERFACE_FWD_CI,
+ TAO_INTERFACE_FWD_CDR_OP_CI,
// emitting code for the module
TAO_MODULE_CH,
@@ -215,6 +216,7 @@ public:
TAO_ROOT_ANY_OP_CH,
TAO_ROOT_ANY_OP_CS,
TAO_ROOT_CDR_OP_CH,
+ TAO_ROOT_CDR_OP_CI,
TAO_ROOT_CDR_OP_CS,
// emitting sequences
diff --git a/TAO/TAO_IDL/be_include/be_decl.h b/TAO/TAO_IDL/be_include/be_decl.h
index 181fbe6ad16..e2a6ccd55a9 100644
--- a/TAO/TAO_IDL/be_include/be_decl.h
+++ b/TAO/TAO_IDL/be_include/be_decl.h
@@ -101,6 +101,7 @@ public:
idl_bool cli_stub_any_op_gen (void);
idl_bool cli_hdr_cdr_op_gen (void);
idl_bool cli_stub_cdr_op_gen (void);
+ idl_bool cli_inline_cdr_op_gen (void);
// set the flag indicating that code generation is done
void cli_hdr_gen (idl_bool);
@@ -113,6 +114,7 @@ public:
void cli_stub_any_op_gen (idl_bool);
void cli_hdr_cdr_op_gen (idl_bool);
void cli_stub_cdr_op_gen (idl_bool);
+ void cli_inline_cdr_op_gen (idl_bool);
idl_bool is_child (be_decl *node);
// am I a direct child of node?
@@ -160,6 +162,7 @@ protected:
idl_bool cli_stub_any_op_gen_;
idl_bool cli_hdr_cdr_op_gen_;
idl_bool cli_stub_cdr_op_gen_;
+ idl_bool cli_inline_cdr_op_gen_;
char *fullname_;
// our full scoped name
diff --git a/TAO/TAO_IDL/be_include/be_interface_fwd.h b/TAO/TAO_IDL/be_include/be_interface_fwd.h
index fa17cd7663f..f3b2d156710 100644
--- a/TAO/TAO_IDL/be_include/be_interface_fwd.h
+++ b/TAO/TAO_IDL/be_include/be_interface_fwd.h
@@ -10,8 +10,8 @@
// be_interface.h
//
// = DESCRIPTION
-// Extension of class AST_Interface_Fwd that provides additional means for C++
-// mapping of an interface.
+// Extension of class AST_Interface_Fwd that provides additional
+// means for C++ mapping of an interface.
//
// = AUTHOR
// Copyright 1994-1995 by Sun Microsystems, Inc.
diff --git a/TAO/TAO_IDL/be_include/be_visitor_interface_fwd.h b/TAO/TAO_IDL/be_include/be_visitor_interface_fwd.h
index 14104e4d229..dafe44c68f8 100644
--- a/TAO/TAO_IDL/be_include/be_visitor_interface_fwd.h
+++ b/TAO/TAO_IDL/be_include/be_visitor_interface_fwd.h
@@ -27,5 +27,6 @@
#include "be_visitor_interface_fwd/interface_fwd_ch.h"
#include "be_visitor_interface_fwd/interface_fwd_ci.h"
+#include "be_visitor_interface_fwd/cdr_op_ci.h"
#endif /* TAO_BE_VISITOR_INTERFACE_FWD_H */
diff --git a/TAO/TAO_IDL/be_include/be_visitor_interface_fwd/cdr_op_ci.h b/TAO/TAO_IDL/be_include/be_visitor_interface_fwd/cdr_op_ci.h
new file mode 100644
index 00000000000..3e7953ee80f
--- /dev/null
+++ b/TAO/TAO_IDL/be_include/be_visitor_interface_fwd/cdr_op_ci.h
@@ -0,0 +1,51 @@
+/* -*- c++ -*- */
+//
+// $Id$
+//
+
+// ============================================================================
+//
+// = LIBRARY
+// TAO IDL
+//
+// = FILENAME
+// cdr_op_ci.h
+//
+// = DESCRIPTION
+// Concrete visitor for the interface_fwd class
+// This one provides code generation for the CDR operators
+// (actually just their declarations) for the interface forward
+// declaration in the client inline.
+//
+// = AUTHOR
+// Aniruddha Gokhale & Carlos O'Ryan
+//
+// ============================================================================
+
+#ifndef BE_VISITOR_INTERFACE_FWD_CDR_OP_CI_H
+#define BE_VISITOR_INTERFACE_FWD_CDR_OP_CI_H
+
+class be_visitor_interface_fwd_cdr_op_ci : public be_visitor_decl
+{
+ //
+ // = TITLE
+ // be_visitor_interface_fwd_cdr_op_ci
+ //
+ // = DESCRIPTION
+ // This is a concrete visitor for interface that generates the CDR
+ // operator forward declarations.
+ //
+
+public:
+ be_visitor_interface_fwd_cdr_op_ci (be_visitor_context *ctx);
+ // constructor
+
+ ~be_visitor_interface_fwd_cdr_op_ci (void);
+ // destructor
+
+ virtual int visit_interface_fwd (be_interface_fwd *node);
+ // visit interface
+
+};
+
+#endif /* BE_VISITOR_INTERFACE_FWD_CDR_OP_CI_H */