summaryrefslogtreecommitdiff
path: root/TAO/TAO_IDL/be/be_interface.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/TAO_IDL/be/be_interface.cpp')
-rw-r--r--TAO/TAO_IDL/be/be_interface.cpp119
1 files changed, 101 insertions, 18 deletions
diff --git a/TAO/TAO_IDL/be/be_interface.cpp b/TAO/TAO_IDL/be/be_interface.cpp
index b926dfc27d4..9e9526f9b78 100644
--- a/TAO/TAO_IDL/be/be_interface.cpp
+++ b/TAO/TAO_IDL/be/be_interface.cpp
@@ -172,13 +172,7 @@ be_interface::local_coll_name (void) const
void
be_interface::compute_fullskelname (void)
{
- this->compute_fullskelname (this->full_skel_name_, "POA_");
-}
-
-void
-be_interface::compute_fullskelname (char *&skelname, const char *prefix)
-{
- if (skelname)
+ if (full_skel_name_)
return;
else
{
@@ -188,7 +182,7 @@ be_interface::compute_fullskelname (char *&skelname, const char *prefix)
long second = I_FALSE;
// in the first loop compute the total length
- namelen = ACE_OS::strlen (prefix);
+ namelen = 4;
i = new UTL_IdListActiveIterator (this->name ());
while (!(i->is_done ()))
{
@@ -211,20 +205,20 @@ be_interface::compute_fullskelname (char *&skelname, const char *prefix)
}
delete i;
- skelname = new char [namelen+1];
- skelname[0] = '\0';
+ this->full_skel_name_ = new char [namelen+1];
+ this->full_skel_name_[0] = '\0';
first = I_TRUE;
second = I_FALSE;
- ACE_OS::strcat (skelname, prefix);
+ ACE_OS::strcat (this->full_skel_name_, "POA_");
i = new UTL_IdListActiveIterator (this->name ());
while (!(i->is_done ()))
{
if (!first)
- ACE_OS::strcat (skelname, "::");
+ ACE_OS::strcat (this->full_skel_name_, "::");
else if (second)
first = second = I_FALSE;
// print the identifier
- ACE_OS::strcat (skelname, i->item ()->get_string ());
+ ACE_OS::strcat (this->full_skel_name_, i->item ()->get_string ());
if (first)
{
if (ACE_OS::strcmp (i->item ()->get_string (), "") != 0)
@@ -804,6 +798,95 @@ be_interface::gen_out_impl (void)
return 0;
}
+// generate typecode.
+// Typecode for interface comprises the enumerated value followed by the
+// encapsulation of the parameters
+
+int
+be_interface::gen_typecode (void)
+{
+ TAO_OutStream *cs; // output stream
+ TAO_NL nl; // end line
+ TAO_CodeGen *cg = TAO_CODEGEN::instance ();
+
+ cs = cg->client_stubs ();
+ cs->indent (); // start from whatever indentation level we were at
+
+ *cs << "CORBA::tk_objref, // typecode kind" << nl;
+ *cs << this->tc_encap_len () << ", // encapsulation length\n";
+ // now emit the encapsulation
+ return this->gen_encapsulation ();
+}
+
+// generate encapsulation
+// An encapsulation for ourselves will be necessary when we are part of some
+// other IDL type and a typecode for that other type is being generated. This
+// will comprise our typecode kind. IDL types with parameters will additionally
+// have the encapsulation length and the entire typecode description
+int
+be_interface::gen_encapsulation (void)
+{
+ TAO_OutStream *cs; // output stream
+ TAO_NL nl; // end line
+ TAO_CodeGen *cg = TAO_CODEGEN::instance ();
+ long i, arrlen;
+ ACE_UINT32 *arr;
+
+ cs = cg->client_stubs ();
+ cs->indent (); // start from whatever indentation level we were at
+
+ // XXXASG - byte order must be based on what m/c we are generating code -
+ // TODO
+ *cs << "TAO_ENCAP_BYTE_ORDER, // byte order" << nl;
+ // generate repoID
+ *cs << (ACE_OS::strlen (this->repoID ())+1) << ", ";
+ (void)this->tc_name2long (this->repoID (), arr, arrlen);
+ for (i=0; i < arrlen; i++)
+ {
+ cs->print ("ACE_NTOHL (0x%x), ", arr[i]);
+ }
+ *cs << " // repository ID = " << this->repoID () << nl;
+ // generate name
+ *cs << (ACE_OS::strlen (this->local_name ()->get_string ())+1) << ", ";
+ (void)this->tc_name2long(this->local_name ()->get_string (), arr, arrlen);
+ for (i=0; i < arrlen; i++)
+ {
+ cs->print ("ACE_NTOHL (0x%x), ", arr[i]);
+ }
+ *cs << " // name = " << this->local_name () << ",\n";
+
+ return 0;
+}
+
+// compute size of typecode
+long
+be_interface::tc_size (void)
+{
+ return 4 + 4 + this->tc_encap_len ();
+}
+
+// compute the encapsulation length
+long
+be_interface::tc_encap_len (void)
+{
+ if (this->encap_len_ == -1) // not computed yet
+ {
+ long slen;
+
+ // Macro to avoid "warning: unused parameter" type warning.
+ ACE_UNUSED_ARG (slen);
+
+ this->encap_len_ = 4; // holds the byte order flag
+
+ this->encap_len_ += this->repoID_encap_len (); // for repoID
+
+ // do the same thing for the local name
+ this->encap_len_ += this->name_encap_len ();
+
+ }
+ return this->encap_len_;
+}
+
// helper.
int
be_interface::gen_operation_table (void)
@@ -1152,7 +1235,7 @@ be_interface::traverse_inheritance_graph (be_interface::tao_code_emitter gen,
// insert ourselves in the Queue
if (queue.enqueue_tail (this) == -1)
{
- ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_interface::traverse_inheritance_graph - "
+ ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_interface::gen_operation_table - "
"error generating entries\n"), -1);
}
@@ -1687,7 +1770,7 @@ be_interface::gen_skel_helper (be_interface *derived,
<< "void *obj," << be_nl
<< "void *context," << be_nl
<< "CORBA::Environment &env =" << be_idt_nl
- << "CORBA::default_environment ()"
+ << "CORBA::Environment::default_environment ()"
<< be_uidt << be_uidt_nl
<< ");" << be_uidt << "\n\n";
}
@@ -1738,7 +1821,7 @@ be_interface::gen_skel_helper (be_interface *derived,
<< "void *obj," << be_nl
<< "void *context," << be_nl
<< "CORBA::Environment &env =" << be_idt_nl
- << "CORBA::default_environment ()"
+ << "CORBA::Environment::default_environment ()"
<< be_uidt << be_uidt_nl
<< ");" << be_uidt << "\n\n";
}
@@ -1785,7 +1868,7 @@ be_interface::gen_skel_helper (be_interface *derived,
<< "void *obj," << be_nl
<< "void *context," << be_nl
<< "CORBA::Environment &env = " << be_idt_nl
- << "CORBA::default_environment ()"
+ << "CORBA::Environment::default_environment ()"
<< be_uidt << be_uidt_nl
<< ");" << be_uidt << "\n\n";
}
@@ -1808,7 +1891,7 @@ be_interface::gen_skel_helper (be_interface *derived,
<< derived->full_skel_name ()
<< "_ptr) obj;" << be_nl;
*os << ancestor->full_skel_name ()
- << "::_set_" << d->local_name ()
+ << "::_get_" << d->local_name ()
<< "_skel (" << be_idt << be_idt_nl
<< "req," << be_nl
<< "(" << ancestor->full_skel_name ()