summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL
diff options
context:
space:
mode:
authorcoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-03-16 21:48:44 +0000
committercoryan <coryan@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>1998-03-16 21:48:44 +0000
commit6c5006df26b9596d22e915419d7253fac998f286 (patch)
tree1453554787df082463c0685ce1ac39db553eb887 /TAO/TAO_IDL
parentaa175275ba8e503887095850ec44a8e23dafc694 (diff)
downloadATCD-6c5006df26b9596d22e915419d7253fac998f286.tar.gz
ChangeLogTag:Mon Mar 16 15:27:21 1998 Carlos O'Ryan <coryan@cs.wustl.edu>
Diffstat (limited to 'TAO/TAO_IDL')
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface.cpp38
-rw-r--r--TAO/TAO_IDL/be/be_visitor_module.cpp9
2 files changed, 31 insertions, 16 deletions
diff --git a/TAO/TAO_IDL/be/be_visitor_interface.cpp b/TAO/TAO_IDL/be/be_visitor_interface.cpp
index f19b0f51388..3662e0d4761 100644
--- a/TAO/TAO_IDL/be/be_visitor_interface.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_interface.cpp
@@ -703,19 +703,18 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
// the _is_a method
os->indent ();
*os << "virtual CORBA::Boolean _is_a (const CORBA::Char *type_id, "
- << "CORBA::Environment &env);\n";
+ << "CORBA::Environment &env);"
+ << "virtual const char* "
+ << "_interface_repository_id (void) const;" << be_uidt_nl;
// generate the "protected" constructor so that users cannot instantiate
// us
- os->decr_indent ();
- *os << "protected:\n";
- os->incr_indent ();
- *os << node->local_name () << " (void); // default constructor" << be_nl
+ *os << "protected:" << be_idt_nl
+ << node->local_name () << " (void); // default constructor" << be_nl
<< node->local_name () << " (STUB_Object *objref, "
<< "TAO_ServantBase *_tao_servant = 0, "
<< "CORBA::Boolean _tao_collocated = 0);" << be_nl
- << "virtual ~" << node->local_name () << " (void);\n";
- os->decr_indent ();
+ << "virtual ~" << node->local_name () << " (void);" << be_uidt_nl;
// private copy constructor and assignment operator. These are not
// allowed, hence they are private.
@@ -735,15 +734,15 @@ be_visitor_interface_ch::visit_interface (be_interface *node)
{
// we have a scoped name
os->indent ();
- *os << "static CORBA::TypeCode_ptr " << node->tc_name
- ()->last_component () << ";\n\n";
+ *os << "static CORBA::TypeCode_ptr "
+ << node->tc_name ()->last_component () << ";\n\n";
}
else
{
// we are in the ROOT scope
os->indent ();
- *os << "extern CORBA::TypeCode_ptr " << node->tc_name
- ()->last_component () << ";\n\n";
+ *os << "extern CORBA::TypeCode_ptr "
+ << node->tc_name ()->last_component () << ";\n\n";
}
node->cli_hdr_gen (I_TRUE);
@@ -881,9 +880,14 @@ be_visitor_interface_cs::visit_interface (be_interface *node)
<< be_idt_nl
<< "return " << node->name () << "::_nil ();" << be_uidt_nl;
- *os << "if (!obj->_is_collocated () || !obj->_servant())" << be_nl
+ *os << "if (!obj->_is_collocated ()" << be_idt << be_idt << be_idt_nl
+ << " || !obj->_servant()" << be_nl
+ << " || obj->_servant()->_downcast (\""
+ << node->repoID () << "\") == 0" << be_uidt_nl
+ << ")" << be_uidt << be_uidt_nl
<< "{" << be_idt_nl;
- *os << node->name () << "_ptr new_obj = new " << node->name () << "(obj->_get_parent ());" << be_nl
+ *os << node->name () << "_ptr new_obj = new "
+ << node->name () << "(obj->_get_parent ());" << be_nl
<< "return new_obj;" << be_uidt_nl
<< "} // end of if" << be_nl;
@@ -948,6 +952,14 @@ be_visitor_interface_cs::visit_interface (be_interface *node)
os->decr_indent ();
*os << "}\n\n";
+ os->indent ();
+ *os << "const char* " << node->name ()
+ << "::_interface_repository_id (void) const"
+ << be_nl
+ << "{" << be_idt_nl
+ << "return \"" << node->repoID () << "\";" << be_uidt_nl
+ << "}\n\n";
+
// generate the typecode information here
os->indent (); // start from current indentation level
*os << "static const CORBA::Long _oc_" << node->flatname () << "[] =" <<
diff --git a/TAO/TAO_IDL/be/be_visitor_module.cpp b/TAO/TAO_IDL/be/be_visitor_module.cpp
index de1da46861e..5b7107f9886 100644
--- a/TAO/TAO_IDL/be/be_visitor_module.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_module.cpp
@@ -577,7 +577,8 @@ be_visitor_module_ch::visit_module (be_module *node)
os->indent (); // start from whatever indentation level we were at
// now generate the class definition
- *os << "class " << node->local_name () << be_nl
+ *os << "class " << idl_global->export_macro ()
+ << " " << node->local_name () << be_nl
<< "{" << be_nl
<< "public:\n";
os->incr_indent (0);
@@ -630,10 +631,12 @@ be_visitor_module_sh::visit_module (be_module *node)
// name only if we are the outermost module
if (!node->is_nested ())
// we are outermost module
- *os << "class POA_" << node->local_name () << be_nl;
+ *os << "class " << idl_global->export_macro ()
+ << " POA_" << node->local_name () << be_nl;
else
// we are inside another module
- *os << "class " << node->local_name () << be_nl;
+ *os << "class " << idl_global->export_macro ()
+ << " " << node->local_name () << be_nl;
*os << "{" << be_nl
<< "public:"