summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-08-28 19:18:48 +0000
committerparsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795>2003-08-28 19:18:48 +0000
commitc695ac8efb2ed1684b8058272aea6d5251167970 (patch)
tree91957e708f38ca744266ac5e2cab7f34b727b29e
parentc668b0fcfde3e233739450404248c73885b3a53c (diff)
downloadATCD-c695ac8efb2ed1684b8058272aea6d5251167970.tar.gz
ChangeLogTag: Thu Aug 28 13:27:04 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
-rw-r--r--TAO/ChangeLog_ref11
-rw-r--r--TAO/TAO_IDL/be/be_visitor_interface/interface_cs.cpp139
-rw-r--r--TAO/tao/Special_Basic_Argument_T.cpp2
3 files changed, 83 insertions, 69 deletions
diff --git a/TAO/ChangeLog_ref b/TAO/ChangeLog_ref
index e7af4226e65..1f978c304ed 100644
--- a/TAO/ChangeLog_ref
+++ b/TAO/ChangeLog_ref
@@ -1,3 +1,14 @@
+Thu Aug 28 13:27:04 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
+
+ * TAO_IDL/be/be_visitor_interface/interface_cs.cpp:
+
+ Added generation of _is_a() for local interfaces, as per
+ CORBA 3.0.2.
+
+ * tao/Special_Basic_Argument_T (interceptor_result).cpp:
+
+ Added missing 'from_xxx' to the Any insertion.
+
Thu Aug 28 12:16:16 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
* TAO_IDL/be/be_visitor_ami_pre_proc.cpp:
diff --git a/TAO/TAO_IDL/be/be_visitor_interface/interface_cs.cpp b/TAO/TAO_IDL/be/be_visitor_interface/interface_cs.cpp
index 802f4bce1e4..ea6ea04cec5 100644
--- a/TAO/TAO_IDL/be/be_visitor_interface/interface_cs.cpp
+++ b/TAO/TAO_IDL/be/be_visitor_interface/interface_cs.cpp
@@ -395,84 +395,87 @@ be_visitor_interface_cs::visit_interface (be_interface *node)
<< "return obj;" << be_uidt_nl
<< "}" << be_nl << be_nl;
- // Generate the is_a method (not supported on local objects).
- if (! node->is_local ())
- {
- *os << "CORBA::Boolean" << be_nl
- << node->full_name () << "::_is_a (" << be_idt << be_idt_nl
- << "const char *value" << be_nl
- << "ACE_ENV_ARG_DECL";
+ *os << "CORBA::Boolean" << be_nl
+ << node->full_name () << "::_is_a (" << be_idt << be_idt_nl
+ << "const char *value" << be_nl
+ << "ACE_ENV_ARG_DECL";
- if (node->is_abstract ())
- {
- *os << "_NOT_USED";
- }
+ if (node->is_abstract ())
+ {
+ *os << "_NOT_USED";
+ }
- *os << be_uidt_nl << ")" << be_uidt_nl
- << "{" << be_idt_nl
- << "if (" << be_idt << be_idt_nl;
+ *os << be_uidt_nl << ")" << be_uidt_nl
+ << "{" << be_idt_nl
+ << "if (" << be_idt << be_idt_nl;
- int status =
- node->traverse_inheritance_graph (be_interface::is_a_helper,
- os);
+ int status =
+ node->traverse_inheritance_graph (be_interface::is_a_helper,
+ os);
- if (status == -1)
- {
- ACE_ERROR_RETURN ((LM_ERROR,
- "(%N:%l) be_visitor_interface_cs::"
- "visit_interface - "
- "_is_a method codegen failed\n"),
- -1);
- }
-
- if (node->is_abstract () || node->has_mixed_parentage ())
- {
- *os << "!ACE_OS::strcmp (" << be_idt << be_idt_nl
- << "(char *)value," << be_nl
- << "\"IDL:omg.org/CORBA/AbstractBase:1.0\"" << be_uidt_nl
- << ")";
- }
+ if (status == -1)
+ {
+ ACE_ERROR_RETURN ((LM_ERROR,
+ "(%N:%l) be_visitor_interface_cs::"
+ "visit_interface - "
+ "_is_a method codegen failed\n"),
+ -1);
+ }
- if (node->has_mixed_parentage ())
- {
- *os << " ||" << be_uidt_nl;
- }
- else if (node->is_abstract ())
- {
- *os << be_uidt << be_uidt_nl;
- }
+ if (node->is_abstract () || node->has_mixed_parentage ())
+ {
+ *os << "!ACE_OS::strcmp (" << be_idt << be_idt_nl
+ << "(char *)value," << be_nl
+ << "\"IDL:omg.org/CORBA/AbstractBase:1.0\"" << be_uidt_nl
+ << ")";
+ }
+ else if (node->is_local ())
+ {
+ *os << "!ACE_OS::strcmp (" << be_idt << be_idt_nl
+ << "(char *)value," << be_nl
+ << "\"IDL:omg.org/CORBA/LocalObject:1.0\"" << be_uidt_nl
+ << ")";
+ }
- if (! node->is_abstract ())
- {
- *os << "!ACE_OS::strcmp (" << be_idt << be_idt_nl
- << "(char *)value," << be_nl
- << "\"IDL:omg.org/CORBA/Object:1.0\"" << be_uidt_nl
- << ")" << be_uidt << be_uidt_nl;
- }
+ if (node->has_mixed_parentage () || node->is_local ())
+ {
+ *os << " ||" << be_uidt_nl;
+ }
+ else if (node->is_abstract ())
+ {
+ *os << be_uidt << be_uidt_nl;
+ }
- *os << " )" << be_nl
- << "{" << be_idt_nl
- << "return 1; // success using local knowledge" << be_uidt_nl
- << "}" << be_uidt_nl
- << "else" << be_idt_nl
- << "{" << be_idt_nl;
+ if (! node->is_abstract ())
+ {
+ *os << "!ACE_OS::strcmp (" << be_idt << be_idt_nl
+ << "(char *)value," << be_nl
+ << "\"IDL:omg.org/CORBA/Object:1.0\"" << be_uidt_nl
+ << ")" << be_uidt << be_uidt_nl;
+ }
- if (node->is_abstract ())
- {
- *os << "return 0;" << be_uidt_nl;
- }
- else
- {
- *os << "return this->ACE_NESTED_CLASS (CORBA, Object)::_is_a ("
- << be_idt << be_idt_nl
- << "value" << be_nl
- << "ACE_ENV_ARG_PARAMETER" << be_uidt_nl
- << ");" << be_uidt << be_uidt_nl;
- }
+ *os << " )" << be_nl
+ << "{" << be_idt_nl
+ << "return 1; // success using local knowledge" << be_uidt_nl
+ << "}" << be_uidt_nl
+ << "else" << be_idt_nl
+ << "{" << be_idt_nl;
- *os << "}" << be_uidt << be_uidt_nl
- << "}" << be_nl << be_nl;
+ if (node->is_abstract () || node->is_local ())
+ {
+ *os << "return 0;" << be_uidt_nl;
}
+ else
+ {
+ *os << "return this->ACE_NESTED_CLASS (CORBA, Object)::_is_a ("
+ << be_idt << be_idt_nl
+ << "value" << be_nl
+ << "ACE_ENV_ARG_PARAMETER" << be_uidt_nl
+ << ");" << be_uidt << be_uidt_nl;
+ }
+
+ *os << "}" << be_uidt << be_uidt_nl
+ << "}" << be_nl << be_nl;
// Generating _tao_QueryInterface method.
*os << "void *" << node->full_name ()
diff --git a/TAO/tao/Special_Basic_Argument_T.cpp b/TAO/tao/Special_Basic_Argument_T.cpp
index 3451b51a3b1..502ce2bd73b 100644
--- a/TAO/tao/Special_Basic_Argument_T.cpp
+++ b/TAO/tao/Special_Basic_Argument_T.cpp
@@ -98,7 +98,7 @@ TAO::Ret_Special_Basic_Argument_T<S,to_S,from_S>::interceptor_result (
CORBA::Any * any
)
{
- (*any) <<= this->x_;
+ (*any) <<= from_S (this->x_);
}
#endif /* TAO_SPECIAL_BASIC_ARGUMENT_T_C */