diff options
author | nanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-08-16 20:18:54 +0000 |
---|---|---|
committer | nanbor <nanbor@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2001-08-16 20:18:54 +0000 |
commit | 1362b8f11e8335bf60d6d6fdc7b3fa2507b4fcdd (patch) | |
tree | e10ddae3c9ec12a1ad9cb91b525853b93ddfba9f | |
parent | bdda74e8c68e6806b462e928d12a0f92f4a253f8 (diff) | |
download | ATCD-1362b8f11e8335bf60d6d6fdc7b3fa2507b4fcdd.tar.gz |
ChangeLogTag:Thu Aug 16 15:16:18 2001 Nanbor Wang <nanbor@cs.wustl.edu>
20 files changed, 635 insertions, 323 deletions
diff --git a/TAO/ChangeLogs/ChangeLog-02a b/TAO/ChangeLogs/ChangeLog-02a index 6d2e2b2520a..e21f8a6e027 100644 --- a/TAO/ChangeLogs/ChangeLog-02a +++ b/TAO/ChangeLogs/ChangeLog-02a @@ -1,3 +1,26 @@ +Thu Aug 16 15:16:18 2001 Nanbor Wang <nanbor@cs.wustl.edu> + + * TAO_IDL/be/be_sequence.cpp: + * TAO_IDL/be/be_visitor_sequence/buffer_type.cpp: + * TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp: + * TAO_IDL/be/be_visitor_sequence/elemtype.cpp: + * TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_ch.cpp: + * TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_ci.cpp: + * TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_cs.cpp: + * TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_ch.cpp: + * TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_ci.cpp: + * TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_cs.cpp: + * TAO_IDL/be/be_visitor_sequence/sequence_base.cpp: + * TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp: + * TAO_IDL/be/be_visitor_sequence/sequence_ci.cpp: + * TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp: + * TAO_IDL/be_include/be_sequence.h: + * TAO_IDL/be_include/be_visitor_sequence/buffer_type.h: + * TAO_IDL/be_include/be_visitor_sequence/cdr_op_cs.h: + * TAO_IDL/be_include/be_visitor_sequence/elemtype.h: + * TAO_IDL/be_include/be_visitor_sequence/sequence_base.h: Allowed + using valuetypes in sequences. This is required by the CCM IDL. + Mon Aug 13 16:48:05 2001 Nanbor Wang <nanbor@cs.wustl.edu> * tao/Sequence_T.h: diff --git a/TAO/TAO_IDL/be/be_sequence.cpp b/TAO/TAO_IDL/be/be_sequence.cpp index b166fc951f7..962ee7d8a9e 100644 --- a/TAO/TAO_IDL/be/be_sequence.cpp +++ b/TAO/TAO_IDL/be/be_sequence.cpp @@ -39,15 +39,15 @@ be_sequence::be_sequence (AST_Expression *v, AST_Type *t, idl_bool local, idl_bool abstract) - : AST_Sequence (v, - t, - t->is_local () || local, + : AST_Sequence (v, + t, + t->is_local () || local, abstract), AST_Decl (AST_Decl::NT_sequence, 0, 0, I_TRUE), - COMMON_Base (t->is_local () || local, + COMMON_Base (t->is_local () || local, abstract), mt_ (be_sequence::MNG_UNKNOWN) { @@ -66,8 +66,8 @@ be_sequence::gen_name (void) be_type *bt = 0; // Base type. // Reset the buffer. - ACE_OS::memset (namebuf, - '\0', + ACE_OS::memset (namebuf, + '\0', NAMEBUFSIZE); // Retrieve the base type. @@ -108,14 +108,14 @@ be_sequence::gen_name (void) UTL_Scope *parent = this->defined_in (); seq->set_defined_in (parent); parent->add_sequence (seq); - ACE_OS::sprintf (namebuf, - "_tao_seq_%s", + ACE_OS::sprintf (namebuf, + "_tao_seq_%s", seq->gen_name ()); } else { - ACE_OS::sprintf (namebuf, - "_tao_seq_%s", + ACE_OS::sprintf (namebuf, + "_tao_seq_%s", bt->local_name ()->get_string ()); } @@ -220,8 +220,18 @@ be_sequence::managed_type (void) { case AST_Decl::NT_interface: case AST_Decl::NT_interface_fwd: - this->mt_ = be_sequence::MNG_OBJREF; - break; + { + be_interface *bf = be_interface::narrow_from_decl (prim_type); + if (bf->is_valuetype ()) + { + this->mt_ = be_sequence::MNG_VALUE; + } + else + { + this->mt_ = be_sequence::MNG_OBJREF; + } + break; + } case AST_Decl::NT_string: this->mt_ = be_sequence::MNG_STRING; break; @@ -230,7 +240,7 @@ be_sequence::managed_type (void) break; case AST_Decl::NT_pre_defined: { - be_predefined_type *bpd = + be_predefined_type *bpd = be_predefined_type::narrow_from_decl (prim_type); if (bpd->pt () == AST_PredefinedType::PT_pseudo) @@ -292,8 +302,8 @@ const char * be_sequence::instance_name () { static char namebuf[NAMEBUFSIZE]; - ACE_OS::memset (namebuf, - '\0', + ACE_OS::memset (namebuf, + '\0', NAMEBUFSIZE); be_type *bt = 0; @@ -340,6 +350,21 @@ be_sequence::instance_name () this->max_size ()->ev ()->u.ulval); } break; + case be_sequence::MNG_VALUE: + if (this->unbounded ()) + { + ACE_OS::sprintf (namebuf, + "_TAO_Unbounded_Valuetype_Sequence_%s", + this->flat_name ()); + } + else + { + ACE_OS::sprintf (namebuf, + "_TAO_Bounded_Valuetype_Sequence_%s_%lu", + this->flat_name (), + this->max_size ()->ev ()->u.ulval); + } + break; case be_sequence::MNG_STRING: if (this->unbounded ()) { @@ -374,7 +399,7 @@ be_sequence::instance_name () be_predefined_type *predef = be_predefined_type::narrow_from_decl (prim_type); - if (predef != 0 + if (predef != 0 && predef->pt() == AST_PredefinedType::PT_octet) { ACE_OS::sprintf (namebuf, diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/buffer_type.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/buffer_type.cpp index 8c71efb085c..a00c048e0e6 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/buffer_type.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/buffer_type.cpp @@ -18,9 +18,9 @@ // // ============================================================================ -#include "idl.h" -#include "idl_extern.h" -#include "be.h" +#include "idl.h" +#include "idl_extern.h" +#include "be.h" #include "be_visitor_sequence.h" @@ -100,6 +100,18 @@ be_visitor_sequence_buffer_type::visit_interface_fwd (be_interface_fwd *node) } int +be_visitor_sequence_buffer_type::visit_valuetype (be_valuetype *node) +{ + return this->visit_interface (node); +} + +int +be_visitor_sequence_buffer_type::visit_valuetype_fwd (be_valuetype_fwd *node) +{ + return this->visit_interface_fwd (node); +} + +int be_visitor_sequence_buffer_type::visit_string (be_string *node) { TAO_OutStream *os = this->ctx_->stream (); diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp index 399992eadfb..3258ee8ddc0 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/cdr_op_cs.cpp @@ -266,6 +266,18 @@ be_visitor_sequence_cdr_op_cs::visit_interface_fwd (be_interface_fwd *node) } int +be_visitor_sequence_cdr_op_cs::visit_valuetype (be_valuetype *node) +{ + return this->visit_node (node); +} + +int +be_visitor_sequence_cdr_op_cs::visit_valuetype_fwd (be_valuetype_fwd *node) +{ + return this->visit_node (node); +} + +int be_visitor_sequence_cdr_op_cs::visit_predefined_type (be_predefined_type *node) { TAO_OutStream *os = this->ctx_->stream (); diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/elemtype.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/elemtype.cpp index 7ce182d7966..49e2c399c6a 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/elemtype.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/elemtype.cpp @@ -18,9 +18,9 @@ // // ============================================================================ -#include "idl.h" -#include "idl_extern.h" -#include "be.h" +#include "idl.h" +#include "idl_extern.h" +#include "be.h" #include "be_visitor_sequence.h" @@ -101,9 +101,9 @@ be_visitor_sequence_elemtype::visit_predefined_type (be_predefined_type *node) break; default: if (this->ctx_->state () == TAO_CodeGen::TAO_SEQELEM_RETTYPE_CH) - *os << bt->nested_type_name (this->ctx_->scope ()) << " &"; + *os << bt->nested_type_name (this->ctx_->scope ()) << " &"; else - *os << bt->name () << " &"; + *os << bt->name () << " &"; } return 0; } @@ -142,6 +142,33 @@ be_visitor_sequence_elemtype::visit_interface (be_interface *node) } int +be_visitor_sequence_elemtype::visit_valuetype (be_valuetype *node) +{ + TAO_OutStream *os = this->ctx_->stream (); + be_type *bt; + + if (this->ctx_->alias ()) + bt = this->ctx_->alias (); + else + bt = node; + + if (this->ctx_->state () == TAO_CodeGen::TAO_SEQELEM_RETTYPE_CH) + { + *os << "TAO_Valuetype_Manager<"; + *os << bt->nested_type_name (this->ctx_->scope ()) << ", "; + *os << bt->nested_type_name (this->ctx_->scope (), "_var") << ">"; + } + else + { + *os << "TAO_Valuetype_Manager<"; + *os << bt->name () << ", "; + *os << bt->name () << "_var>"; + } + + return 0; +} + +int be_visitor_sequence_elemtype::visit_interface_fwd (be_interface_fwd *node) { TAO_OutStream *os = this->ctx_->stream (); @@ -169,6 +196,33 @@ be_visitor_sequence_elemtype::visit_interface_fwd (be_interface_fwd *node) } int +be_visitor_sequence_elemtype::visit_valuetype_fwd (be_valuetype_fwd *node) +{ + TAO_OutStream *os = this->ctx_->stream (); + be_type *bt; + + if (this->ctx_->alias ()) + bt = this->ctx_->alias (); + else + bt = node; + + if (this->ctx_->state () == TAO_CodeGen::TAO_SEQELEM_RETTYPE_CH) + { + *os << "TAO_Valuetype_Manager<"; + *os << bt->nested_type_name (this->ctx_->scope ()) << ","; + *os << bt->nested_type_name (this->ctx_->scope (), "_var") << ">"; + } + else + { + *os << "TAO_Valuetype_Manager<"; + *os << bt->name () << ","; + *os << bt->name () << "_var>"; + } + + return 0; +} + +int be_visitor_sequence_elemtype::visit_string (be_string *node) { TAO_OutStream *os = this->ctx_->stream (); diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_ch.cpp index f804c829f80..47bedc70227 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_ch.cpp @@ -20,7 +20,7 @@ // // ============================================================================ -#include "be.h" +#include "be.h" #include "be_visitor_sequence.h" @@ -113,6 +113,7 @@ be_visitor_sequence_ch::gen_bounded_obj_sequence (be_sequence *node) && prim && prim->pt () == AST_PredefinedType::PT_pseudo && ACE_OS::strcmp (prim->local_name ()->get_string (), "Object") != 0; + int is_valuetype = 0; // operator[] if (is_pseudo_object) @@ -121,7 +122,12 @@ be_visitor_sequence_ch::gen_bounded_obj_sequence (be_sequence *node) } else { - *os << "TAO_Object_Manager<"; + be_interface *bf = be_interface::narrow_from_decl (pt); + is_valuetype = bf->is_valuetype (); + if (is_valuetype) + *os << "TAO_Valuetype_Manager<"; + else + *os << "TAO_Object_Manager<"; } *os << bt->name () << "," @@ -171,16 +177,16 @@ be_visitor_sequence_ch::gen_bounded_obj_sequence (be_sequence *node) << "CORBA::ULong ol" << be_uidt_nl << ");" << be_uidt_nl << be_nl; - if (!is_pseudo_object) + if (! (is_pseudo_object || is_valuetype)) { // Pseudo objects do not require these methods. *os << "virtual void _downcast (" << be_idt << be_idt_nl - << "void* target," << be_nl - << "CORBA_Object *src," << be_nl - << "CORBA_Environment &ACE_TRY_ENV = " << be_idt_nl - << "TAO_default_environment ()" - << be_uidt << be_uidt_nl - << ");" << be_uidt_nl; + << "void* target," << be_nl + << "CORBA_Object *src," << be_nl + << "CORBA_Environment &ACE_TRY_ENV = " << be_idt_nl + << "TAO_default_environment ()" + << be_uidt << be_uidt_nl + << ");" << be_uidt_nl; *os << "virtual CORBA_Object* _upcast (void *src) const;"; } diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_ci.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_ci.cpp index 6d0af4f55a4..9013e9e80c2 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_ci.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_ci.cpp @@ -19,7 +19,7 @@ // Modifications by Aniruddha Gokhale // ============================================================================ -#include "be.h" +#include "be.h" #include "be_visitor_sequence.h" @@ -40,7 +40,7 @@ be_visitor_sequence_ci::gen_bounded_obj_sequence (be_sequence *node) ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_sequence_ci::" "visit_sequence - " - "Bad element type\n"), + "Bad element type\n"), -1); } @@ -58,7 +58,7 @@ be_visitor_sequence_ci::gen_bounded_obj_sequence (be_sequence *node) pt = bt; } - const char *name = + const char *name = be_decl::narrow_from_decl (pt)->full_name (); idl_bool bt_is_defined; @@ -83,22 +83,22 @@ be_visitor_sequence_ci::gen_bounded_obj_sequence (be_sequence *node) const char * class_name = node->instance_name (); static char full_class_name [NAMEBUFSIZE]; - ACE_OS::memset (full_class_name, - '\0', + ACE_OS::memset (full_class_name, + '\0', NAMEBUFSIZE); if (node->is_nested ()) { be_scope *parent = be_scope::narrow_from_scope (node->defined_in ()); - ACE_OS::sprintf (full_class_name, + ACE_OS::sprintf (full_class_name, "%s::%s", parent->decl ()->full_name (), class_name); } else { - ACE_OS::sprintf (full_class_name, + ACE_OS::sprintf (full_class_name, "%s", class_name); } @@ -146,12 +146,18 @@ be_visitor_sequence_ci::gen_bounded_obj_sequence (be_sequence *node) *os << "*[" << node->max_size () << "], 0);" << be_nl << be_nl - << "for (CORBA::ULong i = 0; i < " << node->max_size () + << "for (CORBA::ULong i = 0; i < " << node->max_size () << "; i++)" << be_idt_nl << "{" << be_idt_nl << "buf[i] = "; - if (bt_is_defined) + int is_valuetype = be_interface::narrow_from_decl (pt)->is_valuetype (); + + if (is_valuetype) + { + *os << "0;"; + } + else if (bt_is_defined) { bt->accept (visitor); @@ -175,12 +181,19 @@ be_visitor_sequence_ci::gen_bounded_obj_sequence (be_sequence *node) *os << " **buffer)" << be_nl << "{" << be_idt_nl - << "for (CORBA::ULong i = 0; i < " << node->max_size () + << "for (CORBA::ULong i = 0; i < " << node->max_size () << "; ++i)" << be_idt_nl << "{" << be_idt_nl << "if (buffer[i] != "; - if (bt_is_defined) + if (is_valuetype) + { + *os << "0)" << be_idt_nl + << "{" << be_idt_nl + << "buffer[i]->_remove_ref ();" << be_nl + << "buffer[i] = 0;" << be_uidt_nl; + } + else if (bt_is_defined) { bt->accept (visitor); @@ -202,7 +215,7 @@ be_visitor_sequence_ci::gen_bounded_obj_sequence (be_sequence *node) << "tao_" << pt->flat_name () << "_nil ();" << be_uidt_nl; } - *os << "}" << be_uidt << be_uidt_nl + *os << "}" << be_uidt << be_uidt_nl << "}" << be_uidt_nl << be_nl << "delete[] buffer;" << be_uidt_nl << "} " << be_nl @@ -228,7 +241,7 @@ be_visitor_sequence_ci::gen_bounded_obj_sequence (be_sequence *node) *os <<"* *value," << be_nl << "CORBA::Boolean release)" << be_uidt_nl << "// Constructor from data." << be_nl - << " : TAO_Bounded_Base_Sequence (" << node->max_size () + << " : TAO_Bounded_Base_Sequence (" << node->max_size () << ", length, value, release)" << be_nl << "{" << be_nl << "}" << be_nl @@ -256,18 +269,27 @@ be_visitor_sequence_ci::gen_bounded_obj_sequence (be_sequence *node) *os << "** ACE_CAST_CONST, rhs.buffer_);" << be_nl << "for (CORBA::ULong i = 0; i < rhs.length_; i++)" << be_idt_nl - << "{" << be_idt_nl - << "tmp1[i] = "; + << "{" << be_idt_nl; - if (bt_is_defined) + if (is_valuetype) { - bt->accept (visitor); - - *os << "::_duplicate (tmp2[i]);"; + *os << "if (tmp2[i] != 0)" << be_idt_nl + << "tmp2[i]->_add_ref ();" << be_uidt_nl + << "tmp1[i] = tmp2[i];"; } else { - *os << "tao_" << pt->flat_name () << "_duplicate (tmp2[i]);"; + *os << "tmp1[i] = "; + if (bt_is_defined) + { + bt->accept (visitor); + + *os << "::_duplicate (tmp2[i]);"; + } + else + { + *os << "tao_" << pt->flat_name () << "_duplicate (tmp2[i]);"; + } } *os << be_uidt_nl @@ -304,7 +326,13 @@ be_visitor_sequence_ci::gen_bounded_obj_sequence (be_sequence *node) << "for (CORBA::ULong i = 0; i < this->length_; ++i)" << be_idt_nl << "{" << be_idt_nl; - if (bt_is_defined) + if (is_valuetype) + { + *os << "if (tmp[i] != 0)" << be_idt_nl + << "tmp[i]->_remove_ref ();" << be_uidt_nl + << "tmp[i] = 0;"; + } + else if (bt_is_defined) { *os << "CORBA::release (tmp[i]);" << be_nl << "tmp[i] = "; @@ -324,7 +352,7 @@ be_visitor_sequence_ci::gen_bounded_obj_sequence (be_sequence *node) << "}" << be_uidt << be_uidt_nl << "}" << be_nl << "else" << be_idt_nl - << "this->buffer_ = " << class_name + << "this->buffer_ = " << class_name << "::allocbuf (rhs.maximum_);" << be_uidt_nl << be_nl << "TAO_Bounded_Base_Sequence::operator= (rhs);" << be_nl @@ -346,18 +374,27 @@ be_visitor_sequence_ci::gen_bounded_obj_sequence (be_sequence *node) *os << " ** ACE_CAST_CONST, rhs.buffer_);" << be_nl << "for (CORBA::ULong i=0; i < rhs.length_; ++i)" << be_idt_nl - << "{" << be_idt_nl - << "tmp1[i] = "; + << "{" << be_idt_nl; - if (bt_is_defined) + if (is_valuetype) { - bt->accept (visitor); - - *os << "::_duplicate (tmp2[i]);"; + *os << "if (tmp2[i] != 0)" << be_idt_nl + << "tmp2[i]->_add_ref ();" << be_uidt_nl + << "tmp1[i] = tmp2[i];"; } else { - *os << "tao_" << pt->flat_name () << "_duplicate (tmp2[i]);"; + *os << "tmp1[i] = "; + if (bt_is_defined) + { + bt->accept (visitor); + + *os << "::_duplicate (tmp2[i]);"; + } + else + { + *os << "tao_" << pt->flat_name () << "_duplicate (tmp2[i]);"; + } } *os << be_uidt_nl @@ -374,7 +411,6 @@ be_visitor_sequence_ci::gen_bounded_obj_sequence (be_sequence *node) && prim && prim->pt () == AST_PredefinedType::PT_pseudo && ACE_OS::strcmp (prim->local_name ()->get_string (), "Object") != 0; - // operator[]. if (is_pseudo_object) { @@ -382,7 +418,10 @@ be_visitor_sequence_ci::gen_bounded_obj_sequence (be_sequence *node) } else { - *os << "ACE_INLINE TAO_Object_Manager<"; + if (is_valuetype) + *os << "TAO_Valuetype_Manager<"; + else + *os << "ACE_INLINE TAO_Object_Manager<"; } *os << bt->name () << "," @@ -406,7 +445,10 @@ be_visitor_sequence_ci::gen_bounded_obj_sequence (be_sequence *node) } else { - *os << "return TAO_Object_Manager<"; + if (is_valuetype) + *os << "return TAO_Valuetype_Manager<"; + else + *os << "return TAO_Object_Manager<"; } *os << bt->name () << "," @@ -421,7 +463,7 @@ be_visitor_sequence_ci::gen_bounded_obj_sequence (be_sequence *node) bt->accept(visitor); *os << " **" << be_nl; - *os << full_class_name << "::get_buffer (CORBA::Boolean orphan)" + *os << full_class_name << "::get_buffer (CORBA::Boolean orphan)" << be_nl << "{" << be_idt_nl; @@ -433,7 +475,7 @@ be_visitor_sequence_ci::gen_bounded_obj_sequence (be_sequence *node) << "// We retain ownership." << be_nl << "if (this->buffer_ == 0)" << be_nl << "{" << be_idt_nl - << "result = " << class_name << "::allocbuf (this->maximum_);" + << "result = " << class_name << "::allocbuf (this->maximum_);" << be_nl << "this->buffer_ = result;" << be_nl << "this->release_ = 1;" << be_uidt_nl diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_cs.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_cs.cpp index 22459a78dae..782985e5741 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/gen_bounded_obj_sequence_cs.cpp @@ -19,7 +19,7 @@ // Modifications by Aniruddha Gokhale // ============================================================================ -#include "be.h" +#include "be.h" #include "be_visitor_sequence.h" @@ -40,7 +40,7 @@ be_visitor_sequence_cs::gen_bounded_obj_sequence (be_sequence *node) ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_sequence_cs::" "visit_sequence - " - "Bad element type\n"), + "Bad element type\n"), -1); } @@ -58,7 +58,7 @@ be_visitor_sequence_cs::gen_bounded_obj_sequence (be_sequence *node) pt = bt; } - const char *name = + const char *name = be_decl::narrow_from_decl (pt)->full_name (); idl_bool bt_is_defined; @@ -80,25 +80,27 @@ be_visitor_sequence_cs::gen_bounded_obj_sequence (be_sequence *node) bt_is_defined = ibt->is_defined (); } + int is_valuetype = be_interface::narrow_from_decl (pt)->is_valuetype (); + const char * class_name = node->instance_name (); static char full_class_name [NAMEBUFSIZE]; - ACE_OS::memset (full_class_name, - '\0', + ACE_OS::memset (full_class_name, + '\0', NAMEBUFSIZE); if (node->is_nested ()) { be_scope *parent = be_scope::narrow_from_scope (node->defined_in ()); - ACE_OS::sprintf (full_class_name, + ACE_OS::sprintf (full_class_name, "%s::%s", parent->decl ()->full_name (), class_name); } else { - ACE_OS::sprintf (full_class_name, + ACE_OS::sprintf (full_class_name, "%s", class_name); } @@ -129,7 +131,7 @@ be_visitor_sequence_cs::gen_bounded_obj_sequence (be_sequence *node) << "// For this class memory is never reallocated so the implementation" << be_nl << "// is *really* simple." << be_nl - << "this->buffer_ = " << class_name << "::allocbuf (length);" + << "this->buffer_ = " << class_name << "::allocbuf (length);" << be_uidt_nl << "}" << be_nl << be_nl; @@ -163,7 +165,7 @@ be_visitor_sequence_cs::gen_bounded_obj_sequence (be_sequence *node) // _shrink_buffer *os << "void" << be_nl - << full_class_name + << full_class_name << "::_shrink_buffer (CORBA::ULong nl, CORBA::ULong ol)" << be_nl << "{" << be_idt_nl; @@ -179,7 +181,13 @@ be_visitor_sequence_cs::gen_bounded_obj_sequence (be_sequence *node) << "for (CORBA::ULong i = nl; i < ol; ++i)" << be_nl << "{" << be_idt_nl; - if (bt_is_defined) + if (is_valuetype) + { + *os << "if (tmp[i] != 0)" << be_idt_nl + << "tmp[i]->_remove_ref ();" << be_uidt_nl + << "tmp[i] = 0;"; + } + else if (bt_is_defined) { *os << "CORBA::release (tmp[i]);" << be_nl << "tmp[i] = "; @@ -201,19 +209,20 @@ be_visitor_sequence_cs::gen_bounded_obj_sequence (be_sequence *node) be_predefined_type *prim = be_predefined_type::narrow_from_decl (pt); - if ((pt->node_type () != AST_Decl::NT_pre_defined) - || (prim - && (prim->pt () == AST_PredefinedType::PT_pseudo) + if (! is_valuetype + && (pt->node_type () != AST_Decl::NT_pre_defined) + || (prim + && (prim->pt () == AST_PredefinedType::PT_pseudo) && (!ACE_OS::strcmp (prim->local_name ()->get_string (), "Object")))) { // Pseudo objects do not require these methods. *os << "void" << be_nl << full_class_name << "::_downcast (" << be_idt << be_idt_nl - << "void* target," << be_nl - << "CORBA_Object *src," << be_nl - << "CORBA::Environment &ACE_TRY_ENV" << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl; + << "void* target," << be_nl + << "CORBA_Object *src," << be_nl + << "CORBA::Environment &ACE_TRY_ENV" << be_uidt_nl + << ")" << be_uidt_nl + << "{" << be_idt_nl; bt->accept (visitor); @@ -222,7 +231,7 @@ be_visitor_sequence_cs::gen_bounded_obj_sequence (be_sequence *node) bt->accept (visitor); *os << "**, target);" << be_nl - << "*tmp = "; + << "*tmp = "; if (bt_is_defined) { @@ -232,17 +241,17 @@ be_visitor_sequence_cs::gen_bounded_obj_sequence (be_sequence *node) } else { - *os << "tao_" << pt->flat_name () + *os << "tao_" << pt->flat_name () << "_narrow (src, ACE_TRY_ENV);"; } *os << be_nl << "ACE_CHECK;" << be_uidt_nl - << "}\n" << be_nl; + << "}\n" << be_nl; *os << "CORBA_Object*" << be_nl << full_class_name << "::_upcast (void *src) const" << be_nl - << "{" << be_idt_nl; + << "{" << be_idt_nl; if (bt_is_defined) { @@ -257,11 +266,11 @@ be_visitor_sequence_cs::gen_bounded_obj_sequence (be_sequence *node) } else { - *os << "return tao_" << pt->flat_name () << "_upcast (src);"; + *os << "return tao_" << pt->flat_name () << "_upcast (src);"; } *os << be_uidt_nl - << "}" << be_nl; + << "}" << be_nl; } os->gen_endif (); diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_ch.cpp index 308d3257ea0..280f589eced 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_ch.cpp @@ -21,7 +21,7 @@ // ============================================================================ -#include "be.h" +#include "be.h" #include "be_visitor_sequence.h" @@ -118,6 +118,7 @@ be_visitor_sequence_ch::gen_unbounded_obj_sequence (be_sequence *node) && prim && prim->pt () == AST_PredefinedType::PT_pseudo && ACE_OS::strcmp (prim->local_name ()->get_string (), "Object") != 0; + int is_valuetype = 0; if (is_pseudo_object) { @@ -125,7 +126,12 @@ be_visitor_sequence_ch::gen_unbounded_obj_sequence (be_sequence *node) } else { - *os << "TAO_Object_Manager<"; + be_interface *bf = be_interface::narrow_from_decl (pt); + is_valuetype = bf->is_valuetype (); + if (is_valuetype) + *os << "TAO_Valuetype_Manager<"; + else + *os << "TAO_Object_Manager<"; } *os << bt->name () << "," @@ -176,16 +182,16 @@ be_visitor_sequence_ch::gen_unbounded_obj_sequence (be_sequence *node) << "CORBA::ULong ol" << be_uidt_nl << ");" << be_uidt_nl << be_nl; - if (!is_pseudo_object) + if (! (is_pseudo_object || is_valuetype)) { // Pseudo objects do not require these methods. *os << "virtual void _downcast (" << be_idt << be_idt_nl - << "void* target," << be_nl - << "CORBA_Object *src," << be_nl - << "CORBA_Environment &ACE_TRY_ENV = " << be_idt_nl - << "TAO_default_environment ()" - << be_uidt << be_uidt_nl - << ");" << be_uidt_nl; + << "void* target," << be_nl + << "CORBA_Object *src," << be_nl + << "CORBA_Environment &ACE_TRY_ENV = " << be_idt_nl + << "TAO_default_environment ()" + << be_uidt << be_uidt_nl + << ");" << be_uidt_nl; *os << "virtual CORBA_Object* _upcast (void *src) const;"; } diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_ci.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_ci.cpp index aefb0f1509a..43e94ab2b82 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_ci.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_ci.cpp @@ -19,7 +19,7 @@ // Modifications by Aniruddha Gokhale // ============================================================================ -#include "be.h" +#include "be.h" #include "be_visitor_sequence.h" @@ -39,7 +39,7 @@ be_visitor_sequence_ci::gen_unbounded_obj_sequence (be_sequence *node) ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_sequence_ci::" "visit_sequence - " - "Bad element type\n"), + "Bad element type\n"), -1); } @@ -57,7 +57,7 @@ be_visitor_sequence_ci::gen_unbounded_obj_sequence (be_sequence *node) pt = bt; } - const char *name = + const char *name = be_decl::narrow_from_decl (pt)->full_name (); idl_bool bt_is_defined; @@ -82,22 +82,22 @@ be_visitor_sequence_ci::gen_unbounded_obj_sequence (be_sequence *node) const char *class_name = node->instance_name (); static char full_class_name [NAMEBUFSIZE]; - ACE_OS::memset (full_class_name, - '\0', + ACE_OS::memset (full_class_name, + '\0', NAMEBUFSIZE); if (node->is_nested ()) { be_scope *parent = be_scope::narrow_from_scope (node->defined_in ()); - ACE_OS::sprintf (full_class_name, + ACE_OS::sprintf (full_class_name, "%s::%s", parent->decl ()->full_name (), class_name); } else { - ACE_OS::sprintf (full_class_name, + ACE_OS::sprintf (full_class_name, "%s", class_name); } @@ -147,7 +147,13 @@ be_visitor_sequence_ci::gen_unbounded_obj_sequence (be_sequence *node) << "{" << be_idt_nl << "buf[i] = "; - if (bt_is_defined) + int is_valuetype = be_interface::narrow_from_decl (pt)->is_valuetype (); + + if (is_valuetype) + { + *os << "0;"; + } + else if (bt_is_defined) { bt->accept (visitor); @@ -158,7 +164,7 @@ be_visitor_sequence_ci::gen_unbounded_obj_sequence (be_sequence *node) *os << "tao_" << pt->flat_name () << "_nil ();"; } - *os << be_uidt_nl + *os << be_uidt_nl << "}" << be_uidt_nl << be_nl << "return buf;" << be_uidt_nl << "}" << be_nl << be_nl; @@ -186,7 +192,7 @@ be_visitor_sequence_ci::gen_unbounded_obj_sequence (be_sequence *node) // Constructor. *os << "ACE_INLINE" << be_nl - << full_class_name << "::" << class_name + << full_class_name << "::" << class_name << " (CORBA::ULong maximum)" << be_idt_nl << ": TAO_Unbounded_Base_Sequence (maximum, " << class_name << "::allocbuf (maximum))" << be_uidt_nl @@ -196,7 +202,7 @@ be_visitor_sequence_ci::gen_unbounded_obj_sequence (be_sequence *node) // Constructor. *os << "ACE_INLINE" << be_nl - << full_class_name << "::" << class_name + << full_class_name << "::" << class_name << " (CORBA::ULong maximum," << be_idt_nl << "CORBA::ULong length," << be_nl; @@ -221,7 +227,7 @@ be_visitor_sequence_ci::gen_unbounded_obj_sequence (be_sequence *node) bt->accept(visitor); - *os <<" **tmp1 = " << class_name << "::allocbuf (this->maximum_);" + *os <<" **tmp1 = " << class_name << "::allocbuf (this->maximum_);" << be_nl; bt->accept (visitor); @@ -233,18 +239,27 @@ be_visitor_sequence_ci::gen_unbounded_obj_sequence (be_sequence *node) *os << " ** ACE_CAST_CONST, rhs.buffer_);" << be_nl << be_nl << "for (CORBA::ULong i = 0; i < rhs.length_; ++i)" << be_idt_nl - << "{" << be_idt_nl - << "tmp1[i] = "; + << "{" << be_idt_nl; - if (bt_is_defined) + if (is_valuetype) { - bt->accept (visitor); - - *os << "::_duplicate (tmp2[i]);"; + *os << "if (tmp2[i] != 0)" << be_idt_nl + << "tmp2[i]->_add_ref ();" << be_uidt_nl + << "tmp1[i] = tmp2 [i];"; } else { - *os << "tao_" << pt->flat_name () << "_duplicate (tmp2[i]);"; + *os << "tmp1[i] = "; + if (bt_is_defined) + { + bt->accept (visitor); + + *os << "::_duplicate (tmp2[i]);"; + } + else + { + *os << "tao_" << pt->flat_name () << "_duplicate (tmp2[i]);"; + } } *os << be_uidt_nl @@ -260,7 +275,7 @@ be_visitor_sequence_ci::gen_unbounded_obj_sequence (be_sequence *node) // Operator =. *os << "ACE_INLINE " << full_class_name << " &" << be_nl - << full_class_name << "::operator= (const " + << full_class_name << "::operator= (const " << class_name << " &rhs)" << be_nl << "{" << be_idt_nl << "if (this == &rhs)" << be_idt_nl @@ -280,7 +295,13 @@ be_visitor_sequence_ci::gen_unbounded_obj_sequence (be_sequence *node) << "for (CORBA::ULong i = 0; i < this->length_; ++i)" << be_nl << "{" << be_idt_nl; - if (bt_is_defined) + if (is_valuetype) + { + *os << "if (tmp[i] != 0)" << be_idt_nl + << "tmp[i]->_remove_ref ();" << be_uidt_nl + << "tmp[i] = 0;"; + } + else if (bt_is_defined) { *os << "CORBA::release (tmp[i]);" << be_nl << "tmp[i] = "; @@ -329,20 +350,28 @@ be_visitor_sequence_ci::gen_unbounded_obj_sequence (be_sequence *node) *os << " ** ACE_CAST_CONST, rhs.buffer_);" << be_nl << be_nl << "for (CORBA::ULong i = 0; i < rhs.length_; ++i)" << be_idt_nl - << "{" << be_idt_nl - << "tmp1[i] = "; + << "{" << be_idt_nl; - if (bt_is_defined) + if (is_valuetype) { - bt->accept (visitor); - - *os << "::_duplicate (tmp2[i]);"; + *os << "if (tmp2[i] != 0)" << be_idt_nl + << "tmp2[i]->_add_ref ();" << be_uidt_nl + << "tmp1[i] = tmp2 [i];"; } else { - *os << "tao_" << pt->flat_name () << "_duplicate (tmp2[i]);"; + *os << "tmp1[i] = "; + if (bt_is_defined) + { + bt->accept (visitor); + + *os << "::_duplicate (tmp2[i]);"; + } + else + { + *os << "tao_" << pt->flat_name () << "_duplicate (tmp2[i]);"; + } } - *os << be_uidt_nl << "}" << be_uidt_nl << be_nl << "return *this;" << be_uidt_nl @@ -356,19 +385,21 @@ be_visitor_sequence_ci::gen_unbounded_obj_sequence (be_sequence *node) && prim && prim->pt () == AST_PredefinedType::PT_pseudo && ACE_OS::strcmp (prim->local_name ()->get_string (), "Object") != 0; - if (is_pseudo_object) { *os << "ACE_INLINE TAO_Pseudo_Object_Manager<"; } else { - *os << "ACE_INLINE TAO_Object_Manager<"; + if (is_valuetype) + *os << "ACE_INLINE TAO_Valuetype_Manager<"; + else + *os << "ACE_INLINE TAO_Object_Manager<"; } *os << bt->name () << "," << bt->name () << "_var>" << be_nl - << full_class_name << "::operator[] (CORBA::ULong index) const" + << full_class_name << "::operator[] (CORBA::ULong index) const" << be_nl << "// read-write accessor" << be_nl << "{" << be_idt_nl @@ -388,7 +419,10 @@ be_visitor_sequence_ci::gen_unbounded_obj_sequence (be_sequence *node) } else { - *os << "return TAO_Object_Manager<"; + if (is_valuetype) + *os << "return TAO_Valuetype_Manager<"; + else + *os << "return TAO_Object_Manager<"; } *os << bt->name () << "," @@ -414,7 +448,7 @@ be_visitor_sequence_ci::gen_unbounded_obj_sequence (be_sequence *node) << "// We retain ownership." << be_nl << "if (this->buffer_ == 0)" << be_nl << "{" << be_idt_nl - << "result = " << class_name << "::allocbuf (this->maximum_);" + << "result = " << class_name << "::allocbuf (this->maximum_);" << be_nl << "this->buffer_ = result;" << be_nl << "this->release_ = 1;" << be_uidt_nl diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_cs.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_cs.cpp index dc8289ec615..26e399ce6a2 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/gen_unbounded_obj_sequence_cs.cpp @@ -19,7 +19,7 @@ // Modifications by Aniruddha Gokhale // ============================================================================ -#include "be.h" +#include "be.h" #include "be_visitor_sequence.h" @@ -57,7 +57,7 @@ be_visitor_sequence_cs::gen_unbounded_obj_sequence (be_sequence *node) pt = bt; } - const char *name = + const char *name = be_decl::narrow_from_decl (pt)->full_name (); idl_bool bt_is_defined; @@ -79,25 +79,27 @@ be_visitor_sequence_cs::gen_unbounded_obj_sequence (be_sequence *node) bt_is_defined = ibt->is_defined (); } + int is_valuetype = be_interface::narrow_from_decl (pt)->is_valuetype (); + const char * class_name = node->instance_name (); static char full_class_name [NAMEBUFSIZE]; - ACE_OS::memset (full_class_name, - '\0', + ACE_OS::memset (full_class_name, + '\0', NAMEBUFSIZE); if (node->is_nested ()) { be_scope *parent = be_scope::narrow_from_scope (node->defined_in ()); - ACE_OS::sprintf (full_class_name, + ACE_OS::sprintf (full_class_name, "%s::%s", parent->decl ()->full_name (), class_name); } else { - ACE_OS::sprintf (full_class_name, + ACE_OS::sprintf (full_class_name, "%s", class_name); } @@ -115,10 +117,10 @@ be_visitor_sequence_cs::gen_unbounded_obj_sequence (be_sequence *node) os->indent (); // allocate_buffer. - *os << "// The Base_Sequence functions, please see tao/Sequence.h" + *os << "// The Base_Sequence functions, please see tao/Sequence.h" << be_nl << "void" << be_nl - << full_class_name << "::_allocate_buffer (CORBA::ULong length)" + << full_class_name << "::_allocate_buffer (CORBA::ULong length)" << be_nl << "{" << be_idt_nl; @@ -140,30 +142,39 @@ be_visitor_sequence_cs::gen_unbounded_obj_sequence (be_sequence *node) << "for (CORBA::ULong i = 0; i < this->length_; ++i)" << be_idt_nl << "{" << be_idt_nl << "if (!this->release_)" << be_idt_nl - << "{" << be_idt_nl - << "tmp[i] = "; + << "{" << be_idt_nl; - if (bt_is_defined) + if (is_valuetype) { - bt->accept (visitor); - - *os << "::_duplicate (old[i]);"; + *os << "if (old[i] != 0)" << be_idt_nl + << "old[i]->_add_ref ();" << be_uidt_nl + << "tmp[i] = old[i];"; } else { - *os << "tao_" << pt->flat_name () << "_duplicate (old[i]);"; + *os << "tmp[i] = "; + if (bt_is_defined) + { + bt->accept (visitor); + + *os << "::_duplicate (old[i]);"; + } + else + { + *os << "tao_" << pt->flat_name () << "_duplicate (old[i]);"; + } } *os << be_uidt_nl << "}" << be_uidt_nl << "else" << be_idt_nl << "{" << be_idt_nl - << "tmp[i] = old[i];" << be_uidt_nl + << "tmp[i] = old[i];" << be_uidt_nl << "}" << be_uidt << be_uidt_nl << "}" << be_uidt_nl << be_nl << "if (this->release_)" << be_idt_nl << "{" << be_idt_nl - << "delete[] old;" << be_uidt_nl + << "delete[] old;" << be_uidt_nl << "}" << be_uidt << be_uidt_nl << "}" << be_nl << "this->buffer_ = tmp;" << be_uidt_nl @@ -187,7 +198,13 @@ be_visitor_sequence_cs::gen_unbounded_obj_sequence (be_sequence *node) << "for (CORBA::ULong i = 0; i < this->length_; ++i)" << be_idt_nl << "{" << be_idt_nl; - if (bt_is_defined) + if (is_valuetype) + { + *os << "if (tmp[i] != 0)" << be_idt_nl + << "tmp[i]->_remove_ref ();" << be_uidt_nl + << "tmp[i] = 0;"; + } + else if (bt_is_defined) { *os << "CORBA::release (tmp[i]);" << be_nl << "tmp[i] = "; @@ -219,7 +236,7 @@ be_visitor_sequence_cs::gen_unbounded_obj_sequence (be_sequence *node) // shrink_buffer. *os << "void" << be_nl - << full_class_name + << full_class_name << "::_shrink_buffer (CORBA::ULong nl, CORBA::ULong ol)" << be_nl << "{" << be_idt_nl; @@ -233,7 +250,13 @@ be_visitor_sequence_cs::gen_unbounded_obj_sequence (be_sequence *node) << "for (CORBA::ULong i = nl; i < ol; ++i)" << be_idt_nl << "{" << be_idt_nl; - if (bt_is_defined) + if (is_valuetype) + { + *os << "if (tmp[i] != 0)" << be_idt_nl + << "tmp[i]->_remove_ref ();" << be_uidt_nl + << "tmp[i] = 0;"; + } + else if (bt_is_defined) { *os << "CORBA::release (tmp[i]);" << be_nl << "tmp[i] = "; @@ -256,19 +279,20 @@ be_visitor_sequence_cs::gen_unbounded_obj_sequence (be_sequence *node) be_predefined_type *prim = be_predefined_type::narrow_from_decl (pt); - if ((pt->node_type () != AST_Decl::NT_pre_defined) || + if (! is_valuetype + && (pt->node_type () != AST_Decl::NT_pre_defined) || (prim && (prim->pt () == AST_PredefinedType::PT_pseudo) && (!ACE_OS::strcmp (prim->local_name ()->get_string (), "Object")))) { // Pseudo objects do not require these methods. *os << "void " << be_nl << full_class_name << "::_downcast (" << be_idt << be_idt_nl - << "void* target," << be_nl - << "CORBA_Object *src," << be_nl - << "CORBA_Environment &ACE_TRY_ENV" - << be_uidt_nl - << ")" << be_uidt_nl - << "{" << be_idt_nl; + << "void* target," << be_nl + << "CORBA_Object *src," << be_nl + << "CORBA_Environment &ACE_TRY_ENV" + << be_uidt_nl + << ")" << be_uidt_nl + << "{" << be_idt_nl; bt->accept (visitor); @@ -277,7 +301,7 @@ be_visitor_sequence_cs::gen_unbounded_obj_sequence (be_sequence *node) bt->accept (visitor); *os << "**, target);" << be_nl - << "*tmp = "; + << "*tmp = "; if (bt_is_defined) { @@ -287,17 +311,17 @@ be_visitor_sequence_cs::gen_unbounded_obj_sequence (be_sequence *node) } else { - *os << "tao_" << pt->flat_name () + *os << "tao_" << pt->flat_name () << "_narrow (src, ACE_TRY_ENV);"; } *os << be_nl << "ACE_CHECK;" << be_uidt_nl - << "}\n" << be_nl; + << "}\n" << be_nl; *os << "CORBA_Object*" << be_nl << full_class_name << "::_upcast (void *src) const" << be_nl - << "{" << be_idt_nl; + << "{" << be_idt_nl; if (bt_is_defined) { @@ -312,11 +336,11 @@ be_visitor_sequence_cs::gen_unbounded_obj_sequence (be_sequence *node) } else { - *os << "return tao_" << pt->flat_name () << "_upcast (src);"; + *os << "return tao_" << pt->flat_name () << "_upcast (src);"; } *os << be_uidt_nl - << "}" << be_nl; + << "}" << be_nl; } os->gen_endif (); diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_base.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_base.cpp index 495d82eac43..78a915512b7 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_base.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_base.cpp @@ -18,9 +18,9 @@ // // ============================================================================ -#include "idl.h" -#include "idl_extern.h" -#include "be.h" +#include "idl.h" +#include "idl_extern.h" +#include "be.h" #include "be_visitor_sequence.h" @@ -69,7 +69,7 @@ be_visitor_sequence_base::visit_node (be_type *node) if (this->ctx_->state () == TAO_CodeGen::TAO_SEQUENCE_BASE_CH) { - if (this->ctx_->sub_state () + if (this->ctx_->sub_state () == TAO_CodeGen::TAO_ARRAY_SEQ_CH_TEMPLATE_VAR) { *os << bt->nested_type_name (this->ctx_->scope (), "_var"); @@ -96,7 +96,7 @@ be_visitor_sequence_base::visit_sequence (be_sequence *node) int be_visitor_sequence_base::visit_interface (be_interface *node) { - + return this->visit_node (node); } @@ -108,6 +108,20 @@ be_visitor_sequence_base::visit_interface_fwd (be_interface_fwd *node) } int +be_visitor_sequence_base::visit_valuetype (be_valuetype *node) +{ + + return this->visit_node (node); + +} + +int +be_visitor_sequence_base::visit_valuetype_fwd (be_valuetype_fwd *node) +{ + return this->visit_node (node); +} + +int be_visitor_sequence_base::visit_string (be_string *) { // NO-OP, we have ad-hoc classes from strings. @@ -206,7 +220,7 @@ be_visitor_sequence_base_template_args::visit_interface (be_interface *node) *os << bt->name () << "_var"; } - return 0; + return 0; } int @@ -237,7 +251,21 @@ be_visitor_sequence_base_template_args::visit_interface_fwd ( *os << bt->name () << "_var"; } - return 0; + return 0; +} + +int +be_visitor_sequence_base_template_args::visit_valuetype (be_valuetype *node) +{ + return this->visit_interface (node); +} + +int +be_visitor_sequence_base_template_args::visit_valuetype_fwd ( + be_valuetype_fwd *node + ) +{ + return this->visit_interface_fwd (node); } int @@ -248,11 +276,11 @@ be_visitor_sequence_base_template_args::visit_predefined_type ( TAO_OutStream *os = this->ctx_->stream (); *os << node->name (); - if (beseq_->managed_type () == be_sequence::MNG_PSEUDO + if (beseq_->managed_type () == be_sequence::MNG_PSEUDO || beseq_->managed_type () == be_sequence::MNG_OBJREF) { *os << "," << node->name () << "_var"; } - + return 0; } diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp index a516a5ab189..058334f1431 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp @@ -90,6 +90,17 @@ be_visitor_sequence_ch::gen_base_sequence_class (be_sequence *node) } break; + case be_sequence::MNG_VALUE: + if (node->unbounded ()) + { + *os << "TAO_Unbounded_Valuetype_Sequence<"; + } + else + { + *os << "TAO_Bounded_Valuetype_Sequence<"; + } + + break; case be_sequence::MNG_STRING: if (node->unbounded ()) { @@ -144,7 +155,7 @@ be_visitor_sequence_ch::gen_base_sequence_class (be_sequence *node) be_visitor_context (*this->ctx_), 0); - be_visitor_sequence_base_template_args visitor (ctx, + be_visitor_sequence_base_template_args visitor (ctx, node); ctx->state (TAO_CodeGen::TAO_SEQUENCE_BASE_CH); @@ -158,7 +169,7 @@ be_visitor_sequence_ch::gen_base_sequence_class (be_sequence *node) -1); } - // Find out if the sequence is of a managed type and if + // Find out if the sequence is of a managed type and if // it is bounded or not. if (node->managed_type () == be_sequence::MNG_STRING || node->managed_type () == be_sequence::MNG_WSTRING) @@ -225,6 +236,7 @@ be_visitor_sequence_ch::instantiate_sequence (be_sequence *node) { case be_sequence::MNG_PSEUDO: case be_sequence::MNG_OBJREF: + case be_sequence::MNG_VALUE: if (node->unbounded ()) { this->gen_unbounded_obj_sequence (node); @@ -251,41 +263,41 @@ be_visitor_sequence_ch::instantiate_sequence (be_sequence *node) break; default: // Not a managed type. if (node->unbounded ()) - { - // TAO provides extensions for octet sequences, first find out - // if the base type is an octet (or an alias for octet) - be_predefined_type *predef = 0; - - if (bt->base_node_type () == AST_Type::NT_pre_defined) - { - be_typedef* alias = - be_typedef::narrow_from_decl (bt); - - if (alias == 0) - { - predef = - be_predefined_type::narrow_from_decl (bt); - } - else - { - predef = + { + // TAO provides extensions for octet sequences, first find out + // if the base type is an octet (or an alias for octet) + be_predefined_type *predef = 0; + + if (bt->base_node_type () == AST_Type::NT_pre_defined) + { + be_typedef* alias = + be_typedef::narrow_from_decl (bt); + + if (alias == 0) + { + predef = + be_predefined_type::narrow_from_decl (bt); + } + else + { + predef = be_predefined_type::narrow_from_decl ( alias->primitive_base_type () ); - } - } - if (predef != 0) - { - if (predef->pt() != AST_PredefinedType::PT_octet) + } + } + if (predef != 0) + { + if (predef->pt() != AST_PredefinedType::PT_octet) { - this->gen_unbounded_sequence (node); + this->gen_unbounded_sequence (node); } - } - else + } + else { - this->gen_unbounded_sequence (node); + this->gen_unbounded_sequence (node); } - } + } else { this->gen_bounded_sequence (node); @@ -375,7 +387,7 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_sequence_ch::" "visit_sequence - " - "codegen for base sequence class\n"), + "codegen for base sequence class\n"), -1); } @@ -410,7 +422,7 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) ACE_ERROR_RETURN ((LM_ERROR, "(%N:%l) be_visitor_sequence_ch::" "visit_sequence - " - "Bad visitor\n"), + "Bad visitor\n"), -1); } @@ -437,7 +449,7 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) // but we must protect against certain versions of g++. if (this->ctx_->tdef () != 0) { - *os << "\n#if !defined(__GNUC__) || !defined (ACE_HAS_GNUG_PRE_2_8)" + *os << "\n#if !defined(__GNUC__) || !defined (ACE_HAS_GNUG_PRE_2_8)" << be_nl; *os << "typedef " << node->local_name () << "_var _var_type;\n" << "#endif /* ! __GNUC__ || g++ >= 2.8 */" << be_nl << be_nl; @@ -450,19 +462,19 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) if (bt->base_node_type () == AST_Type::NT_pre_defined) { be_typedef* alias = - be_typedef::narrow_from_decl (bt); + be_typedef::narrow_from_decl (bt); if (alias == 0) - { - predef = be_predefined_type::narrow_from_decl (bt); - } + { + predef = be_predefined_type::narrow_from_decl (bt); + } else - { - predef = + { + predef = be_predefined_type::narrow_from_decl ( alias->primitive_base_type () ); - } + } } // Now generate the extension... @@ -470,13 +482,13 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) && node->unbounded ()) { *os << "\n#if (TAO_NO_COPY_OCTET_SEQUENCES == 1)" << be_nl - << node->local_name () << " (" << be_idt << be_idt_nl - << "CORBA::ULong length," << be_nl - << "const ACE_Message_Block* mb" << be_uidt_nl - << ")" << be_uidt_nl - << " : " << node->instance_name () - << " (length, mb) {}" << "\n" - << "#endif /* TAO_NO_COPY_OCTET_SEQUENCE == 1 */" << be_nl; + << node->local_name () << " (" << be_idt << be_idt_nl + << "CORBA::ULong length," << be_nl + << "const ACE_Message_Block* mb" << be_uidt_nl + << ")" << be_uidt_nl + << " : " << node->instance_name () + << " (length, mb) {}" << "\n" + << "#endif /* TAO_NO_COPY_OCTET_SEQUENCE == 1 */" << be_nl; } *os << be_uidt_nl << "};" << be_nl; @@ -585,7 +597,7 @@ be_visitor_sequence_ch::gen_var_defn (be_sequence *node) *os << be_nl; // Assignment operator from a pointer. - *os << namebuf << " &operator= (" + *os << namebuf << " &operator= (" << node->local_name () << " *);" << be_nl; // Assignment from _var. @@ -601,7 +613,7 @@ be_visitor_sequence_ch::gen_var_defn (be_sequence *node) // Arrow operator. *os << node->local_name () << " *operator-> (void);" << be_nl; - *os << "const " << node->local_name () + *os << "const " << node->local_name () << " *operator-> (void) const;" << be_nl; *os << be_nl; @@ -666,7 +678,7 @@ be_visitor_sequence_ch::gen_var_defn (be_sequence *node) pdt = p->pt (); } - // @@ (JP) Problems with constant instantiations of TAO_Object_Manager, + // @@ (JP) Problems with constant instantiations of TAO_Object_Manager, // TAO_Pseudo_Object_Manager, TAO_SeqElem_WString_Manager and // TAO_SeqElem_String_Manager make these impossible right now [BUGID:676]. if (nt != AST_Decl::NT_string @@ -703,7 +715,7 @@ be_visitor_sequence_ch::gen_var_defn (be_sequence *node) *os << node->local_name () << " *&out (void);" << be_nl; *os << node->local_name () << " *_retn (void);" << be_nl; - // Generate an additional member function that + // Generate an additional member function that // returns the underlying pointer. *os << node->local_name () << " *ptr (void) const;" << be_uidt_nl << be_nl; @@ -724,11 +736,11 @@ be_visitor_sequence_ch::gen_out_defn (be_sequence *node) char namebuf [NAMEBUFSIZE]; be_type *bt = 0; - ACE_OS::memset (namebuf, - '\0', + ACE_OS::memset (namebuf, + '\0', NAMEBUFSIZE); - ACE_OS::sprintf (namebuf, - "%s_out", + ACE_OS::sprintf (namebuf, + "%s_out", node->local_name ()->get_string ()); // Retrieve base type. @@ -808,7 +820,7 @@ be_visitor_sequence_ch::gen_out_defn (be_sequence *node) *os << node->local_name () << " *&ptr_;" << be_nl; *os << "// Assignment from T_var not allowed." << be_nl; - *os << "void operator= (const " << node->local_name () + *os << "void operator= (const " << node->local_name () << "_var &);" << be_uidt_nl; *os << "};" << be_nl << be_nl; diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ci.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ci.cpp index 151610e5c37..59a8b83f105 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ci.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ci.cpp @@ -114,6 +114,7 @@ be_visitor_sequence_ci::instantiate_sequence (be_sequence *node) { case be_sequence::MNG_PSEUDO: case be_sequence::MNG_OBJREF: + case be_sequence::MNG_VALUE: if (node->unbounded ()) { this->gen_unbounded_obj_sequence (node); @@ -140,42 +141,42 @@ be_visitor_sequence_ci::instantiate_sequence (be_sequence *node) break; default: // Not a managed type. if (node->unbounded ()) - { - // TAO provides extensions for octet sequences, first find out - // if the base type is an octet (or an alias for octet). - be_predefined_type *predef = 0; - - if (bt->base_node_type () == AST_Type::NT_pre_defined) - { - be_typedef* alias = - be_typedef::narrow_from_decl (bt); - - if (alias == 0) - { - predef = - be_predefined_type::narrow_from_decl (bt); - } - else - { - predef = + { + // TAO provides extensions for octet sequences, first find out + // if the base type is an octet (or an alias for octet). + be_predefined_type *predef = 0; + + if (bt->base_node_type () == AST_Type::NT_pre_defined) + { + be_typedef* alias = + be_typedef::narrow_from_decl (bt); + + if (alias == 0) + { + predef = + be_predefined_type::narrow_from_decl (bt); + } + else + { + predef = be_predefined_type::narrow_from_decl ( alias->primitive_base_type () ); - } - } + } + } - if (predef != 0) - { - if (predef->pt() != AST_PredefinedType::PT_octet) + if (predef != 0) + { + if (predef->pt() != AST_PredefinedType::PT_octet) { - this->gen_unbounded_sequence (node); + this->gen_unbounded_sequence (node); } - } - else + } + else { - this->gen_unbounded_sequence (node); + this->gen_unbounded_sequence (node); } - } + } else { this->gen_bounded_sequence (node); @@ -194,20 +195,20 @@ be_visitor_sequence_ci::gen_var_impl (be_sequence *node) char fname [NAMEBUFSIZE]; char lname [NAMEBUFSIZE]; - ACE_OS::memset (fname, - '\0', + ACE_OS::memset (fname, + '\0', NAMEBUFSIZE); - ACE_OS::sprintf (fname, - "%s_var", + ACE_OS::sprintf (fname, + "%s_var", node->full_name ()); - ACE_OS::memset (lname, - '\0', + ACE_OS::memset (lname, + '\0', NAMEBUFSIZE); - ACE_OS::sprintf (lname, - "%s_var", + ACE_OS::sprintf (lname, + "%s_var", node->local_name ()->get_string ()); // Retrieve base type. @@ -239,18 +240,18 @@ be_visitor_sequence_ci::gen_var_impl (be_sequence *node) // Constuctorr from a _ptr. *os << "ACE_INLINE" << be_nl; - *os << fname << "::" << lname << " (" << node->local_name () + *os << fname << "::" << lname << " (" << node->local_name () << " *p)" << be_nl; *os << " : ptr_ (p)" << be_nl; *os << "{}" << be_nl << be_nl; // Copy constructor. *os << "ACE_INLINE" << be_nl; - *os << fname << "::" << lname << " (const ::" << fname + *os << fname << "::" << lname << " (const ::" << fname << " &p) // copy constructor" << be_nl; *os << "{" << be_idt_nl; *os << "if (p.ptr_)" << be_idt_nl; - *os << "ACE_NEW (this->ptr_, ::" << node->name () + *os << "ACE_NEW (this->ptr_, ::" << node->name () << " (*p.ptr_));" << be_uidt_nl; *os << "else" << be_nl; *os << " this->ptr_ = 0;" << be_uidt_nl; @@ -261,10 +262,10 @@ be_visitor_sequence_ci::gen_var_impl (be_sequence *node) { *os << "// fixed-size base types only" << be_nl; *os << "ACE_INLINE" << be_nl; - *os << fname << "::" << lname << " (const ::" + *os << fname << "::" << lname << " (const ::" << node->name () << " &p)" << be_nl; *os << "{" << be_idt_nl; - *os << "ACE_NEW (this->ptr_, ::" << node->name () + *os << "ACE_NEW (this->ptr_, ::" << node->name () << " (p));" << be_uidt_nl; *os << "}" << be_nl << be_nl; } @@ -278,7 +279,7 @@ be_visitor_sequence_ci::gen_var_impl (be_sequence *node) // Assignment operator from a pointer. *os << "ACE_INLINE " << fname << " &" << be_nl; - *os << fname << "::operator= (" << node->local_name () + *os << fname << "::operator= (" << node->local_name () << " *p)" << be_nl; *os << "{" << be_idt_nl; *os << "delete this->ptr_;" << be_nl; @@ -301,7 +302,7 @@ be_visitor_sequence_ci::gen_var_impl (be_sequence *node) << "else" << be_idt_nl << "{" << be_idt_nl << node->local_name () << " *deep_copy =" << be_idt_nl - << "new " << node->local_name () << " (*p.ptr_);" + << "new " << node->local_name () << " (*p.ptr_);" << be_uidt_nl << be_nl << "if (deep_copy != 0)" << be_idt_nl << "{" << be_idt_nl @@ -320,13 +321,13 @@ be_visitor_sequence_ci::gen_var_impl (be_sequence *node) { *os << "// fixed-size types only" << be_nl; *os << "ACE_INLINE ::" << fname << " &" << be_nl; - *os << fname << "::operator= (const ::" << node->name () + *os << fname << "::operator= (const ::" << node->name () << " &p)" << be_nl; *os << "{" << be_idt_nl; *os << "if (this->ptr_ != &p)" << be_nl; *os << "{" << be_idt_nl; *os << "delete this->ptr_;" << be_nl; - *os << "ACE_NEW_RETURN (this->ptr_, ::" + *os << "ACE_NEW_RETURN (this->ptr_, ::" << node->name () << " (p), *this);" << be_uidt_nl; *os << "}" << be_nl; *os << "return *this;" << be_uidt_nl; @@ -348,21 +349,21 @@ be_visitor_sequence_ci::gen_var_impl (be_sequence *node) // Other extra methods - 3 cast operator (). *os << "ACE_INLINE " << be_nl; - *os << fname << "::operator const ::" << node->name () + *os << fname << "::operator const ::" << node->name () << " &() const // cast" << be_nl; *os << "{" << be_idt_nl; *os << "return *this->ptr_;" << be_uidt_nl; *os << "}" << be_nl << be_nl; *os << "ACE_INLINE " << be_nl; - *os << fname << "::operator ::" << node->name () + *os << fname << "::operator ::" << node->name () << " &() // cast " << be_nl; *os << "{" << be_idt_nl; *os << "return *this->ptr_;" << be_uidt_nl; *os << "}" << be_nl << be_nl; *os << "ACE_INLINE " << be_nl; - *os << fname << "::operator ::" << node->name () + *os << fname << "::operator ::" << node->name () << " &() const // cast " << be_nl; *os << "{" << be_idt_nl; *os << "return *this->ptr_;" << be_uidt_nl; @@ -373,7 +374,7 @@ be_visitor_sequence_ci::gen_var_impl (be_sequence *node) { *os << "// variable-size types only" << be_nl; *os << "ACE_INLINE" << be_nl; - *os << fname << "::operator ::" << node->name () + *os << fname << "::operator ::" << node->name () << " *&() // cast " << be_nl; *os << "{" << be_idt_nl; *os << "return this->ptr_;" << be_uidt_nl; @@ -434,7 +435,7 @@ be_visitor_sequence_ci::gen_var_impl (be_sequence *node) pdt = p->pt (); } - // @@ (JP) Problems with constant instantiations of TAO_Object_Manager, + // @@ (JP) Problems with constant instantiations of TAO_Object_Manager, // TAO_Pseudo_Object_Manager, TAO_SeqElem_WString_Manager and // TAO_SeqElem_String_Manager make these impossible right now [BUGID:676]. if (nt != AST_Decl::NT_string @@ -461,7 +462,7 @@ be_visitor_sequence_ci::gen_var_impl (be_sequence *node) *os << "{" << be_idt_nl; *os << "return ACE_const_cast (const "; - + if (bt->accept (visitor) == -1) { ACE_ERROR_RETURN ((LM_ERROR, @@ -555,7 +556,7 @@ be_visitor_sequence_ci::gen_out_impl (be_sequence *node) // Constuctorr from a pointer. *os << "ACE_INLINE" << be_nl; - *os << fname << "::" << lname << " (" << node->local_name () + *os << fname << "::" << lname << " (" << node->local_name () << " *&p)" << be_nl; *os << " : ptr_ (p)" << be_nl; *os << "{" << be_idt_nl; @@ -564,7 +565,7 @@ be_visitor_sequence_ci::gen_out_impl (be_sequence *node) // Constructor from _var &. *os << "ACE_INLINE" << be_nl; - *os << fname << "::" << lname << " (" << node->local_name () + *os << fname << "::" << lname << " (" << node->local_name () << "_var &p) // constructor from _var" << be_nl; *os << " : ptr_ (p.out ())" << be_nl; *os << "{" << be_idt_nl; @@ -574,18 +575,18 @@ be_visitor_sequence_ci::gen_out_impl (be_sequence *node) // Copy constructor. *os << "ACE_INLINE" << be_nl; - *os << fname << "::" << lname << " (const ::" << fname + *os << fname << "::" << lname << " (const ::" << fname << " &p) // copy constructor" << be_nl; - *os << " : ptr_ (ACE_const_cast (" << lname + *os << " : ptr_ (ACE_const_cast (" << lname << "&, p).ptr_)" << be_nl; *os << "{}" << be_nl << be_nl; // Assignment operator from _out &. *os << "ACE_INLINE ::" << fname << " &" << be_nl; - *os << fname << "::operator= (const ::" << fname + *os << fname << "::operator= (const ::" << fname << " &p)" << be_nl; *os << "{" << be_idt_nl; - *os << "this->ptr_ = ACE_const_cast (" << lname + *os << "this->ptr_ = ACE_const_cast (" << lname << "&, p).ptr_;" << be_nl; *os << "return *this;" << be_uidt_nl; *os << "}" << be_nl << be_nl; @@ -594,7 +595,7 @@ be_visitor_sequence_ci::gen_out_impl (be_sequence *node) // Assignment operator from pointer. *os << "ACE_INLINE ::" << fname << " &" << be_nl; - *os << fname << "::operator= (" << node->local_name () + *os << fname << "::operator= (" << node->local_name () << " *p)" << be_nl; *os << "{" << be_idt_nl; *os << "this->ptr_ = p;" << be_nl; @@ -603,7 +604,7 @@ be_visitor_sequence_ci::gen_out_impl (be_sequence *node) // Other extra methods - cast operator (). *os << "ACE_INLINE " << be_nl; - *os << fname << "::operator ::" << node->name () + *os << fname << "::operator ::" << node->name () << " *&() // cast" << be_nl; *os << "{" << be_idt_nl; *os << "return this->ptr_;" << be_uidt_nl; diff --git a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp index ba0e7ecb4e6..1625b56b86a 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp @@ -18,9 +18,9 @@ // // ============================================================================ -#include "idl.h" -#include "idl_extern.h" -#include "be.h" +#include "idl.h" +#include "idl_extern.h" +#include "be.h" #include "be_visitor_sequence.h" @@ -83,6 +83,12 @@ be_visitor_sequence_cs::gen_base_sequence_class (be_sequence *node) else *os << "TAO_Bounded_Pseudo_Sequence<"; break; + case be_sequence::MNG_VALUE: + if (node->unbounded ()) + *os << "TAO_Unbounded_Valuetype_Sequence<"; + else + *os << "TAO_Bounded_Valuetype_Sequence<"; + break; case be_sequence::MNG_STRING: if (node->unbounded ()) *os << "TAO_Unbounded_String_Sequence"; @@ -341,6 +347,7 @@ be_visitor_sequence_cs::instantiate_sequence (be_sequence *node) { case be_sequence::MNG_PSEUDO: case be_sequence::MNG_OBJREF: + case be_sequence::MNG_VALUE: if (node->unbounded ()) this->gen_unbounded_obj_sequence (node); else @@ -360,40 +367,40 @@ be_visitor_sequence_cs::instantiate_sequence (be_sequence *node) break; default: // not a managed type if (node->unbounded ()) - { - // TAO provides extensions for octet sequences, first find out - // if the base type is an octet (or an alias for octet) - be_predefined_type *predef = 0; - if (bt->base_node_type () == AST_Type::NT_pre_defined) - { - be_typedef* alias = - be_typedef::narrow_from_decl (bt); - - if (alias == 0) - { - predef = - be_predefined_type::narrow_from_decl (bt); - } - else - { - predef = + { + // TAO provides extensions for octet sequences, first find out + // if the base type is an octet (or an alias for octet) + be_predefined_type *predef = 0; + if (bt->base_node_type () == AST_Type::NT_pre_defined) + { + be_typedef* alias = + be_typedef::narrow_from_decl (bt); + + if (alias == 0) + { + predef = + be_predefined_type::narrow_from_decl (bt); + } + else + { + predef = be_predefined_type::narrow_from_decl ( alias->primitive_base_type () ); - } - } - if (predef != 0) - { - if (predef->pt() != AST_PredefinedType::PT_octet) + } + } + if (predef != 0) + { + if (predef->pt() != AST_PredefinedType::PT_octet) { - this->gen_unbounded_sequence (node); + this->gen_unbounded_sequence (node); } - } - else + } + else { - this->gen_unbounded_sequence (node); + this->gen_unbounded_sequence (node); } - } + } else { this->gen_bounded_sequence (node); diff --git a/TAO/TAO_IDL/be_include/be_sequence.h b/TAO/TAO_IDL/be_include/be_sequence.h index caef7cdfed1..abf916c0b56 100644 --- a/TAO/TAO_IDL/be_include/be_sequence.h +++ b/TAO/TAO_IDL/be_include/be_sequence.h @@ -48,6 +48,7 @@ public: MNG_STRING, MNG_WSTRING, MNG_OBJREF, + MNG_VALUE, MNG_PSEUDO }; diff --git a/TAO/TAO_IDL/be_include/be_visitor_sequence/buffer_type.h b/TAO/TAO_IDL/be_include/be_visitor_sequence/buffer_type.h index 1fe1880f3dd..523f903bc98 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_sequence/buffer_type.h +++ b/TAO/TAO_IDL/be_include/be_visitor_sequence/buffer_type.h @@ -45,6 +45,8 @@ public: virtual int visit_predefined_type (be_predefined_type *node); virtual int visit_interface (be_interface *node); virtual int visit_interface_fwd (be_interface_fwd *node); + virtual int visit_valuetype (be_valuetype *node); + virtual int visit_valuetype_fwd (be_valuetype_fwd *node); virtual int visit_structure (be_structure *node); virtual int visit_enum (be_enum *node); virtual int visit_exception (be_exception *node); diff --git a/TAO/TAO_IDL/be_include/be_visitor_sequence/cdr_op_cs.h b/TAO/TAO_IDL/be_include/be_visitor_sequence/cdr_op_cs.h index 1a36b175013..b4be5b420c9 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_sequence/cdr_op_cs.h +++ b/TAO/TAO_IDL/be_include/be_visitor_sequence/cdr_op_cs.h @@ -61,6 +61,12 @@ public: virtual int visit_interface_fwd (be_interface_fwd *node); // visit an interface forward node + virtual int visit_valuetype (be_valuetype *node); + // visit an interface + + virtual int visit_valuetype_fwd (be_valuetype_fwd *node); + // visit an interface forward node + virtual int visit_predefined_type (be_predefined_type *node); // visit a predefined type node diff --git a/TAO/TAO_IDL/be_include/be_visitor_sequence/elemtype.h b/TAO/TAO_IDL/be_include/be_visitor_sequence/elemtype.h index c307db5fa6e..993a9894fff 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_sequence/elemtype.h +++ b/TAO/TAO_IDL/be_include/be_visitor_sequence/elemtype.h @@ -48,6 +48,8 @@ public: virtual int visit_predefined_type (be_predefined_type *node); virtual int visit_interface (be_interface *node); virtual int visit_interface_fwd (be_interface_fwd *node); + virtual int visit_valuetype (be_valuetype *node); + virtual int visit_valuetype_fwd (be_valuetype_fwd *node); virtual int visit_structure (be_structure *node); virtual int visit_enum (be_enum *node); virtual int visit_exception (be_exception *node); diff --git a/TAO/TAO_IDL/be_include/be_visitor_sequence/sequence_base.h b/TAO/TAO_IDL/be_include/be_visitor_sequence/sequence_base.h index 710e595aa6d..71bca6b32b2 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_sequence/sequence_base.h +++ b/TAO/TAO_IDL/be_include/be_visitor_sequence/sequence_base.h @@ -51,6 +51,8 @@ public: virtual int visit_predefined_type (be_predefined_type *node); virtual int visit_interface (be_interface *node); virtual int visit_interface_fwd (be_interface_fwd *node); + virtual int visit_valuetype (be_valuetype *node); + virtual int visit_valuetype_fwd (be_valuetype_fwd *node); virtual int visit_structure (be_structure *node); virtual int visit_enum (be_enum *node); virtual int visit_exception (be_exception *node); @@ -71,7 +73,7 @@ class be_visitor_sequence_base_template_args: public be_visitor_sequence_base // // =TITLE // be_visitor_sequnce_base_template_args - // + // // =Description // This is a derived class just used to override the method // visit_interface that generates the arguments for the @@ -81,7 +83,7 @@ class be_visitor_sequence_base_template_args: public be_visitor_sequence_base public: be_visitor_sequence_base_template_args (be_visitor_context *ctx, be_sequence *node ); - + ~be_visitor_sequence_base_template_args (void); //Dtor @@ -90,6 +92,10 @@ public: virtual int visit_interface_fwd (be_interface_fwd *node); + virtual int visit_valuetype (be_valuetype *node); + + virtual int visit_valuetype_fwd (be_valuetype_fwd *node); + virtual int visit_predefined_type (be_predefined_type *node); private: be_sequence *beseq_; |