diff options
author | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-03-27 00:25:48 +0000 |
---|---|---|
committer | parsons <parsons@ae88bc3d-4319-0410-8dbf-d08b4c9d3795> | 2003-03-27 00:25:48 +0000 |
commit | d7e0d09feca5365d662845bd703c0558dd8f91d2 (patch) | |
tree | 932a1e6f2ce1b7199a8b59c1b56eaba834a2c9c0 | |
parent | d484bdaac984617a1835c7a749cd721cb4a8a648 (diff) | |
download | ATCD-d7e0d09feca5365d662845bd703c0558dd8f91d2.tar.gz |
ChangeLogTag: Wed Mar 26 18:23:46 2003 Jeff Parsons <j.parsons@vanderbilt.edu>
41 files changed, 802 insertions, 1584 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog index 7f1629e5944..ad7c41d2d31 100644 --- a/TAO/ChangeLog +++ b/TAO/ChangeLog @@ -1,3 +1,49 @@ +Wed Mar 26 18:23:46 2003 Jeff Parsons <j.parsons@vanderbilt.edu> + + * TAO_IDL/be/be_component.cpp: + * TAO_IDL/be/be_helper.cpp: + * TAO_IDL/be/be_interface.cpp: + * TAO_IDL/be/be_structure.cpp: + * TAO_IDL/be/be_type.cpp: + * TAO_IDL/be/be_union.cpp: + * TAO_IDL/be/be_valuetype.cpp: + * TAO_IDL/be/be_visitor_structure_fwd.cpp: + * TAO_IDL/be/be_visitor_union_fwd.cpp: + * TAO_IDL/be/be_visitor_array/any_op_cs.cpp: + * TAO_IDL/be/be_visitor_array/array_ch.cpp: + * TAO_IDL/be/be_visitor_component/component_ch.cpp: + * TAO_IDL/be/be_visitor_enum/any_op_cs.cpp: + * TAO_IDL/be/be_visitor_exception/any_op_cs.cpp: + * TAO_IDL/be/be_visitor_interface/amh_ch.cpp: + * TAO_IDL/be/be_visitor_interface/interface_ch.cpp: + * TAO_IDL/be/be_visitor_interface_fwd/interface_fwd_ch.cpp: + * TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp: + * TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp: + * TAO_IDL/be/be_visitor_structure/structure_ch.cpp: + * TAO_IDL/be/be_visitor_structure/structure_ci.cpp: + * TAO_IDL/be/be_visitor_structure/structure_cs.cpp: + * TAO_IDL/be/be_visitor_structure_fwd/structure_fwd_ch.cpp: + * TAO_IDL/be/be_visitor_union/union_ch.cpp: + * TAO_IDL/be/be_visitor_union/union_ci.cpp: + * TAO_IDL/be/be_visitor_union/union_cs.cpp: + * TAO_IDL/be/be_visitor_union_fwd/union_fwd_ch.cpp: + * TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp: + * TAO_IDL/be/be_visitor_valuetype_fwd/valuetype_fwd_ch.cpp: + * TAO_IDL/be_include/be_component.h: + * TAO_IDL/be_include/be_helper.h: + * TAO_IDL/be_include/be_interface.h: + * TAO_IDL/be_include/be_structure.h: + * TAO_IDL/be_include/be_type.h: + * TAO_IDL/be_include/be_union.h: + * TAO_IDL/be_include/be_valuetype.h: + * tao/Sequence_T.cpp: + * tao/Sequence_T.h: + * tao/VarOut_T.h: + * tao/VarOut_T.inl: + + More changes toward code generation for _var, _out and sequence + template typedef, and conditional explicit template instantiation. + Wed Mar 26 01:06:24 2003 Jeff Parsons <j.parsons@vanderbilt.edu> * TAO_IDL/be/be_interface.cpp: diff --git a/TAO/TAO_IDL/be/be_component.cpp b/TAO/TAO_IDL/be/be_component.cpp index 164238db621..8afe77aca4b 100644 --- a/TAO/TAO_IDL/be/be_component.cpp +++ b/TAO/TAO_IDL/be/be_component.cpp @@ -73,6 +73,14 @@ be_component::~be_component (void) } void +be_component::redefine (AST_Interface *from) +{ + be_component *bc = be_component::narrow_from_decl (from); + this->var_out_seq_decls_gen_ = bc->var_out_seq_decls_gen_; + AST_Component::redefine (from); +} + +void be_component::destroy () { this->be_interface::destroy (); diff --git a/TAO/TAO_IDL/be/be_helper.cpp b/TAO/TAO_IDL/be/be_helper.cpp index 047b4d7b9e8..01c12e393b8 100644 --- a/TAO/TAO_IDL/be/be_helper.cpp +++ b/TAO/TAO_IDL/be/be_helper.cpp @@ -291,16 +291,15 @@ TAO_OutStream::gen_endif (void) int TAO_OutStream::gen_ifdef_AHETI (void) { - *this << "\n\n#if !defined (TAO_USE_SEQUENCE_TEMPLATES)"; + *this << "\n\n#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)"; return 0; } int -TAO_OutStream::gen_else_AHETI (void) +TAO_OutStream::gen_elif_AHETI (void) { - *this << "\n#else /* TAO_USE_SEQUENCE_TEMPLATES */" - << be_nl; + *this << "\n\n#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)"; return 0; } @@ -308,7 +307,7 @@ TAO_OutStream::gen_else_AHETI (void) int TAO_OutStream::gen_endif_AHETI (void) { - *this << "\n\n#endif /* !TAO_USE_SEQUENCE_TEMPLATES */ "; + *this << "\n\n#endif /* !ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */ "; return 0; } diff --git a/TAO/TAO_IDL/be/be_interface.cpp b/TAO/TAO_IDL/be/be_interface.cpp index e76bf4f69b9..a3ef97c7a71 100644 --- a/TAO/TAO_IDL/be/be_interface.cpp +++ b/TAO/TAO_IDL/be/be_interface.cpp @@ -365,7 +365,8 @@ be_interface::relative_name (const char *localname, // Am I in some kind of a multiple inheritance? -int be_interface::in_mult_inheritance (void) +int +be_interface::in_mult_inheritance (void) { if (this->in_mult_inheritance_ == -1) { @@ -386,7 +387,8 @@ int be_interface::in_mult_inheritance (void) return this->in_mult_inheritance_; } -void be_interface::in_mult_inheritance (int mi) +void +be_interface::in_mult_inheritance (int mi) { if (this->in_mult_inheritance_ == -1) { @@ -394,6 +396,14 @@ void be_interface::in_mult_inheritance (int mi) } } +void +be_interface::redefine (AST_Interface *from) +{ + be_interface *bi = be_interface::narrow_from_decl (from); + this->var_out_seq_decls_gen_ = bi->var_out_seq_decls_gen_; + AST_Interface::redefine (from); +} + // Gen copy constructors, void be_interface::gen_copy_ctors (TAO_OutStream *os) @@ -545,6 +555,11 @@ be_interface::gen_stub_ctor (TAO_OutStream *os) void be_interface:: gen_var_out_seq_decls (void) { + if (this->var_out_seq_decls_gen_ == 1) + { + return; + } + TAO_OutStream *os = tao_cg->client_header (); *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl @@ -585,6 +600,8 @@ be_interface:: gen_var_out_seq_decls (void) << "static CORBA::Object_ptr tao_upcast (void *);" << be_uidt_nl << "};"; } + + this->var_out_seq_decls_gen_ = 1; } // **************************************************************** @@ -1995,18 +2012,6 @@ be_interface::has_mixed_parentage (void) return this->has_mixed_parentage_; } -int -be_interface::var_out_seq_decls_gen (void) const -{ - return this->var_out_seq_decls_gen_; -} - -void -be_interface::var_out_seq_decls_gen (int val) -{ - this->var_out_seq_decls_gen_ = val; -} - const char * be_interface::base_proxy_impl_name (void) { diff --git a/TAO/TAO_IDL/be/be_structure.cpp b/TAO/TAO_IDL/be/be_structure.cpp index c266c13a18b..2704496dfc9 100644 --- a/TAO/TAO_IDL/be/be_structure.cpp +++ b/TAO/TAO_IDL/be/be_structure.cpp @@ -47,558 +47,12 @@ be_structure::be_structure (UTL_ScopedName *n, { } -// Generate the _var definition for ourself. -int -be_structure::gen_var_defn (char *) -{ - char namebuf [NAMEBUFSIZE]; - - ACE_OS::memset (namebuf, - '\0', - NAMEBUFSIZE); - - ACE_OS::sprintf (namebuf, - "%s_var", - this->local_name ()->get_string ()); - - TAO_OutStream *ch = tao_cg->client_header (); - - // Generate the var definition (always in the client header). - // Depending upon the data type, there are some differences which - // we account for here. - - *ch << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl; - - // Start with whatever was our current indent level. - *ch << "class " << be_global->stub_export_macro () - << " " << namebuf << be_nl; - *ch << "{" << be_nl; - *ch << "public:" << be_idt_nl; - - // Default constructor. - *ch << namebuf << " (void);" << be_nl; - - // Constructor. - *ch << namebuf << " (" << this->local_name () << " *);" << be_nl; - - // Copy constructor. - *ch << namebuf << " (const " << namebuf << " &);" << be_nl; - - // Fixed-size types only. - if (this->size_type () == AST_Type::FIXED) - { - *ch << "// Fixed-size types only." << be_nl; - *ch << namebuf << " (const " << this->local_name () - << " &);" << be_nl; - } - - // Destructor. - *ch << "~" << namebuf << " (void);" << be_nl; - *ch << be_nl; - - // Assignment operator from a pointer. - *ch << namebuf << " &operator= (" << this->local_name () - << " *);" << be_nl; - - // Assignment from _var. - *ch << namebuf << " &operator= (const " << namebuf << " &);"; - - // Fixed-size types only. - if (this->size_type () == AST_Type::FIXED) - { - *ch << be_nl << be_nl << "// Fixed-size types only." << be_nl; - *ch << namebuf << " &operator= (const " << this->local_name () - << " &);" << be_nl; - } - - // Arrow operator. - *ch << be_nl << this->local_name () << " *operator-> (void);" << be_nl; - *ch << "const " << this->local_name () - << " *operator-> (void) const;" << be_nl << be_nl; - - // Other extra types (cast operators, [] operator, and others). - *ch << "operator const " << this->local_name () << " &() const;" << be_nl; - *ch << "operator " << this->local_name () << " &();" << be_nl; - *ch << "operator " << this->local_name () << " &() const;"; - - if (this->size_type () == AST_Type::VARIABLE) - { - *ch << be_nl << be_nl - << "// Variable-size types only." << be_nl; - *ch << "operator " << this->local_name () - << " *&();"; - } - - *ch << be_nl << be_nl; - *ch << "// in, inout, out, _retn " << be_nl; - - // The return types of in, out, inout, and _retn are based on the - // parameter passing rules and the base type. - if (this->size_type () == AST_Type::FIXED) - { - *ch << "const " << this->local_name () << " &in (void) const;" << be_nl; - *ch << this->local_name () << " &inout (void);" << be_nl; - *ch << this->local_name () << " &out (void);" << be_nl; - *ch << this->local_name () << " _retn (void);" << be_nl; - } - else - { - *ch << "const " << this->local_name () << " &in (void) const;" << be_nl; - *ch << this->local_name () << " &inout (void);" << be_nl; - *ch << this->local_name () << " *&out (void);" << be_nl; - *ch << this->local_name () << " *_retn (void);" << be_nl; - } - - // Generate an additional member function - // that returns the underlying pointer. - *ch << this->local_name () << " *ptr (void) const;" << be_uidt_nl << be_nl; - - // Generate the private section. - *ch << "private:" << be_idt_nl; - *ch << this->local_name () << " *ptr_;" << be_uidt_nl; - *ch << "};"; - - return 0; -} - -// Implementation of the _var class, generated in the inline file. -int -be_structure::gen_var_impl (char *, - char *) -{ - TAO_OutStream *ci = 0; - TAO_NL be_nl; // end line - char fname [NAMEBUFSIZE]; - char lname [NAMEBUFSIZE]; - - ACE_OS::memset (fname, - '\0', - NAMEBUFSIZE); - - ACE_OS::sprintf (fname, - "%s_var", - this->full_name ()); - - ACE_OS::memset (lname, - '\0', - NAMEBUFSIZE); - - ACE_OS::sprintf (lname, - "%s_var", - this->local_name ()->get_string ()); - - ci = tao_cg->client_inline (); - - *ci << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl; - - *ci << "// *************************************************************" - << be_nl; - *ci << "// Inline operations for class " << fname << be_nl; - *ci << "// *************************************************************" - << be_nl << be_nl; - - // Default constructor. - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::" << lname - << " (void)" << be_nl; - *ci << " " << ": ptr_ (0)" << be_nl; - *ci << "{}" << be_nl << be_nl; - - // Constructor from a pointer. - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::" << lname << " (" << this->local_name () - << " *p)" << be_nl; - *ci << " : ptr_ (p)" << be_nl; - *ci << "{}" << be_nl << be_nl; - - // Copy constructor. - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::" << lname << " (const ::" << fname - << " &p)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "if (p.ptr_)" << be_idt_nl - << "{" << be_idt_nl; - *ci << "ACE_NEW (this->ptr_, " << "::" << this->name () - << " (*p.ptr_));" << be_uidt_nl - << "}" << be_uidt_nl; - *ci << "else" << be_idt_nl - << "{" << be_idt_nl; - *ci << "this->ptr_ = 0;" << be_uidt_nl - << "}" << be_uidt << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Fixed-size types only. - if (this->size_type () == AST_Type::FIXED) - { - *ci << "// Fixed-size types only." << be_nl; - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::" << lname << " (const " - << "::" << this->name () << " &p)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "ACE_NEW (this->ptr_, " << "::" << this->name () - << " (p));" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - } - - // Destructor. - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::~" << lname << " (void)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "delete this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Assignment operator from a pointer. - *ci << "ACE_INLINE" << be_nl - << fname << " &" << be_nl; - *ci << fname << "::operator= (" << this->local_name () - << " *_tao_struct_var)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "delete this->ptr_;" << be_nl; - *ci << "this->ptr_ = _tao_struct_var;" << be_nl; - *ci << "return *this;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Assignment operator from _var. - *ci << "ACE_INLINE" << be_nl - << "::" << fname << " &" << be_nl - << fname << "::operator= (const ::" << fname - << " &_tao_struct_var)" << be_nl - << "{" << be_idt_nl - << "if (this != &_tao_struct_var)" << be_idt_nl - << "{" << be_idt_nl - << "if (_tao_struct_var.ptr_ == 0)" << be_idt_nl - << "{" << be_idt_nl - << "delete this->ptr_;" << be_nl - << "this->ptr_ = 0;" << be_uidt_nl - << "}" << be_uidt_nl - << "else" << be_idt_nl - << "{" << be_idt_nl - << this->local_name () << " *deep_copy = 0;" << be_nl - << "ACE_NEW_RETURN (" << be_idt << be_idt_nl - << "deep_copy," << be_nl - << this->local_name () << " (*_tao_struct_var.ptr_)," << be_nl - << "*this" << be_uidt_nl - << ");" << be_uidt_nl << be_nl - << "if (deep_copy != 0)" << be_idt_nl - << "{" << be_idt_nl - << this->local_name () << " *tmp = deep_copy;" << be_nl - << "deep_copy = this->ptr_;" << be_nl - << "this->ptr_ = tmp;" << be_nl - << "delete deep_copy;" << be_uidt_nl - << "}" << be_uidt << be_uidt_nl - << "}" << be_uidt << be_uidt_nl - << "}" << be_uidt_nl << be_nl - << "return *this;" << be_uidt_nl - << "}" << be_nl << be_nl; - - // Fixed-size types only. - if (this->size_type () == AST_Type::FIXED) - { - *ci << "// fixed-size types only" << be_nl; - *ci << "ACE_INLINE " << fname << " &" << be_nl; - *ci << fname << "::operator= (const " << "::" << this->name () - << " &p)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "if (this->ptr_ != &p)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "delete this->ptr_;" << be_nl; - *ci << "ACE_NEW_RETURN (" << be_idt << be_idt_nl - << "this->ptr_," << be_nl - << "::" << this->name () << " (p)," << be_nl - << "*this" << be_uidt_nl - << ");" << be_uidt << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - *ci << "return *this;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - } - - // Two arrow operators. - *ci << "ACE_INLINE const " << "::" << this->name () << " *" << be_nl; - *ci << fname << "::operator-> (void) const" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - *ci << "ACE_INLINE " << "::" << this->name () << " *" << be_nl; - *ci << fname << "::operator-> (void)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Other extra methods - 3 cast operator (). - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::operator const " << "::" << this->name () - << " &() const // cast" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return *this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::operator " << "::" << this->name () - << " &() // cast " << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return *this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::operator " << "::" << this->name () - << " &() const // cast " << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return *this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Variable-size types only. - if (this->size_type () == AST_Type::VARIABLE) - { - *ci << "// Variable-size types only." << be_nl; - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::operator " << "::" << this->name () - << " *&() // cast " << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - } - - // in, inout, out, and _retn - *ci << "ACE_INLINE const " << "::" << this->name () << " &" << be_nl; - *ci << fname << "::in (void) const" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return *this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - *ci << "ACE_INLINE " << "::" << this->name () << " &" << be_nl; - *ci << fname << "::inout (void)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return *this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // The out is handled differently based on our size type. - if (this->size_type () == AST_Type::VARIABLE) - { - *ci << "// Mapping for variable size." << be_nl; - *ci << "ACE_INLINE " << "::" << this->name () << " *&" << be_nl; - *ci << fname << "::out (void)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "delete this->ptr_;" << be_nl; - *ci << "this->ptr_ = 0;" << be_nl; - *ci << "return this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - *ci << "ACE_INLINE " << "::" << this->name () << " *" << be_nl; - *ci << fname << "::_retn (void)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "::" << this->name () << " *tmp = this->ptr_;" << be_nl; - *ci << "this->ptr_ = 0;" << be_nl; - *ci << "return tmp;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - } - else - { - *ci << "// mapping for fixed size " << be_nl; - *ci << "ACE_INLINE " << "::" << this->name () << " &" << be_nl; - *ci << fname << "::out (void)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return *this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - *ci << "ACE_INLINE " << "::" << this->name () << be_nl; - *ci << fname << "::_retn (void)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return *this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - } - - // The additional ptr () member function. - *ci << "ACE_INLINE " << "::" << this->name () << " *" << be_nl; - *ci << fname << "::ptr (void) const" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return this->ptr_;" << be_uidt_nl; - *ci << "}"; - - return 0; -} - -// Generate the _out definition. -int -be_structure::gen_out_defn (char *) -{ - TAO_OutStream *ch = 0; - TAO_NL be_nl; - char namebuf [NAMEBUFSIZE]; - - ACE_OS::memset (namebuf, - '\0', - NAMEBUFSIZE); - - ACE_OS::sprintf (namebuf, - "%s_out", - this->local_name ()->get_string ()); - - ch = tao_cg->client_header (); - - // Generate the out definition (always in the client header). - - *ch << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl; - - *ch << "class " << be_global->stub_export_macro () - << " " << namebuf << be_nl; - *ch << "{" << be_nl; - *ch << "public:" << be_idt_nl; - - // No default constructor - - // Constructor from a pointer. - *ch << namebuf << " (" << this->local_name () << " *&);" << be_nl; - - // Constructor from a _var &. - *ch << namebuf << " (" << this->local_name () << "_var &);" << be_nl; - - // Constructor from a _out &. - *ch << namebuf << " (const " << namebuf << " &);" << be_nl; - - // Assignment operator from a _out &. - *ch << namebuf << " &operator= (const " << namebuf << " &);" << be_nl; - - // Assignment operator from a pointer &, cast operator, ptr fn, operator - // -> and any other extra operators. - - // Assignment. - *ch << namebuf << " &operator= (" - << this->local_name () << " *);" << be_nl; - - // Operator (). - *ch << "operator " << this->local_name () << " *&();" << be_nl; - - // ptr fn - *ch << this->local_name () << " *&ptr (void);" << be_nl; - - // operator -> - *ch << this->local_name () << " *operator-> (void);" << be_nl; - - *ch << be_uidt_nl; - *ch << "private:" << be_idt_nl; - *ch << local_name () << " *&ptr_;" << be_nl; - *ch << "// Assignment from T_var not allowed." << be_nl; - *ch << "void operator= (const " << this->local_name () - << "_var &);" << be_uidt_nl; - *ch << "};"; - - return 0; -} - -int -be_structure::gen_out_impl (char *, - char *) +void +be_structure::redefine (AST_Structure *from) { - TAO_OutStream *ci = 0; - TAO_NL be_nl; - char fname [NAMEBUFSIZE]; - char lname [NAMEBUFSIZE]; - - ACE_OS::memset (fname, - '\0', - NAMEBUFSIZE); - - ACE_OS::sprintf (fname, - "%s_out", - this->full_name ()); - - ACE_OS::memset (lname, - '\0', - NAMEBUFSIZE); - - ACE_OS::sprintf (lname, - "%s_out", - this->local_name ()->get_string ()); - - ci = tao_cg->client_inline (); - - // Generate the var implementation in the inline file. - - *ci << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl; - - *ci << "// *************************************************************" - << be_nl; - *ci << "// Inline operations for class " << fname << be_nl; - *ci << "// *************************************************************" - << be_nl << be_nl; - - // Constructor from a pointer. - ci->indent (); - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::" << lname << " (" << "::" - << this->name () << " *&p)" << be_nl; - *ci << " : ptr_ (p)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "this->ptr_ = 0;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Constructor from _var &. - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::" << lname << " (" << this->local_name () - << "_var &p)" << be_nl; - *ci << " : ptr_ (p.out ())" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "delete this->ptr_;" << be_nl; - *ci << "this->ptr_ = 0;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Copy constructor. - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::" << lname << " (const ::" << fname - << " &p)" << be_nl; - *ci << " : ptr_ (ACE_const_cast (" << lname << "&, p).ptr_)" << be_nl; - *ci << "{}" << be_nl << be_nl; - - // assignment operator from _out &. - *ci << "ACE_INLINE" << be_nl - << fname << " &" << be_nl; - *ci << fname << "::operator= (const ::" << fname << - " &p)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "this->ptr_ = ACE_const_cast (" << lname << "&, p).ptr_;" << be_nl; - *ci << "return *this;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Assignment from _var is not allowed by a private declaration. - - // Assignment operator from pointer. - *ci << "ACE_INLINE" << be_nl - << fname << " &" << be_nl; - *ci << fname << "::operator= (" << this->local_name () << " *_tao_struct_out)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "this->ptr_ = _tao_struct_out;" << be_nl; - *ci << "return *this;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Other extra methods - cast operator (). - *ci << "ACE_INLINE " << be_nl; - *ci << fname << "::operator " << "::" << this->name () - << " *&() // cast" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // ptr function - *ci << "ACE_INLINE " << "::" << this->name () << " *&" << be_nl; - *ci << fname << "::ptr (void) // ptr" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // operator -> - *ci << "ACE_INLINE " << "::" << this->name () << " *" << be_nl; - *ci << fname << "::operator-> (void)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return this->ptr_;" << be_uidt_nl; - *ci << "}"; - - return 0; + be_structure *bs = be_structure::narrow_from_decl (from); + this->common_varout_gen_ = bs->common_varout_gen_; + AST_Structure::redefine (from); } void diff --git a/TAO/TAO_IDL/be/be_type.cpp b/TAO/TAO_IDL/be/be_type.cpp index 46cca0cd831..d46d7af7cd5 100644 --- a/TAO/TAO_IDL/be/be_type.cpp +++ b/TAO/TAO_IDL/be/be_type.cpp @@ -33,7 +33,8 @@ ACE_RCSID (be, "$Id$") be_type::be_type (void) - : tc_name_ (0) + : tc_name_ (0), + common_varout_gen_ (0) { } @@ -45,7 +46,8 @@ be_type::be_type (AST_Decl::NodeType nt, n), AST_Decl (nt, n), - tc_name_ (0) + tc_name_ (0), + common_varout_gen_ (0) { AST_Decl *parent = ScopeAsDecl (this->defined_in ()); Identifier *segment = 0; @@ -217,6 +219,103 @@ be_type::fwd_helper_name (void) const return this->fwd_helper_name_.fast_rep (); } +void +be_type::gen_common_varout (TAO_OutStream *os) +{ + if (this->common_varout_gen_ == 1) + { + return; + } + + *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl + << "// " << __FILE__ << ":" << __LINE__; + + AST_Type::SIZE_TYPE st = this->size_type (); + + *os << be_nl << be_nl + << (this->node_type () == AST_Decl::NT_struct ? "struct " + : "class ") + << this->local_name () << ";"; + + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << (st == AST_Type::FIXED ? "TAO_Fixed_Var_T<" + : "TAO_Var_Var_T<") + << be_idt << be_idt_nl + << this->local_name () << be_uidt_nl + << ">" << be_uidt_nl + << this->local_name () << "_var;" << be_uidt_nl << be_nl; + + if (st == AST_Type::FIXED) + { + *os << "typedef" << be_idt_nl + << this->local_name () << " &" << be_nl + << this->local_name () << "_out;" << be_uidt; + } + else + { + *os << "typedef" << be_idt_nl + << "TAO_Out_T<" << be_idt << be_idt_nl + << this->local_name () << "," << be_nl + << this->local_name () << "_var" << be_uidt_nl + << ">" << be_uidt_nl + << this->local_name () << "_out;" << be_uidt; + } + + this->common_varout_gen_ = 1; +} + +void +be_type::gen_common_tmplinst (TAO_OutStream *os) +{ + AST_Type::SIZE_TYPE st = this->size_type (); + + *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl + << "// " << __FILE__ << ":" << __LINE__; + + os->gen_ifdef_AHETI (); + + *os << be_nl << be_nl + << "template class" << be_idt_nl + << (st == AST_Type::FIXED ? "TAO_Fixed_Var_T<" + : "TAO_Var_Var_T<") + << be_idt << be_idt_nl + << this->local_name () << be_uidt_nl + << ">;" << be_uidt << be_uidt; + + if (st == AST_Type::VARIABLE) + { + *os << be_nl<< be_nl + << "template class" << be_idt_nl + << "TAO_Out_T<" << be_idt << be_idt_nl + << this->local_name () << "," << be_nl + << this->local_name () << "_var" << be_uidt_nl + << ">;" << be_uidt << be_uidt; + } + + os->gen_elif_AHETI (); + + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << (st == AST_Type::FIXED ? "TAO_Fixed_Var_T< \\" + : "TAO_Var_Var_T< \\") + << be_idt << be_idt_nl + << this->local_name () << " \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; + + if (st == AST_Type::VARIABLE) + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Out_T< \\" << be_idt << be_idt_nl + << this->local_name () << ", \\" << be_nl + << this->local_name () << "_var \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; + } + + os->gen_endif_AHETI (); +} + AST_Decl::NodeType be_type::base_node_type (void) const { diff --git a/TAO/TAO_IDL/be/be_union.cpp b/TAO/TAO_IDL/be/be_union.cpp index 24e76c21aae..13ec5d12652 100644 --- a/TAO/TAO_IDL/be/be_union.cpp +++ b/TAO/TAO_IDL/be/be_union.cpp @@ -61,579 +61,12 @@ be_union::be_union (AST_ConcreteType *dt, this->has_constructor (I_TRUE); } -// Generate the _var definition for ourself. -int -be_union::gen_var_defn (char *) -{ - char namebuf [NAMEBUFSIZE]; - - ACE_OS::memset (namebuf, - '\0', - NAMEBUFSIZE); - - ACE_OS::sprintf (namebuf, - "%s_var", - this->local_name ()->get_string ()); - - TAO_OutStream *ch = tao_cg->client_header (); - - // Generate the var definition (always in the client header). - // Depending upon the data type, there are some differences which we account - // for over here. - - *ch << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__; - - *ch << be_nl << be_nl - << "class " << be_global->stub_export_macro () - << " " << namebuf << be_nl; - *ch << "{" << be_nl; - *ch << "public:" << be_idt_nl; - - // Default constructor. - *ch << namebuf << " (void);" << be_nl; - - // Constructor. - *ch << namebuf << " (" << this->local_name () << " *);" << be_nl; - - // Copy constructor. - *ch << namebuf << " (const " << namebuf - << " &);" << be_nl; - - // Fixed-size types only. - if (this->size_type () == AST_Type::FIXED) - { - *ch << namebuf << " (const " << this->local_name () - << " &); // fixed-size types only" << be_nl; - } - - // Destructor. - *ch << "~" << namebuf << " (void);" << be_nl; - *ch << be_nl; - - // Assignment operator from a pointer. - *ch << namebuf << " &operator= (" - << this->local_name () << " *);" << be_nl; - - // Assignment from _var. - *ch << namebuf << " &operator= (const " << namebuf << " &);" << be_nl; - - // Fixed-size types only. - if (this->size_type () == AST_Type::FIXED) - { - *ch << namebuf << " &operator= (const " << this->local_name () - << " &); // fixed-size types only" << be_nl; - } - - // Arrow operator. - *ch << local_name () << " *operator-> (void);" << be_nl; - *ch << "const " << this->local_name () - << " *operator-> (void) const;" << be_nl; - *ch << be_nl; - - // Other extra types (cast operators, [] operator, and others). - *ch << "operator const " << this->local_name () << " &() const;" << be_nl; - *ch << "operator " << this->local_name () << " &();" << be_nl; - *ch << "operator " << this->local_name () << " &() const;" << be_nl; - - if (this->size_type () == AST_Type::VARIABLE) - { - *ch << " // Variable size types only." << be_nl; - *ch << "operator " << this->local_name () - << " *&();" << be_nl; - } - - *ch << be_nl; - *ch << "// in, inout, out, _retn " << be_nl; - - // The return types of in, out, inout, and _retn are based on the parameter - // passing rules and the base type. - if (this->size_type () == AST_Type::FIXED) - { - *ch << "const " << local_name () << " &in (void) const;" << be_nl; - *ch << this->local_name () << " &inout (void);" << be_nl; - *ch << this->local_name () << " &out (void);" << be_nl; - *ch << this->local_name () << " _retn (void);" << be_nl; - } - else - { - *ch << "const " << this->local_name () << " &in (void) const;" << be_nl; - *ch << this->local_name () << " &inout (void);" << be_nl; - *ch << this->local_name () << " *&out (void);" << be_nl; - *ch << this->local_name () << " *_retn (void);" << be_nl; - } - - // Generate an additional member function that - // returns the underlying pointer. - *ch << this->local_name () << " *ptr (void) const;" - << be_uidt_nl << be_nl; - - // Generate the private section - *ch << "private:" << be_idt_nl; - *ch << this->local_name () << " *ptr_;" << be_uidt_nl; - *ch << "};"; - - return 0; -} - -// Implementation of the _var class. All of these get generated in the inline -// file. -int -be_union::gen_var_impl (char *, - char *) -{ - TAO_OutStream *ci = 0; - TAO_NL be_nl; - - // To hold the full and local _var names. - char fname [NAMEBUFSIZE]; - char lname [NAMEBUFSIZE]; - - ACE_OS::memset (fname, - '\0', - NAMEBUFSIZE); - - ACE_OS::sprintf (fname, - "%s_var", - this->full_name ()); - - ACE_OS::memset (lname, - '\0', - NAMEBUFSIZE); - - ACE_OS::sprintf (lname, - "%s_var", - this->local_name ()->get_string ()); - - ci = tao_cg->client_inline (); - - *ci << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl; - - *ci << "// *************************************************************" - << be_nl; - *ci << "// Inline operations for class " << fname << be_nl; - *ci << "// *************************************************************" - << be_nl << be_nl; - - // Default constructor. - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::" << lname << - " (void)" << be_nl; - *ci << " " << ": ptr_ (0)" << be_nl; - *ci << "{}" << be_nl << be_nl; - - // Constructor from a pointer. - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::" << lname << " (" << this->local_name () - << " *p)" << be_nl; - *ci << " : ptr_ (p)" << be_nl; - *ci << "{}" << be_nl << be_nl; - - // Copy constructor. - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::" << lname << " (const ::" << fname - << " &p)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "if (p.ptr_)" << be_idt_nl - << "{" << be_idt_nl; - *ci << "ACE_NEW (this->ptr_, ::" << this->name () - << " (*p.ptr_));" << be_uidt_nl - << "}" << be_uidt_nl; - *ci << "else" << be_idt_nl - << "{" << be_idt_nl; - *ci << "this->ptr_ = 0;" << be_uidt_nl - << "}" << be_uidt << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Fixed-size types only. - if (this->size_type () == AST_Type::FIXED) - { - *ci << "// Fixed-size types only." << be_nl; - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::" << lname << " (const ::" - << this->name () << " &p)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "ACE_NEW (this->ptr_, ::" << this->name () - << " (p));" << be_uidt_nl; - *ci << "}\n\n"; - } - - // Destructor. - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::~" << lname << " (void)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "delete this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Assignment operator from a pointer. - *ci << "ACE_INLINE" << be_nl - << "::" << fname << " &" << be_nl; - *ci << fname << "::operator= (" << this->local_name () - << " *_tao_union_var)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "delete this->ptr_;" << be_nl; - *ci << "this->ptr_ = _tao_union_var;" << be_nl; - *ci << "return *this;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Assignment operator from _var. - *ci << "ACE_INLINE" << be_nl - << "::" << fname << " &" << be_nl - << fname << "::operator= (const ::" << fname - << " &_tao_union_var)" << be_nl - << "{" << be_idt_nl - << "if (this != &_tao_union_var)" << be_idt_nl - << "{" << be_idt_nl - << "if (_tao_union_var.ptr_ == 0)" << be_idt_nl - << "{" << be_idt_nl - << "delete this->ptr_;" << be_nl - << "this->ptr_ = 0;" << be_uidt_nl - << "}" << be_uidt_nl - << "else" << be_idt_nl - << "{" << be_idt_nl - << this->local_name () << " *deep_copy = 0;" << be_nl - << "ACE_NEW_RETURN (" << be_idt << be_idt_nl - << "deep_copy," << be_nl - << this->local_name () << " (*_tao_union_var.ptr_)," << be_nl - << "*this" << be_uidt_nl - << ");" << be_uidt_nl << be_nl - << "if (deep_copy != 0)" << be_idt_nl - << "{" << be_idt_nl - << this->local_name () << " *tmp = deep_copy;" << be_nl - << "deep_copy = this->ptr_;" << be_nl - << "this->ptr_ = tmp;" << be_nl - << "delete deep_copy;" << be_uidt_nl - << "}" << be_uidt << be_uidt_nl - << "}" << be_uidt << be_uidt_nl - << "}" << be_uidt_nl << be_nl - << "return *this;" << be_uidt_nl - << "}" << be_nl << be_nl; - - // Fixed-size types only. - if (this->size_type () == AST_Type::FIXED) - { - *ci << "// Fixed-size types only." << be_nl; - *ci << "ACE_INLINE" << be_nl - << "::" << fname << " &" << be_nl; - *ci << fname << "::operator= (const ::" << this->name () - << " &_tao_union_var)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "if (this->ptr_ != &_tao_union_var)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "delete this->ptr_;" << be_nl; - *ci << "ACE_NEW_RETURN (" << be_idt << be_idt_nl - << "this->ptr_," << be_nl - << "::" << this->name () << " (_tao_union_var)," << be_nl - << "*this" << be_uidt_nl - << ");" << be_uidt << be_uidt_nl; - *ci << "}" << be_nl; - *ci << "return *this;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - } - - // Two arrow operators. - *ci << "ACE_INLINE" << be_nl - << "const ::" << this->name () << " *" << be_nl; - *ci << fname << "::operator-> (void) const" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - *ci << "ACE_INLINE" << be_nl - << "::" << this->name () << " *" << be_nl; - *ci << fname << "::operator-> (void)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Other extra methods - 3 cast operator (). - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::operator const ::" << this->name () - << " &() const // cast" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return *this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::operator ::" << this->name () - << " &() // cast " << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return *this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::operator ::" << this->name () - << " &() const// cast " << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return *this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Variable-size types only. - if (this->size_type () == AST_Type::VARIABLE) - { - *ci << "// Variable-size types only." << be_nl; - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::operator ::" << this->name () - << " *&() // cast " << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - } - - // in, inout, out, _retn, and ptr. - *ci << "ACE_INLINE" << be_nl - << "const ::" << this->name () << " &" << be_nl; - *ci << fname << "::in (void) const" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return *this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - *ci << "ACE_INLINE" << be_nl - << "::" << this->name () << " &" << be_nl; - *ci << fname << "::inout (void)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return *this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // The out and _retn are handled differently based on our size type. - if (this->size_type () == AST_Type::VARIABLE) - { - *ci << "// Mapping for variable size." << be_nl; - *ci << "ACE_INLINE" << be_nl - << "::" << this->name () << " *&" << be_nl; - *ci << fname << "::out (void)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "delete this->ptr_;" << be_nl; - *ci << "this->ptr_ = 0;" << be_nl; - *ci << "return this->ptr_;" << be_uidt_nl; - *ci << "}\n\n"; - - ci->indent (); - *ci << "ACE_INLINE" << be_nl - << "::" << this->name () << " *" << be_nl; - *ci << fname << "::_retn (void)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "::" << this->name () << " *tmp = this->ptr_;" << be_nl; - *ci << "this->ptr_ = 0;" << be_nl; - *ci << "return tmp;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - } - else - { - *ci << "// Mapping for fixed size. " << be_nl; - *ci << "ACE_INLINE" << be_nl - << "::" << this->name () << " &" << be_nl; - *ci << fname << "::out (void)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return *this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - *ci << "ACE_INLINE" << be_nl - << "::" << this->name () << be_nl; - *ci << fname << "::_retn (void)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return *this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - } - - // The additional ptr () member function. - *ci << "ACE_INLINE" << be_nl - << "::" << this->name () << " *" << be_nl; - *ci << fname << "::ptr (void) const" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return this->ptr_;" << be_uidt_nl; - *ci << "}"; - - return 0; -} - -// Generate the _out definition -int -be_union::gen_out_defn (char *) -{ - TAO_OutStream *ch = 0; - TAO_NL be_nl; - - // To hold the _out name. - char namebuf [NAMEBUFSIZE]; - - ACE_OS::memset (namebuf, - '\0', - NAMEBUFSIZE); - - ACE_OS::sprintf (namebuf, - "%s_out", - this->local_name ()->get_string ()); - - ch = tao_cg->client_header (); - - // Generate the out definition (always in the client header). - - *ch << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__; - - *ch << be_nl << be_nl - << "class " << be_global->stub_export_macro () - << " " << namebuf << be_nl; - *ch << "{" << be_nl; - *ch << "public:" << be_idt_nl; - - // No default constructor. - - // Constructor from a pointer. - *ch << namebuf << " (" << this->local_name () << " *&);" << be_nl; - - // Constructor from a _var &. - *ch << namebuf << " (" << this->local_name () << "_var &);" << be_nl; - - // Constructor from a _out &. - *ch << namebuf << " (const " << namebuf << " &);" << be_nl; - - // Assignment operator from a _out &. - *ch << namebuf << " &operator= (const " << namebuf << " &);" << be_nl; - - // Assignment operator from a pointer &, cast operator, ptr fn, operator - // -> and any other extra operators. - - // Assignment. - *ch << namebuf << " &operator= (" << this->local_name () - << " *);" << be_nl; - - // operator (). - *ch << "operator " << local_name () << " *&();" << be_nl; - - // ptr function. - *ch << this->local_name () << " *&ptr (void);" << be_nl; - - // operator -> - *ch << this->local_name () << " *operator-> (void);" << be_nl; - - *ch << be_uidt_nl; - *ch << "private:" << be_idt_nl; - *ch << this->local_name () << " *&ptr_;" << be_nl; - *ch << "// assignment from T_var not allowed." << be_nl; - *ch << "void operator= (const " << this->local_name () - << "_var &);" << be_uidt_nl; - *ch << "};"; - - return 0; -} - -int -be_union::gen_out_impl (char *, - char *) +void +be_union::redefine (AST_Structure *from) { - TAO_OutStream *ci = 0; - TAO_NL be_nl; - - // To hold the full and local _out names. - char fname [NAMEBUFSIZE]; - char lname [NAMEBUFSIZE]; - - ACE_OS::memset (fname, - '\0', - NAMEBUFSIZE); - - ACE_OS::sprintf (fname, - "%s_out", - this->full_name ()); - - ACE_OS::memset (lname, - '\0', - NAMEBUFSIZE); - - ACE_OS::sprintf (lname, - "%s_out", - this->local_name ()->get_string ()); - - ci = tao_cg->client_inline (); - - // Generate the var implementation in the inline file. - - *ci << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl; - - *ci << "// *************************************************************" - << be_nl; - *ci << "// Inline operations for class " << fname << be_nl; - *ci << "// *************************************************************" - << be_nl << be_nl; - - // Constructor from a pointer. - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::" << lname << " (" << this->local_name () - << " *&p)" << be_nl; - *ci << " : ptr_ (p)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "this->ptr_ = 0;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Constructor from _var &. - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::" << lname << " (" << this->local_name () - << "_var &p)" << be_nl; - *ci << " : ptr_ (p.out ())" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "delete this->ptr_;" << be_nl; - *ci << "this->ptr_ = 0;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Copy constructor. - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::" << lname << " (const ::" << fname - << " &p)" << be_nl; - *ci << " : ptr_ (ACE_const_cast (" << lname << "&, p).ptr_)" << be_nl; - *ci << "{}" << be_nl << be_nl; - - // Assignment operator from _out &. - *ci << "ACE_INLINE" << be_nl - << "::" << fname << " &" << be_nl; - *ci << fname << "::operator= (const ::" << fname - << " &p)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "this->ptr_ = ACE_const_cast (" << lname << "&, p).ptr_;" << be_nl; - *ci << "return *this;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Assignment from _var is not allowed by a private declaration. - - // Assignment operator from pointer. - *ci << "ACE_INLINE" << be_nl - << "::" << fname << " &" << be_nl; - *ci << fname << "::operator= (" << this->local_name () - << " *_tao_union_out)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "this->ptr_ = _tao_union_out;" << be_nl; - *ci << "return *this;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // Other extra methods - cast operator (). - *ci << "ACE_INLINE" << be_nl; - *ci << fname << "::operator ::" << this->name () - << " *&() // cast" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // ptr function. - *ci << "ACE_INLINE" << be_nl - << "::" << this->name () << " *&" << be_nl; - *ci << fname << "::ptr (void) // ptr" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return this->ptr_;" << be_uidt_nl; - *ci << "}" << be_nl << be_nl; - - // operator -> - *ci << "ACE_INLINE" << be_nl - << "::" << this->name () << " *" << be_nl; - *ci << fname << "::operator-> (void)" << be_nl; - *ci << "{" << be_idt_nl; - *ci << "return this->ptr_;" << be_uidt_nl; - *ci << "}"; - - return 0; + be_union *bu = be_union::narrow_from_decl (from); + this->common_varout_gen_ = bu->common_varout_gen_; + AST_Union::redefine (from); } idl_bool diff --git a/TAO/TAO_IDL/be/be_valuetype.cpp b/TAO/TAO_IDL/be/be_valuetype.cpp index c438ea9c48b..2d088f94bba 100644 --- a/TAO/TAO_IDL/be/be_valuetype.cpp +++ b/TAO/TAO_IDL/be/be_valuetype.cpp @@ -69,6 +69,8 @@ be_valuetype::be_valuetype (UTL_ScopedName *n, n_inherits_flat, 0, abstract), + be_type (AST_Decl::NT_valuetype, + n), AST_ValueType (n, inherits, n_inherits, @@ -158,6 +160,8 @@ be_valuetype::~be_valuetype (void) void be_valuetype::redefine (AST_Interface *from) { + be_valuetype *bv = be_valuetype::narrow_from_decl (from); + bv->var_out_seq_decls_gen_ = bv->var_out_seq_decls_gen_; this->AST_ValueType::redefine (from); } @@ -189,18 +193,6 @@ be_valuetype::full_obv_skel_name (void) return this->full_obv_skel_name_; } -int -be_valuetype::var_out_seq_decls_gen (void) const -{ - return this->var_out_seq_decls_gen_; -} - -void -be_valuetype::var_out_seq_decls_gen (int val) -{ - this->var_out_seq_decls_gen_ = val; -} - const char * be_valuetype::fwd_helper_name (void) const { @@ -304,6 +296,11 @@ be_valuetype::gen_helper_stubs (char* , void be_valuetype:: gen_var_out_seq_decls (void) { + if (this->var_out_seq_decls_gen_ == 1) + { + return; + } + TAO_OutStream *os = tao_cg->client_header (); *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl @@ -325,6 +322,8 @@ be_valuetype:: gen_var_out_seq_decls (void) << lname << " *);" << be_nl << "static void tao_remove_ref (" << lname << " *);" << be_uidt_nl << "};"; + + this->var_out_seq_decls_gen_ = 1; } // For building the pre and postfix of private data fields. diff --git a/TAO/TAO_IDL/be/be_visitor_array/any_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_array/any_op_cs.cpp index 50cb462f6cd..5875fe37b66 100644 --- a/TAO/TAO_IDL/be/be_visitor_array/any_op_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_array/any_op_cs.cpp @@ -140,9 +140,9 @@ be_visitor_array_any_op_cs::visit_array (be_array *node) << node->name () << "_forany" << be_uidt_nl << ">;" << be_uidt << be_uidt_nl << "#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)" << be_nl - << "# pragma instantiate TAO::Any_Array_Impl_T<" << be_idt << be_idt_nl - << node->name () << "_slice," << be_nl - << node->name () << "_forany" << be_uidt_nl + << "# pragma instantiate TAO::Any_Array_Impl_T< \\" << be_idt << be_idt_nl + << node->name () << "_slice, \\" << be_nl + << node->name () << "_forany \\" << be_uidt_nl << ">" << be_uidt_nl << "#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */"; diff --git a/TAO/TAO_IDL/be/be_visitor_array/array_ch.cpp b/TAO/TAO_IDL/be/be_visitor_array/array_ch.cpp index f6ca9c7c101..bf84852b1d3 100644 --- a/TAO/TAO_IDL/be/be_visitor_array/array_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_array/array_ch.cpp @@ -230,44 +230,46 @@ int be_visitor_array_ch::visit_array (be_array *node) if (node->size_type () == AST_Type::VARIABLE) { *os << be_nl << be_nl - << "typedef TAO_VarArray_Var_T<" << be_idt << be_idt_nl + << "typedef" << be_idt_nl + << "TAO_VarArray_Var_T<" << be_idt << be_idt_nl << node->local_name () << "_slice," << be_nl << "tao_" << node->local_name () << "_life" << be_uidt_nl - << ">" << be_nl + << ">" << be_uidt_nl << node->local_name () << "_var;" << be_uidt_nl; - *os << "typedef TAO_Array_Out_T<" << be_idt << be_idt_nl + *os << "typedef" << be_idt_nl + << "TAO_Array_Out_T<" << be_idt << be_idt_nl << node->local_name () << "_var," << be_nl << node->local_name () << "_slice," << be_nl << "tao_" << node->local_name () << "_life" << be_uidt_nl - << ">" << be_nl + << ">" << be_uidt_nl << node->local_name () << "_out;" << be_uidt; } else { *os << be_nl << be_nl - << "typedef TAO_FixedArray_Var_T<" << be_idt << be_idt_nl + << "typedef" << be_idt_nl + << "TAO_FixedArray_Var_T<" << be_idt << be_idt_nl << node->local_name () << "_slice," << be_nl << "tao_" << node->local_name () << "_life" << be_uidt_nl - << ">" << be_nl - << node->local_name () << "_var;" << be_uidt_nl; + << ">" << be_uidt_nl + << node->local_name () << "_var;" << be_uidt; - *os << "typedef " << node->local_name () << " " + *os << be_nl << be_nl + << "typedef" << be_idt_nl << node->local_name () << be_nl << node->local_name () << "_out;" << be_uidt; } } // Generate _forany decl. *os << be_nl << be_nl - << "typedef TAO_Array_Forany_T<" << be_idt << be_idt_nl + << "typedef" << be_idt_nl + << "TAO_Array_Forany_T<" << be_idt << be_idt_nl << anon_p << node->local_name () << "_slice," << be_nl << "tao_" << node->local_name () << "_life" << be_uidt_nl - << ">" << be_nl + << ">" << be_uidt_nl << anon_p << node->local_name () << "_forany;" << be_uidt; - *os << be_nl << be_nl << "// TAO_IDL - Generated from " << be_nl - << "// " __FILE__ << ":" << __LINE__; - *os << be_nl << be_nl; // The _alloc, _dup, copy, and free methods. If the node is nested, the diff --git a/TAO/TAO_IDL/be/be_visitor_component/component_ch.cpp b/TAO/TAO_IDL/be/be_visitor_component/component_ch.cpp index 00e54c68f37..9eebab57ad0 100644 --- a/TAO/TAO_IDL/be/be_visitor_component/component_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_component/component_ch.cpp @@ -43,11 +43,9 @@ be_visitor_component_ch::visit_component (be_component *node) return 0; } - if (node->var_out_seq_decls_gen () == 0) - { - node->gen_var_out_seq_decls (); - node->var_out_seq_decls_gen (1); - } + // This will be a no-op if it has already been done by a forward + // declaration. + node->gen_var_out_seq_decls (); TAO_OutStream *os = this->ctx_->stream (); diff --git a/TAO/TAO_IDL/be/be_visitor_enum/any_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_enum/any_op_cs.cpp index 87048b92cb1..486d84ba535 100644 --- a/TAO/TAO_IDL/be/be_visitor_enum/any_op_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_enum/any_op_cs.cpp @@ -87,7 +87,8 @@ be_visitor_enum_any_op_cs::visit_enum (be_enum *node) << "template class TAO::Any_Basic_Impl_T<" << node->name () << ">;" << be_uidt_nl << "#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)" << be_nl - << "# pragma instantiate TAO::Any_Basic_Impl_T<" << node->name () + << "# pragma instantiate TAO::Any_Basic_Impl_T<" + << node->name () << " \\" << ">" << be_nl << "#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */"; diff --git a/TAO/TAO_IDL/be/be_visitor_exception/any_op_cs.cpp b/TAO/TAO_IDL/be/be_visitor_exception/any_op_cs.cpp index b87ce45d599..c0c7a323eb8 100644 --- a/TAO/TAO_IDL/be/be_visitor_exception/any_op_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_exception/any_op_cs.cpp @@ -152,7 +152,8 @@ be_visitor_exception_any_op_cs::visit_exception (be_exception *node) << "template class TAO::Any_Dual_Impl_T<" << node->name () << ">;" << be_uidt_nl << "#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)" << be_nl - << "# pragma instantiate TAO::Any_Dual_Impl_T<" << node->name () + << "# pragma instantiate TAO::Any_Dual_Impl_T<" + << node->name () << " \\" << ">" << be_nl << "#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */"; diff --git a/TAO/TAO_IDL/be/be_visitor_interface/amh_ch.cpp b/TAO/TAO_IDL/be/be_visitor_interface/amh_ch.cpp index a51bed9a6a0..99699d86b47 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/amh_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/amh_ch.cpp @@ -35,11 +35,9 @@ be_visitor_amh_interface_ch::visit_interface (be_interface *node) return 0; } - if (node->var_out_seq_decls_gen () == 0) - { - node->gen_var_out_seq_decls (); - node->var_out_seq_decls_gen (1); - } + // This will be a no-op if it has already been done by a forward + // declaration. + node->gen_var_out_seq_decls (); TAO_OutStream *os = this->ctx_->stream (); diff --git a/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp b/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp index 550c5466e96..9a7e4796098 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface/interface_ch.cpp @@ -43,11 +43,9 @@ be_visitor_interface_ch::visit_interface (be_interface *node) return 0; } - if (node->var_out_seq_decls_gen () == 0) - { - node->gen_var_out_seq_decls (); - node->var_out_seq_decls_gen (1); - } + // This will be a no-op if it has already been done by a forward + // declaration. + node->gen_var_out_seq_decls (); TAO_OutStream *os = this->ctx_->stream (); long i; diff --git a/TAO/TAO_IDL/be/be_visitor_interface_fwd/interface_fwd_ch.cpp b/TAO/TAO_IDL/be/be_visitor_interface_fwd/interface_fwd_ch.cpp index 7a00e20e99e..b5c8399743e 100644 --- a/TAO/TAO_IDL/be/be_visitor_interface_fwd/interface_fwd_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_interface_fwd/interface_fwd_ch.cpp @@ -50,11 +50,8 @@ be_visitor_interface_fwd_ch::visit_interface_fwd (be_interface_fwd *node) AST_Interface *fd = node->full_definition (); be_interface *bfd = be_interface::narrow_from_decl (fd); - if (bfd->var_out_seq_decls_gen () == 0) - { - bfd->gen_var_out_seq_decls (); - bfd->var_out_seq_decls_gen (1); - } + // This will be a no-op if it has already been done for this node. + bfd->gen_var_out_seq_decls (); node->cli_hdr_gen (I_TRUE); 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 28f93c7690b..bdbd358dc45 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_ch.cpp @@ -72,7 +72,7 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) } *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl; + << "// " << __FILE__ << ":" << __LINE__; // Generate the appropriate sequence type. switch (node->managed_type ()) @@ -83,7 +83,8 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) if (node->unbounded ()) { - *os << "typedef" << be_idt_nl + *os << be_nl << be_nl + << "typedef" << be_idt_nl << "TAO_Unbounded_Object_Sequence<" << be_idt << be_idt_nl << bt->name () << "," << be_nl << bt->name () << "_var," << be_nl @@ -93,7 +94,8 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) } else { - *os << "typedef" << be_idt_nl + *os << be_nl << be_nl + << "typedef" << be_idt_nl << "TAO_Bounded_Object_Sequence<" << be_idt << be_idt_nl << bt->name () << "," << be_nl << bt->name () << "_var," << be_nl @@ -138,7 +140,8 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) if (node->unbounded ()) { - *os << "typedef" << be_idt_nl + *os << be_nl << be_nl + << "typedef" << be_idt_nl << "TAO_Unbounded_Abstract_Sequence<" << be_idt << be_idt_nl << bt->name () << "," << be_nl << bt->name () << "_var," << be_nl @@ -147,7 +150,8 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) } else { - *os << "typedef" << be_idt_nl + *os << be_nl << be_nl + << "typedef" << be_idt_nl << "TAO_Bounded_Object_Sequence<" << be_idt << be_idt_nl << bt->name () << "," << be_nl << bt->name () << "_var," << be_nl @@ -195,12 +199,60 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) break; case be_sequence::MNG_VALUE: - if (node->unbounded ()) - { - } - else - { - } + { + be_interface *elem = be_interface::narrow_from_decl (bt); + + if (node->unbounded ()) + { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Unbounded_Valuetype_Sequence<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << elem->fwd_helper_name () << "_life" << be_uidt_nl + << ">" << be_uidt_nl + << node->local_name () << ";" << be_uidt; + } + else + { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Bounded_Valuetype_Sequence<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << elem->fwd_helper_name () << "_life," << be_nl + << node->max_size ()->ev ()->u.ulval << be_uidt_nl + << ">" << be_uidt_nl + << node->local_name () << ";" << be_uidt; + } + + // Generate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_VarSeq_Var_T<" << be_idt << be_idt_nl + << node->local_name () << "," << be_nl + << "TAO_Valuetype_Manager<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << elem->fwd_helper_name () << "_life" << be_uidt_nl + << ">" << be_uidt << be_uidt_nl + << "> " << node->local_name () << "_var;" << be_uidt << be_uidt; + + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Seq_Out_T<" << be_idt << be_idt_nl + << node->local_name () << "," << be_nl + << node->local_name () << "_var," << be_nl + << "TAO_Valuetype_Manager<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->name () << "_var," << be_nl + << elem->fwd_helper_name () << "_life" << be_uidt_nl + << ">" << be_uidt << be_uidt_nl + << "> " << node->local_name () << "_out;" << be_uidt << be_uidt; + } + } break; case be_sequence::MNG_STRING: @@ -227,33 +279,75 @@ int be_visitor_sequence_ch::visit_sequence (be_sequence *node) if (node->unbounded ()) { *os << be_nl << be_nl - << "typedef TAO_Unbounded_Array_Sequence<" + << "typedef" << be_idt_nl + << "TAO_Unbounded_Array_Sequence<" << be_idt << be_idt_nl << bt->name () << "," << be_nl << bt->fwd_helper_name () << "_life" << be_uidt_nl - << "> " << node->local_name () << ";" << be_uidt; + << ">" << be_uidt_nl + << node->local_name () << ";" << be_uidt; } else { *os << be_nl << be_nl - << "typedef TAO_Bounded_Array_Sequence<" + << "typedef" << be_idt_nl + << "TAO_Bounded_Array_Sequence<" << be_idt << be_idt_nl << bt->name () << "," << be_nl << bt->fwd_helper_name () << "_life," << be_nl << node->max_size ()->ev ()->u.ulval << be_uidt_nl - << "> " << node->local_name () << ";" << be_uidt; + << ">" << be_uidt_nl + << node->local_name () << ";" << be_uidt; } } else { if (node->unbounded ()) { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Unbounded_Sequence<" << be_idt << be_idt_nl + << bt->name () << be_uidt_nl + << ">" << be_uidt_nl + << node->local_name () << ";" << be_uidt; } else { + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Bounded_Sequence<" << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << node->max_size ()->ev ()->u.ulval << be_uidt_nl + << ">" << be_uidt_nl + << node->local_name () << ";" << be_uidt; } } + // Generate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + AST_Type::SIZE_TYPE st = bt->size_type (); + + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << (st == AST_Type::FIXED ? "TAO_FixedSeq_Var_T<" + : "TAO_VarSeq_Var_T<") + << be_idt << be_idt_nl + << node->local_name () << "," << be_nl + << bt->name () << be_uidt_nl + << ">" << be_uidt_nl + << node->local_name () << "_var;" << be_uidt; + + *os << be_nl << be_nl + << "typedef" << be_idt_nl + << "TAO_Seq_Out_T<" << be_idt << be_idt_nl + << node->local_name () << "," << be_nl + << node->local_name () << "_var," << be_nl + << bt->name () << be_uidt_nl + << ">" << be_uidt_nl + << node->local_name () << "_out;" << be_uidt; + } + break; } 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 073a4a7e076..56adee4cef0 100644 --- a/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_sequence/sequence_cs.cpp @@ -44,12 +44,12 @@ int be_visitor_sequence_cs::visit_sequence (be_sequence *node) TAO_OutStream *os = this->ctx_->stream (); be_type *bt = be_type::narrow_from_decl (node->base_type ()); + AST_Type::SIZE_TYPE st = bt->size_type (); *os << be_nl << be_nl << "// TAO_IDL - Generated from " << be_nl << "// "__FILE__ << ":" << __LINE__; - *os << be_nl - << "\n#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)" << be_idt_nl; + os->gen_ifdef_AHETI (); switch (node->managed_type ()) { @@ -59,7 +59,8 @@ int be_visitor_sequence_cs::visit_sequence (be_sequence *node) if (node->unbounded ()) { - *os << "template class" << be_idt_nl + *os << be_nl << be_nl + << "template class" << be_idt_nl << "TAO_Unbounded_Object_Sequence<" << be_idt << be_idt_nl << elem->name () << "," << be_nl << elem->name () << "_var," << be_nl @@ -69,36 +70,43 @@ int be_visitor_sequence_cs::visit_sequence (be_sequence *node) } else { - *os << "template class" << be_idt_nl + *os << be_nl << be_nl + << "template class" << be_idt_nl << "TAO_Bounded_Object_Sequence<" << be_idt << be_idt_nl << elem->name () << "," << be_nl << elem->name () << "_var," << be_nl << elem->fwd_helper_name () << "_life," << be_nl << elem->fwd_helper_name () << "_cast," << be_nl << node->max_size ()->ev ()->u.ulval << be_uidt_nl - << ">;" << be_uidt << be_uidt_nl; + << ">;" << be_uidt << be_uidt; } - *os << "template class" << be_idt_nl - << "TAO_VarSeq_Var_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << "TAO_Object_Manager<" << be_idt << be_idt_nl - << elem->name () << "," << be_nl - << elem->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << ">;" << be_uidt << be_uidt_nl; - - *os << "template class" << be_idt_nl - << "TAO_Seq_Out_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << node->name () << "_var," << be_nl - << "TAO_Object_Manager<" << be_idt << be_idt_nl - << elem->name () << "," << be_nl - << elem->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << ">;"; + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_VarSeq_Var_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + << "TAO_Object_Manager<" << be_idt << be_idt_nl + << elem->name () << "," << be_nl + << elem->name () << "_var," << be_nl + << elem->fwd_helper_name () << "_life" << be_uidt_nl + << ">" << be_uidt << be_uidt_nl + << ">;" << be_uidt << be_uidt; + + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Seq_Out_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + << node->name () << "_var," << be_nl + << "TAO_Object_Manager<" << be_idt << be_idt_nl + << elem->name () << "," << be_nl + << elem->name () << "_var," << be_nl + << elem->fwd_helper_name () << "_life" << be_uidt_nl + << ">" << be_uidt << be_uidt_nl + << ">;" << be_uidt << be_uidt; + } } break; @@ -108,44 +116,52 @@ int be_visitor_sequence_cs::visit_sequence (be_sequence *node) if (node->unbounded ()) { - *os << "template class" << be_idt_nl + *os << be_nl << be_nl + << "template class" << be_idt_nl << "TAO_Unbounded_Abstract_Sequence<" << be_idt << be_idt_nl << elem->name () << "," << be_nl << elem->name () << "_var," << be_nl << elem->fwd_helper_name () << "_life" << be_uidt_nl - << ">;" << be_uidt << be_uidt_nl; + << ">;" << be_uidt << be_uidt; } else { - *os << "template class" << be_idt_nl - << "TAO_Bounded_Object_Sequence<" << be_idt << be_idt_nl + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Bounded_Abstract_Sequence<" << be_idt << be_idt_nl << elem->name () << "," << be_nl << elem->name () << "_var," << be_nl << elem->fwd_helper_name () << "_life," << be_nl << node->max_size ()->ev ()->u.ulval << be_uidt_nl - << ">;" << be_uidt << be_uidt_nl; + << ">;" << be_uidt << be_uidt; } - *os << "template class" << be_idt_nl - << "TAO_VarSeq_Var_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << "TAO_Abstract_Manager<" << be_idt << be_idt_nl - << elem->name () << "," << be_nl - << elem->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << ">;" << be_uidt << be_uidt_nl; - - *os << "template class" << be_idt_nl - << "TAO_Seq_Out_T<" << be_idt << be_idt_nl - << node->name () << "," << be_nl - << node->name () << "_var," << be_nl - << "TAO_Abstract_Manager<" << be_idt << be_idt_nl - << elem->name () << "," << be_nl - << elem->name () << "_var," << be_nl - << elem->fwd_helper_name () << "_life" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl - << ">;"; + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_VarSeq_Var_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + << "TAO_Abstract_Manager<" << be_idt << be_idt_nl + << elem->name () << "," << be_nl + << elem->name () << "_var," << be_nl + << elem->fwd_helper_name () << "_life" << be_uidt_nl + << ">" << be_uidt << be_uidt_nl + << ">;" << be_uidt << be_uidt; + + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Seq_Out_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + << node->name () << "_var," << be_nl + << "TAO_Abstract_Manager<" << be_idt << be_idt_nl + << elem->name () << "," << be_nl + << elem->name () << "_var," << be_nl + << elem->fwd_helper_name () << "_life" << be_uidt_nl + << ">" << be_uidt << be_uidt_nl + << ">;" << be_uidt << be_uidt; + } } break; @@ -159,12 +175,58 @@ int be_visitor_sequence_cs::visit_sequence (be_sequence *node) break; case be_sequence::MNG_VALUE: - if (node->unbounded ()) - { - } - else - { - } + { + be_interface *elem = be_interface::narrow_from_decl (bt); + + if (node->unbounded ()) + { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Unbounded_Valuetype_Sequence<" << be_idt << be_idt_nl + << elem->name () << "," << be_nl + << elem->name () << "_var," << be_nl + << elem->fwd_helper_name () << "_life" << be_uidt_nl + << ">;" << be_uidt << be_uidt; + } + else + { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Bounded_Valuetype_Sequence<" << be_idt << be_idt_nl + << elem->name () << "," << be_nl + << elem->name () << "_var," << be_nl + << elem->fwd_helper_name () << "_life," << be_nl + << node->max_size ()->ev ()->u.ulval << be_uidt_nl + << ">;" << be_uidt << be_uidt; + } + + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_VarSeq_Var_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + << "TAO_Valuetype_Manager<" << be_idt << be_idt_nl + << elem->name () << "," << be_nl + << elem->name () << "_var," << be_nl + << elem->fwd_helper_name () << "_life" << be_uidt_nl + << ">" << be_uidt << be_uidt_nl + << ">;" << be_uidt << be_uidt; + + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Seq_Out_T<" << be_idt << be_idt_nl + << node->name () << "," << be_nl + << node->name () << "_var," << be_nl + << "TAO_Valuetype_Manager<" << be_idt << be_idt_nl + << elem->name () << "," << be_nl + << elem->name () << "_var," << be_nl + << elem->fwd_helper_name () << "_life" << be_uidt_nl + << ">" << be_uidt << be_uidt_nl + << ">;" << be_uidt << be_uidt; + } + } break; case be_sequence::MNG_STRING: @@ -190,26 +252,74 @@ int be_visitor_sequence_cs::visit_sequence (be_sequence *node) { if (node->unbounded ()) { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Unbounded_Array_Sequence<" + << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->fwd_helper_name () << "_life" << be_uidt_nl + << ">;" << be_uidt << be_uidt; } else { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Bounded_Array_Sequence<" + << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << bt->fwd_helper_name () << "_life," << be_nl + << node->max_size ()->ev ()->u.ulval << be_uidt_nl + << ">;" << be_uidt << be_uidt; } } else { if (node->unbounded ()) { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Unbounded_Sequence<" + << be_idt << be_idt_nl + << bt->name () << be_uidt_nl + << ">;" << be_uidt << be_uidt; } else { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Bounded_Sequence<" + << be_idt << be_idt_nl + << bt->name () << "," << be_nl + << node->max_size ()->ev ()->u.ulval << be_uidt_nl + << ">;" << be_uidt << be_uidt; } } + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "template class" << be_idt_nl + << (st == AST_Type::FIXED ? "TAO_FixedSeq_Var_T<" + : "TAO_VarSeq_Var_T<") + << be_idt << be_idt_nl + << node->local_name () << "," << be_nl + << bt->name () << be_uidt_nl + << ">;" << be_uidt << be_uidt; + + *os << be_nl << be_nl + << "template class" << be_idt_nl + << "TAO_Seq_Out_T<" << be_idt << be_idt_nl + << node->local_name () << "," << be_nl + << node->local_name () << "_var," << be_nl + << bt->name () << be_uidt_nl + << ">;" << be_uidt << be_uidt; + } + break; } - *os << be_uidt << be_uidt << be_uidt_nl - << "#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)" << be_nl; + os->gen_elif_AHETI (); switch (node->managed_type ()) { @@ -219,46 +329,54 @@ int be_visitor_sequence_cs::visit_sequence (be_sequence *node) if (node->unbounded ()) { - *os << "# pragma instantiate \\" << be_idt << be_idt_nl + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt << be_idt_nl << "TAO_Unbounded_Object_Sequence< \\" << be_idt << be_idt_nl << elem->name () << ", \\" << be_nl << elem->name () << "_var, \\" << be_nl << elem->fwd_helper_name () << "_life, \\" << be_nl << elem->fwd_helper_name () << "_cast, \\" << be_uidt_nl - << ">" << be_uidt << be_uidt << be_uidt << be_uidt_nl; + << ">" << be_uidt << be_uidt << be_uidt << be_uidt; } else { - *os << "# pragma instantiate \\" << be_idt << be_idt_nl + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt << be_idt_nl << "TAO_Bounded_Object_Sequence< \\" << be_idt << be_idt_nl << elem->name () << ", \\" << be_nl << elem->name () << "_var, \\" << be_nl << elem->fwd_helper_name () << "_life, \\" << be_nl << elem->fwd_helper_name () << "_cast \\" << be_nl << node->max_size ()->ev ()->u.ulval << " \\" << be_uidt_nl - << ">" << be_uidt << be_uidt << be_uidt << be_uidt_nl; + << ">" << be_uidt << be_uidt << be_uidt << be_uidt; } - *os << "# pragma instantiate \\" << be_idt << be_idt_nl - << "TAO_VarSeq_Var_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << "TAO_Object_Manager< \\" << be_idt << be_idt_nl - << elem->name () << ", \\" << be_nl - << elem->name () << "_var, \\" << be_nl - << elem->fwd_helper_name () << "_life \\" << be_uidt_nl - << "> \\" << be_uidt << be_uidt_nl - << ">" << be_uidt << be_uidt << be_uidt_nl; - - *os << "# pragma instantiate \\" << be_idt << be_idt_nl - << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << node->name () << "_var, \\" << be_nl - << "TAO_Object_Manager< \\" << be_idt << be_idt_nl - << elem->name () << ", \\" << be_nl - << elem->name () << "_var, \\" << be_nl - << elem->fwd_helper_name () << "_life \\" << be_uidt_nl - << "> \\" << be_uidt << be_uidt_nl - << ">"; + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt << be_idt_nl + << "TAO_VarSeq_Var_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + << "TAO_Object_Manager< \\" << be_idt << be_idt_nl + << elem->name () << ", \\" << be_nl + << elem->name () << "_var, \\" << be_nl + << elem->fwd_helper_name () << "_life \\" << be_uidt_nl + << "> \\" << be_uidt << be_uidt_nl + << ">" << be_uidt << be_uidt << be_uidt; + + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt << be_idt_nl + << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + << node->name () << "_var, \\" << be_nl + << "TAO_Object_Manager< \\" << be_idt << be_idt_nl + << elem->name () << ", \\" << be_nl + << elem->name () << "_var, \\" << be_nl + << elem->fwd_helper_name () << "_life \\" << be_uidt_nl + << "> \\" << be_uidt << be_uidt_nl + << ">" << be_uidt << be_uidt; + } } break; @@ -268,44 +386,52 @@ int be_visitor_sequence_cs::visit_sequence (be_sequence *node) if (node->unbounded ()) { - *os << "# pragma instantiate \\" << be_idt_nl + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl << "TAO_Unbounded_Abstract_Sequence< \\" << be_idt << be_idt_nl << elem->name () << ", \\" << be_nl << elem->name () << "_var, \\" << be_nl << elem->fwd_helper_name () << "_life \\" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl; + << ">" << be_uidt << be_uidt; } else { - *os << "# pragma instantiate \\" << be_idt_nl - << "TAO_Bounded_Object_Sequence< \\" << be_idt << be_idt_nl + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Bounded_Abstract_Sequence< \\" << be_idt << be_idt_nl << elem->name () << ", \\" << be_nl << elem->name () << "_var, \\" << be_nl << elem->fwd_helper_name () << "_life, \\" << be_nl << node->max_size ()->ev ()->u.ulval << " \\" << be_uidt_nl - << ">" << be_uidt << be_uidt_nl; + << ">" << be_uidt << be_uidt; } - *os << "# pragma instantiate \\" << be_idt_nl - << "TAO_VarSeq_Var_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << "TAO_Abstract_Manager< \\" << be_idt << be_idt_nl - << elem->name () << ", \\" << be_nl - << elem->name () << "_var, \\" << be_nl - << elem->fwd_helper_name () << "_life \\" << be_uidt_nl - << "> \\" << be_uidt << be_uidt_nl - << ">" << be_uidt << be_uidt_nl; - - *os << "# pragma instantiate \\" << be_idt_nl - << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl - << node->name () << ", \\" << be_nl - << node->name () << "_var, \\" << be_nl - << "TAO_Abstract_Manager< \\" << be_idt << be_idt_nl - << elem->name () << ", \\" << be_nl - << elem->name () << "_var, \\" << be_nl - << elem->fwd_helper_name () << "_life \\" << be_uidt_nl - << "> \\" << be_uidt << be_uidt_nl - << ">"; + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_VarSeq_Var_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + << "TAO_Abstract_Manager< \\" << be_idt << be_idt_nl + << elem->name () << ", \\" << be_nl + << elem->name () << "_var, \\" << be_nl + << elem->fwd_helper_name () << "_life \\" << be_uidt_nl + << "> \\" << be_uidt << be_uidt_nl + << ">" << be_uidt << be_uidt; + + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + << node->name () << "_var, \\" << be_nl + << "TAO_Abstract_Manager< \\" << be_idt << be_idt_nl + << elem->name () << ", \\" << be_nl + << elem->name () << "_var, \\" << be_nl + << elem->fwd_helper_name () << "_life \\" << be_uidt_nl + << "> \\" << be_uidt << be_uidt_nl + << ">" << be_uidt << be_uidt; + } } break; @@ -319,12 +445,58 @@ int be_visitor_sequence_cs::visit_sequence (be_sequence *node) break; case be_sequence::MNG_VALUE: - if (node->unbounded ()) - { - } - else - { - } + { + be_interface *elem = be_interface::narrow_from_decl (bt); + + if (node->unbounded ()) + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Unbounded_Valuetype_Sequence< \\" << be_idt << be_idt_nl + << elem->name () << ", \\" << be_nl + << elem->name () << "_var, \\" << be_nl + << elem->fwd_helper_name () << "_life \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; + } + else + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Bounded_Valuetype_Sequence< \\" << be_idt << be_idt_nl + << elem->name () << ", \\" << be_nl + << elem->name () << "_var, \\" << be_nl + << elem->fwd_helper_name () << "_life, \\" << be_nl + << node->max_size ()->ev ()->u.ulval << " \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; + } + + // Instantiate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_VarSeq_Var_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + << "TAO_Valuetype_Manager< \\" << be_idt << be_idt_nl + << elem->name () << ", \\" << be_nl + << elem->name () << "_var, \\" << be_nl + << elem->fwd_helper_name () << "_life \\" << be_uidt_nl + << "> \\" << be_uidt << be_uidt_nl + << ">" << be_uidt << be_uidt; + + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl + << node->name () << ", \\" << be_nl + << node->name () << "_var, \\" << be_nl + << "TAO_Valuetype_Manager< \\" << be_idt << be_idt_nl + << elem->name () << ", \\" << be_nl + << elem->name () << "_var, \\" << be_nl + << elem->fwd_helper_name () << "_life \\" << be_uidt_nl + << "> \\" << be_uidt << be_uidt_nl + << ">" << be_uidt << be_uidt; + } + } break; case be_sequence::MNG_STRING: @@ -350,26 +522,76 @@ int be_visitor_sequence_cs::visit_sequence (be_sequence *node) { if (node->unbounded ()) { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Unbounded_Array_Sequence< \\" + << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->fwd_helper_name () << "_life \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; } else { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Bounded_Array_Sequence< \\" + << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << bt->fwd_helper_name () << "_life, \\" << be_nl + << node->max_size ()->ev ()->u.ulval + << " \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; } } else { if (node->unbounded ()) { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Unbounded_Sequence< \\" + << be_idt << be_idt_nl + << bt->name () << " \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; } else { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Bounded_Sequence< \\" + << be_idt << be_idt_nl + << bt->name () << ", \\" << be_nl + << node->max_size ()->ev ()->u.ulval + << " \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; } } + // Generate the _var and _out types only if we are not anonymous. + if (this->ctx_->tdef () != 0) + { + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << (st == AST_Type::FIXED ? "TAO_FixedSeq_Var_T< \\" + : "TAO_VarSeq_Var_T< \\") + << be_idt << be_idt_nl + << node->local_name () << ", \\" << be_nl + << bt->name () << " \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; + + *os << be_nl << be_nl + << "# pragma instantiate \\" << be_idt_nl + << "TAO_Seq_Out_T< \\" << be_idt << be_idt_nl + << node->local_name () << ", \\" << be_nl + << node->local_name () << "_var, \\" << be_nl + << bt->name () << " \\" << be_uidt_nl + << ">" << be_uidt << be_uidt; + } + break; } - *os << be_uidt << be_uidt << be_uidt_nl - << "#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */"; + os->gen_endif_AHETI (); node->cli_stub_gen (1); return 0; diff --git a/TAO/TAO_IDL/be/be_visitor_structure/structure_ch.cpp b/TAO/TAO_IDL/be/be_visitor_structure/structure_ch.cpp index cba35e725bc..b146c76a047 100644 --- a/TAO/TAO_IDL/be/be_visitor_structure/structure_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_structure/structure_ch.cpp @@ -45,12 +45,14 @@ int be_visitor_structure_ch::visit_structure (be_structure *node) TAO_OutStream *os = this->ctx_->stream (); - *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl; + // Generate the _var and _out typedefs. + node->gen_common_varout (os); - *os << "class " << node->local_name () << "_var;" << be_nl << be_nl; + *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl + << "// " << __FILE__ << ":" << __LINE__; - *os << "struct " << be_global->stub_export_macro () << " " + *os << be_nl << be_nl + << "struct " << be_global->stub_export_macro () << " " << node->local_name () << be_nl << "{" << be_idt_nl; @@ -76,38 +78,6 @@ int be_visitor_structure_ch::visit_structure (be_structure *node) *os << be_uidt_nl; *os << "};"; - // Generate var definition. - if (node->gen_var_defn () == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_structure_ch::" - "visit_structure - " - "codegen for _var failed\n"), - -1); - } - - // A class is generated for an out defn only for a variable - // length struct. - if (node->size_type () == AST_Type::VARIABLE) - { - if (node->gen_out_defn () == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_structure_ch::" - "visit_structure - " - "codegen for _out failed\n"), - -1); - } - } - else - { - *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__ << be_nl << be_nl; - - *os << "typedef " << node->local_name () << " &" - << node->local_name () << "_out;"; - } - if (be_global->tc_support ()) { be_visitor_context ctx (*this->ctx_); diff --git a/TAO/TAO_IDL/be/be_visitor_structure/structure_ci.cpp b/TAO/TAO_IDL/be/be_visitor_structure/structure_ci.cpp index c80cd5f007d..66aedd493f2 100644 --- a/TAO/TAO_IDL/be/be_visitor_structure/structure_ci.cpp +++ b/TAO/TAO_IDL/be/be_visitor_structure/structure_ci.cpp @@ -38,39 +38,21 @@ be_visitor_structure_ci::~be_visitor_structure_ci (void) // visit the Structure node and its scope int be_visitor_structure_ci::visit_structure (be_structure *node) { - if (!node->cli_inline_gen () && !node->imported ()) + if (node->cli_inline_gen () || node->imported ()) { - if (node->gen_var_impl () == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_structure_ci::" - "visit_structure - " - "codegen for _var failed\n"), - -1); - } - - if (node->size_type () == AST_Type::VARIABLE && - node->gen_out_impl () == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_structure_ci::" - "visit_structure - " - "codegen for _out failed\n"), - -1); - } - - // all we have to do is to visit the scope - if (this->visit_scope (node) == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_structure_ci::" - "visit_structure - " - "codegen for scope failed\n"), - -1); - } + return 0; + } - node->cli_inline_gen (I_TRUE); + // All we have to do is to visit the scope. + if (this->visit_scope (node) == -1) + { + ACE_ERROR_RETURN ((LM_ERROR, + "(%N:%l) be_visitor_structure_ci::" + "visit_structure - " + "codegen for scope failed\n"), + -1); } + node->cli_inline_gen (I_TRUE); return 0; } diff --git a/TAO/TAO_IDL/be/be_visitor_structure/structure_cs.cpp b/TAO/TAO_IDL/be/be_visitor_structure/structure_cs.cpp index a160d3c2900..7db67b176ef 100644 --- a/TAO/TAO_IDL/be/be_visitor_structure/structure_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_structure/structure_cs.cpp @@ -88,6 +88,10 @@ be_visitor_structure_cs::visit_structure (be_structure *node) -1); } + // Generate the conditional explicit template instantiations for our + // _var and/or _out clases. + node->gen_common_tmplinst (os); + node->cli_stub_gen (I_TRUE); return 0; } diff --git a/TAO/TAO_IDL/be/be_visitor_structure_fwd.cpp b/TAO/TAO_IDL/be/be_visitor_structure_fwd.cpp index 3d9cd997639..85cb72ef70f 100644 --- a/TAO/TAO_IDL/be/be_visitor_structure_fwd.cpp +++ b/TAO/TAO_IDL/be/be_visitor_structure_fwd.cpp @@ -19,6 +19,7 @@ // ============================================================================ #include "be_structure_fwd.h" +#include "be_structure.h" #include "be_visitor_structure_fwd.h" #include "be_visitor_context.h" diff --git a/TAO/TAO_IDL/be/be_visitor_structure_fwd/structure_fwd_ch.cpp b/TAO/TAO_IDL/be/be_visitor_structure_fwd/structure_fwd_ch.cpp index a60ed387127..8c87e56dcfb 100644 --- a/TAO/TAO_IDL/be/be_visitor_structure_fwd/structure_fwd_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_structure_fwd/structure_fwd_ch.cpp @@ -44,17 +44,11 @@ be_visitor_structure_fwd_ch::visit_structure_fwd (be_structure_fwd *node) TAO_OutStream *os = this->ctx_->stream (); - if (node->cli_hdr_gen () || node->imported ()) - { - return 0; - } - - *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__; + be_structure *fd = + be_structure::narrow_from_decl (node->full_definition ()); - // Generate a forward declaration of the class. - *os << be_nl << be_nl - << "struct " << node->local_name () << ";"; + // This will be a no-op if it has already been done for this node. + fd->gen_common_varout (os); node->cli_hdr_gen (I_TRUE); return 0; diff --git a/TAO/TAO_IDL/be/be_visitor_union/union_ch.cpp b/TAO/TAO_IDL/be/be_visitor_union/union_ch.cpp index 87eee4b15e5..80381a7b6d3 100644 --- a/TAO/TAO_IDL/be/be_visitor_union/union_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_union/union_ch.cpp @@ -49,16 +49,14 @@ int be_visitor_union_ch::visit_union (be_union *node) TAO_OutStream *os = this->ctx_->stream (); - *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__; + // Generate _var and _out class typedefs. + node->gen_common_varout (os); // Generate the ifdefined macro for the union type. os->gen_ifdef_macro (node->flat_name ()); *os << be_nl << be_nl - << "class " << node->local_name () << "_var;" << be_nl << be_nl; - - *os << "class " << be_global->stub_export_macro () << " " + << "class " << be_global->stub_export_macro () << " " << node->local_name () << be_nl << "{" << be_nl << "public:" << be_idt_nl @@ -200,45 +198,6 @@ int be_visitor_union_ch::visit_union (be_union *node) os->gen_endif (); - // Generate the ifdefined macro for the _var type. - os->gen_ifdef_macro (node->flat_name (), "_var"); - - // Generate var definition. - if (node->gen_var_defn () == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_union_ch::" - "visit_union - " - "codegen for _var\n"), -1); - } - - os->gen_endif (); - - // Generate the ifdefined macro for the array type. - os->gen_ifdef_macro (node->flat_name (), "_out"); - - // A class is generated for an out defn only for a variable - // length struct. - if (node->size_type () == AST_Type::VARIABLE) - { - if (node->gen_out_defn () == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_union_ch::" - "visit_union - " - "codegen for _out\n"), -1); - } - } - else - { - *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__; - - *os << be_nl << be_nl << "typedef " << node->local_name () << " &" - << node->local_name () << "_out;"; - } - - os->gen_endif (); node->cli_hdr_gen (I_TRUE); return 0; } diff --git a/TAO/TAO_IDL/be/be_visitor_union/union_ci.cpp b/TAO/TAO_IDL/be/be_visitor_union/union_ci.cpp index f349e99661d..6333a8f4945 100644 --- a/TAO/TAO_IDL/be/be_visitor_union/union_ci.cpp +++ b/TAO/TAO_IDL/be/be_visitor_union/union_ci.cpp @@ -91,36 +91,6 @@ int be_visitor_union_ci::visit_union (be_union *node) -1); } - // Generate the ifdefined macro for the array type. - os->gen_ifdef_macro (node->flat_name (), "_var"); - - if (node->gen_var_impl () == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_union_ci::" - "visit_union - " - "codegen for _var failed\n"), - -1); - } - - os->gen_endif (); - - // Generate the ifdefined macro for the array type then generate the - // _out impl - os->gen_ifdef_macro (node->flat_name (), "_out"); - - if (node->size_type () == AST_Type::VARIABLE - && node->gen_out_impl () == -1) - { - ACE_ERROR_RETURN ((LM_ERROR, - "(%N:%l) be_visitor_union_ci::" - "visit_union - " - "codegen for _out failed\n"), - -1); - } - - os->gen_endif (); - node->cli_inline_gen (I_TRUE); return 0; } diff --git a/TAO/TAO_IDL/be/be_visitor_union/union_cs.cpp b/TAO/TAO_IDL/be/be_visitor_union/union_cs.cpp index b638b8807ac..34e4b8ecb44 100644 --- a/TAO/TAO_IDL/be/be_visitor_union/union_cs.cpp +++ b/TAO/TAO_IDL/be/be_visitor_union/union_cs.cpp @@ -292,6 +292,10 @@ int be_visitor_union_cs::visit_union (be_union *node) } } + // Generate conditional explicit template instantiations for our + // _var and/or _out classes. + node->gen_common_tmplinst (os); + node->cli_stub_gen (I_TRUE); return 0; } diff --git a/TAO/TAO_IDL/be/be_visitor_union_fwd.cpp b/TAO/TAO_IDL/be/be_visitor_union_fwd.cpp index 79ed60e34cc..e50944b28e9 100644 --- a/TAO/TAO_IDL/be/be_visitor_union_fwd.cpp +++ b/TAO/TAO_IDL/be/be_visitor_union_fwd.cpp @@ -19,6 +19,7 @@ // ============================================================================ #include "be_union_fwd.h" +#include "be_union.h" #include "be_visitor_union_fwd.h" #include "be_visitor_context.h" diff --git a/TAO/TAO_IDL/be/be_visitor_union_fwd/union_fwd_ch.cpp b/TAO/TAO_IDL/be/be_visitor_union_fwd/union_fwd_ch.cpp index 455b4fdec48..474c49e7075 100644 --- a/TAO/TAO_IDL/be/be_visitor_union_fwd/union_fwd_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_union_fwd/union_fwd_ch.cpp @@ -43,13 +43,10 @@ be_visitor_union_fwd_ch::visit_union_fwd (be_union_fwd *node) } TAO_OutStream *os = this->ctx_->stream (); + be_union *fd = be_union::narrow_from_decl (node->full_definition ()); - *os << be_nl << be_nl << "// TAO_IDL - Generated from" << be_nl - << "// " << __FILE__ << ":" << __LINE__; - - // Generate a forward declaration of the class. - *os << be_nl << be_nl - << "class " << node->local_name () << ";"; + // This will be a no-op if it has already been done for this node. + fd->gen_common_varout (os); node->cli_hdr_gen (I_TRUE); return 0; diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp index 733c020ea79..216fbd35b8d 100644 --- a/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_valuetype/valuetype_ch.cpp @@ -45,11 +45,9 @@ be_visitor_valuetype_ch::visit_valuetype (be_valuetype *node) return 0; } - if (node->var_out_seq_decls_gen () == 0) - { - node->gen_var_out_seq_decls (); - node->var_out_seq_decls_gen (1); - } + // This will be a no-op if it has alread by done by a forward + // declaration. + node->gen_var_out_seq_decls (); TAO_OutStream *os = this->ctx_->stream (); int status = 0; diff --git a/TAO/TAO_IDL/be/be_visitor_valuetype_fwd/valuetype_fwd_ch.cpp b/TAO/TAO_IDL/be/be_visitor_valuetype_fwd/valuetype_fwd_ch.cpp index a64d3b5a7c5..987845541cc 100644 --- a/TAO/TAO_IDL/be/be_visitor_valuetype_fwd/valuetype_fwd_ch.cpp +++ b/TAO/TAO_IDL/be/be_visitor_valuetype_fwd/valuetype_fwd_ch.cpp @@ -47,11 +47,8 @@ be_visitor_valuetype_fwd_ch::visit_valuetype_fwd (be_valuetype_fwd *node) AST_Interface *fd = node->full_definition (); be_valuetype *bfd = be_valuetype::narrow_from_decl (fd); - if (bfd->var_out_seq_decls_gen () == 0) - { - bfd->gen_var_out_seq_decls (); - bfd->var_out_seq_decls_gen (1); - } + // This will be a no-op if it has already been done for this node. + bfd->gen_var_out_seq_decls (); node->cli_hdr_gen (I_TRUE); return 0; diff --git a/TAO/TAO_IDL/be_include/be_component.h b/TAO/TAO_IDL/be_include/be_component.h index bddd9f35a66..6b36761bc1e 100644 --- a/TAO/TAO_IDL/be_include/be_component.h +++ b/TAO/TAO_IDL/be_include/be_component.h @@ -44,6 +44,9 @@ public: ~be_component (void); + virtual void redefine (AST_Interface *from); + // Catch BE-specific members before delegating to the base class. + // Cleanup function. virtual void destroy (void); diff --git a/TAO/TAO_IDL/be_include/be_helper.h b/TAO/TAO_IDL/be_include/be_helper.h index b2caf8864e6..c3fdaf52c6b 100644 --- a/TAO/TAO_IDL/be_include/be_helper.h +++ b/TAO/TAO_IDL/be_include/be_helper.h @@ -150,8 +150,8 @@ public: int gen_ifdef_AHETI (void); // generate the ACE_HAS_EXPLICIT... ifdef - int gen_else_AHETI (void); - // generate the ACE_HAS_EXPLICIT... else + int gen_elif_AHETI (void); + // generate the ACE_HAS_EXPLICIT... elif int gen_endif_AHETI (void); // generate the ACE_HAS_EXPLICIT... endif diff --git a/TAO/TAO_IDL/be_include/be_interface.h b/TAO/TAO_IDL/be_include/be_interface.h index 49a1a9c261d..a4a385f9575 100644 --- a/TAO/TAO_IDL/be_include/be_interface.h +++ b/TAO/TAO_IDL/be_include/be_interface.h @@ -99,7 +99,7 @@ public: const char *local_coll_name (int) const; // Retrieve the fully qualified collocated class name. - virtual const char *base_proxy_impl_name (void); + virtual const char *base_proxy_impl_name (void); // retrieve the name of the base proxy implementation. virtual const char *full_base_proxy_impl_name (void); @@ -217,6 +217,9 @@ public: void in_mult_inheritance (int mi); // Set a new value. + virtual void redefine (AST_Interface *from); + // Pass along BE-specific member values when redefining a fwd decl. + virtual void destroy (void); // Cleanup function. @@ -331,10 +334,6 @@ public: int has_mixed_parentage (void); // Do we have both abstract and concrete parents? - int var_out_seq_decls_gen (void) const; - void var_out_seq_decls_gen (int val); - // Accessors for the members. - private: void gen_gperf_input_header (TAO_OutStream *ss); // Output the header (type declaration and %%) to the gperf's input @@ -370,6 +369,10 @@ private: void gen_linear_search_instance (const char *flat_name); // Create an instance of the linear search optable. +protected: + int var_out_seq_decls_gen_; + // Have these been done already? + private: int skel_count_; // Number of static skeletons in the operation table. @@ -387,9 +390,6 @@ private: int has_mixed_parentage_; // Do we have both abstract and concrete parents? - - int var_out_seq_decls_gen_; - // Have these been done already? }; /** diff --git a/TAO/TAO_IDL/be_include/be_structure.h b/TAO/TAO_IDL/be_include/be_structure.h index 7d337d7e440..6a48bd892f7 100644 --- a/TAO/TAO_IDL/be_include/be_structure.h +++ b/TAO/TAO_IDL/be_include/be_structure.h @@ -42,19 +42,9 @@ public: idl_bool abstract); // Constructor. - virtual int gen_var_defn (char *local_name = 0); - // Generate the _var class definition. - - virtual int gen_var_impl (char *local_name = 0, - char *full_name = 0); - // Generate the implementation for the _var class. - - virtual int gen_out_defn (char *local_name = 0); - // Generate the _out class definition. - - virtual int gen_out_impl (char *local_name = 0, - char *full_name = 0); - // Generate the _out implementation. + virtual void redefine (AST_Structure *from); + // Copy BE-specific values when redefining struct or union + // from a forward declaration. virtual void destroy (void); // Cleanup method. diff --git a/TAO/TAO_IDL/be_include/be_type.h b/TAO/TAO_IDL/be_include/be_type.h index 34b06109515..5f5d0bfea5c 100644 --- a/TAO/TAO_IDL/be_include/be_type.h +++ b/TAO/TAO_IDL/be_include/be_type.h @@ -57,6 +57,12 @@ public: const char *fwd_helper_name (void) const; // Accessor to the member. + void gen_common_varout (TAO_OutStream *os); + // Generate _var and _out typedefs for structs and unions. + + void gen_common_tmplinst (TAO_OutStream *os); + // Generate explicit template instantiations for the above. + virtual AST_Decl::NodeType base_node_type (void) const; // Typedefs are tricky to handle, in many points their mapping // depend on base type they are aliasing. Since typedefs can be @@ -81,7 +87,10 @@ protected: // Typecode name. ACE_CString fwd_helper_name_; - // Calculate this in one place. + // Used by interfaces, valuetypes and arrays to name helper structs. + + idl_bool common_varout_gen_; + // Have we generated our _var and _out class typedefs yet? }; #endif // end of if !defined diff --git a/TAO/TAO_IDL/be_include/be_union.h b/TAO/TAO_IDL/be_include/be_union.h index 2901fa1bf2f..94153173192 100644 --- a/TAO/TAO_IDL/be_include/be_union.h +++ b/TAO/TAO_IDL/be_include/be_union.h @@ -43,19 +43,8 @@ public: idl_bool abstract); // Constructor. - virtual int gen_var_defn (char *local_name = 0); - // Generate the _var class definition. - - virtual int gen_var_impl (char *local_name = 0, - char *full_name = 0); - // Generate the implementation for the _var class. - - virtual int gen_out_defn (char *local_name = 0); - // Generate the _out class definition. - - virtual int gen_out_impl (char *local_name = 0, - char *full_name = 0); - // Generate the _out implementation. + virtual void redefine (AST_Structure *from); + // Catch BE-specific member values before delegating to the base class. virtual idl_bool has_duplicate_case_labels (void); // Do we have at least one member with multiple case labels? diff --git a/TAO/TAO_IDL/be_include/be_valuetype.h b/TAO/TAO_IDL/be_include/be_valuetype.h index 886b2e81ebd..5b7c2f4fdfd 100644 --- a/TAO/TAO_IDL/be_include/be_valuetype.h +++ b/TAO/TAO_IDL/be_include/be_valuetype.h @@ -144,10 +144,6 @@ public: // Helper method to generate *_skel operations for the concrete // interface that we support (if any) and those of its base classes. - int var_out_seq_decls_gen (void) const; - void var_out_seq_decls_gen (int val); - // Accessors for the members. - const char *fwd_helper_name (void) const; // Accessor to the member. diff --git a/TAO/tao/Sequence_T.cpp b/TAO/tao/Sequence_T.cpp index fa44243a940..d38b2ff5b85 100644 --- a/TAO/tao/Sequence_T.cpp +++ b/TAO/tao/Sequence_T.cpp @@ -97,6 +97,18 @@ TAO_Unbounded_Sequence<T>::~TAO_Unbounded_Sequence (void) template<typename T> void +TAO_Unbounded_Sequence<T>::_tao_any_destructor ( + void * _tao_void_pointer + ) +{ + typedef TAO_Unbounded_Sequence<T> THIS_SEQ_TYPE; + THIS_SEQ_TYPE *tmp = ACE_static_cast (THIS_SEQ_TYPE *, + _tao_void_pointer); + delete tmp; +} + +template<typename T> +void TAO_Unbounded_Sequence<T>::_allocate_buffer (CORBA::ULong length) { T * tmp = TAO_Unbounded_Sequence<T>::allocbuf (length); @@ -301,6 +313,18 @@ TAO_Bounded_Sequence<T, MAX>::~TAO_Bounded_Sequence (void) this->_deallocate_buffer (); } +template<typename T, size_t MAX> +void +TAO_Bounded_Sequence<T, MAX>::_tao_any_destructor ( + void * _tao_void_pointer + ) +{ + typedef TAO_Bounded_Sequence<T, MAX> THIS_SEQ_TYPE; + THIS_SEQ_TYPE *tmp = ACE_static_cast (THIS_SEQ_TYPE *, + _tao_void_pointer); + delete tmp; +} + template<typename T, size_t MAX> void TAO_Bounded_Sequence<T, MAX>::_allocate_buffer (CORBA::ULong) diff --git a/TAO/tao/Sequence_T.h b/TAO/tao/Sequence_T.h index d794d23dead..91f9825e0d7 100644 --- a/TAO/tao/Sequence_T.h +++ b/TAO/tao/Sequence_T.h @@ -77,6 +77,8 @@ public: /// Free the sequence. static void freebuf (T *); + static void _tao_any_destructor (void *); + /// Implement the TAO_Base_Sequence methods (see Sequence.h) virtual void _allocate_buffer (CORBA::ULong length); virtual void _deallocate_buffer (void); @@ -180,6 +182,8 @@ public: /// Free the sequence. static void freebuf (T *); + static void _tao_any_destructor (void *); + /// allocate a buffer of the requested length. The buffer is allocated for /// the right type virtual void _allocate_buffer (CORBA::ULong length); diff --git a/TAO/tao/VarOut_T.h b/TAO/tao/VarOut_T.h index 5868401ae75..0a061a59927 100644 --- a/TAO/tao/VarOut_T.h +++ b/TAO/tao/VarOut_T.h @@ -44,10 +44,11 @@ public: operator T & (); operator T & () const; - // in, inout, out, _retn + // Common mapping for fixed and variable size types. const T & in (void) const; T & inout (void); + // TAO extension. T * ptr (void) const; protected: @@ -76,13 +77,9 @@ public: TAO_Fixed_Var_T & operator= (const TAO_Fixed_Var_T<T> &); // Fixed-size types only. - TAO_Fixed_Var_T & operator= (const T &); - operator const T & () const; - operator T & (); - operator T & () const; - + // Mapping for fixed size types. T & out (void); T _retn (void); }; @@ -105,14 +102,10 @@ public: TAO_Var_Var_T & operator= (T *); TAO_Var_Var_T & operator= (const TAO_Var_Var_T<T> &); - operator const T & () const; - operator T & (); - operator T & () const; - // Variable size types only. - operator T *& (); + // Mapping for variable size types. T *& out (void); T * _retn (void); }; diff --git a/TAO/tao/VarOut_T.inl b/TAO/tao/VarOut_T.inl index 76546ce4d03..3fb5c1f5642 100644 --- a/TAO/tao/VarOut_T.inl +++ b/TAO/tao/VarOut_T.inl @@ -36,6 +36,27 @@ TAO_Var_Base_T<T>::operator-> (void) } template<typename T> +ACE_INLINE +TAO_Var_Base_T<T>::operator const T & () const +{ + return *this->ptr_; +} + +template<typename T> +ACE_INLINE +TAO_Var_Base_T<T>::operator T & () +{ + return *this->ptr_; +} + +template<typename T> +ACE_INLINE +TAO_Var_Base_T<T>::operator T & () const +{ + return *this->ptr_; +} + +template<typename T> ACE_INLINE const T & TAO_Var_Base_T<T>::in (void) const @@ -97,27 +118,6 @@ TAO_Fixed_Var_T<T>::operator= (T * p) return *this; } -template<typename T> -ACE_INLINE -TAO_Fixed_Var_T<T>::operator const T & () const -{ - return *this->ptr_; -} - -template<typename T> -ACE_INLINE -TAO_Fixed_Var_T<T>::operator T & () -{ - return *this->ptr_; -} - -template<typename T> -ACE_INLINE -TAO_Var_Base_T<T>::operator T & () const -{ - return *this->ptr_; -} - // Mapping for fixed size. template<typename T> ACE_INLINE @@ -164,27 +164,6 @@ TAO_Var_Var_T<T>::operator= (T * p) return *this; } -template<typename T> -ACE_INLINE -TAO_Var_Var_T<T>::operator const T & () const -{ - return *this->ptr_; -} - -template<typename T> -ACE_INLINE -TAO_Var_Var_T<T>::operator T & () -{ - return *this->ptr_; -} - -template<typename T> -ACE_INLINE -TAO_Var_Var_T<T>::operator T & () const -{ - return *this->ptr_; -} - // Variable-size types only. template<typename T> ACE_INLINE |