diff options
author | Ossama Othman <ossama-othman@users.noreply.github.com> | 2005-05-07 04:31:06 +0000 |
---|---|---|
committer | Ossama Othman <ossama-othman@users.noreply.github.com> | 2005-05-07 04:31:06 +0000 |
commit | d831cfcfe729e7b12d3d2a94b058b732363f4e83 (patch) | |
tree | 09d7dff69db2c9e62a373a72ae99cfe51ac6f376 | |
parent | 1efddae7e9b1c8db189b04b5c1ead3485cc777a8 (diff) | |
download | ATCD-d831cfcfe729e7b12d3d2a94b058b732363f4e83.tar.gz |
ChangeLogTag:Fri May 6 18:28:11 2005 Ossama Othman <ossama@dre.vanderbilt.edu>
-rw-r--r-- | TAO/ChangeLog | 32 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_codegen.cpp | 10 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_typecode/struct_typecode.cpp | 43 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_typecode/typecode_defn.cpp | 68 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_typecode/union_typecode.cpp | 43 | ||||
-rw-r--r-- | TAO/TAO_IDL/be/be_visitor_typecode/value_typecode.cpp | 46 | ||||
-rw-r--r-- | TAO/TAO_IDL/be_include/be_visitor_typecode/struct_typecode.h | 7 | ||||
-rw-r--r-- | TAO/TAO_IDL/be_include/be_visitor_typecode/typecode_defn.h | 7 | ||||
-rw-r--r-- | TAO/TAO_IDL/be_include/be_visitor_typecode/union_typecode.h | 3 | ||||
-rw-r--r-- | TAO/TAO_IDL/be_include/be_visitor_typecode/value_typecode.h | 3 | ||||
-rw-r--r-- | TAO/TAO_IDL/include/idl_global.h | 1 | ||||
-rw-r--r-- | TAO/TAO_IDL/util/utl_global.cpp | 1 | ||||
-rw-r--r-- | TAO/tao/Recursive_Type_TypeCode.cpp | 4 | ||||
-rw-r--r-- | TAO/tao/Recursive_Type_TypeCode.h | 15 | ||||
-rw-r--r-- | TAO/tao/Recursive_Type_TypeCode.inl | 8 |
15 files changed, 221 insertions, 70 deletions
diff --git a/TAO/ChangeLog b/TAO/ChangeLog index e0cbeb9c336..5efd27af1e8 100644 --- a/TAO/ChangeLog +++ b/TAO/ChangeLog @@ -1,3 +1,35 @@ +Fri May 6 18:28:11 2005 Ossama Othman <ossama@dre.vanderbilt.edu> + + * TAO_IDL/be/be_codegen.cpp: + + Generate include directive for "tao/Recursive_Type_TypeCode.h" + if any struct, union or valuetype is seen. + + * TAO_IDL/be/be_visitor_typecode/struct_typecode.cpp: + * TAO_IDL/be/be_visitor_typecode/typecode_defn.cpp: + * TAO_IDL/be/be_visitor_typecode/union_typecode.cpp: + * TAO_IDL/be/be_visitor_typecode/value_typecode.cpp: + * TAO_IDL/be_include/be_visitor_typecode/struct_typecode.h: + * TAO_IDL/be_include/be_visitor_typecode/typecode_defn.h: + * TAO_IDL/be_include/be_visitor_typecode/union_typecode.h: + * TAO_IDL/be_include/be_visitor_typecode/value_typecode.h: + + Added recursive type TypeCode support. + + * TAO_IDL/include/idl_global.h: + * TAO_IDL/util/utl_global.cpp: + + Added new "recursive_type_seen_" flag for use in determining + whether Recursive_Type_TypeCode.h header should be included. + + * tao/Recursive_Type_TypeCode.cpp: + * tao/Recursive_Type_TypeCode.h: + * tao/Recursive_Type_TypeCode.inl: + + Added missing include directives. + + Fixed syntax errors. + Fri May 6 13:18:23 2005 Ossama Othman <ossama@dre.vanderbilt.edu> * tao/TypeCode_Case.inl: diff --git a/TAO/TAO_IDL/be/be_codegen.cpp b/TAO/TAO_IDL/be/be_codegen.cpp index c719d0fd582..fb86ff32f92 100644 --- a/TAO/TAO_IDL/be/be_codegen.cpp +++ b/TAO/TAO_IDL/be/be_codegen.cpp @@ -2043,4 +2043,14 @@ TAO_CodeGen::gen_typecode_includes (TAO_OutStream * stream) this->gen_cond_file_include (idl_global->valuetype_seen_, "tao/TypeCode_Value_Field.h", stream); + + // @@ Until we get idl_global->recursive_type_seen_ set + // automatically, include Recursive_Type_TypeCode.h whenever a + // struct, union or valuetype is seen, just in case. + this->gen_cond_file_include (idl_global->aggregate_seen_ + | idl_global->union_seen_ + | idl_global->valuetype_seen_, // idl_global->recursive_type_seen_, + "tao/Recursive_Type_TypeCode.h", + stream); + } diff --git a/TAO/TAO_IDL/be/be_visitor_typecode/struct_typecode.cpp b/TAO/TAO_IDL/be/be_visitor_typecode/struct_typecode.cpp index 72d1fa7dfa7..acf9272f7e7 100644 --- a/TAO/TAO_IDL/be/be_visitor_typecode/struct_typecode.cpp +++ b/TAO/TAO_IDL/be/be_visitor_typecode/struct_typecode.cpp @@ -20,6 +20,7 @@ TAO::be_visitor_struct_typecode::be_visitor_struct_typecode ( be_visitor_context * ctx) : be_visitor_typecode_defn (ctx) , in_recursion_ (false) + , is_recursive_ (false) { } @@ -31,11 +32,12 @@ TAO::be_visitor_struct_typecode::visit_structure (be_structure * node) if (this->in_recursion_) { - // Nothing to do yet. + // This works because the same visitor instance is used for the + // top-level TypeCode and the indirected TypeCode in the member + // containing the recursive type (e.g. an anonymous sequence). + + this->is_recursive_ = true; - /** - * @todo Merge recursive struct TypeCode generation code. - */ return 0; } else @@ -105,14 +107,35 @@ TAO::be_visitor_struct_typecode::visit (AST_Structure * node, << "};" << be_uidt_nl; } + static char const StringType[] = "char const *"; + static char const TypeCodeType[] = "CORBA::TypeCode_ptr const *"; + static char const MemberArrayType[] = + "TAO::TypeCode::Struct_Field<char const *, " + "CORBA::TypeCode_ptr const *> const *"; + // Generate the TypeCode instantiation. + os << "static "; + + if (this->is_recursive_) + { + os << "TAO::TypeCode::Recursive_Type<" << be_idt_nl; + } + + // -- TypeCodeBase -- + os + << "TAO::TypeCode::Struct<" << StringType << "," << be_nl + << " " << TypeCodeType << "," << be_nl + << " " << MemberArrayType << "," << be_nl + << " TAO::Null_RefCount_Policy>"; + + if (this->is_recursive_) + { + os << "," << be_nl + << TypeCodeType << "," << be_nl + << MemberArrayType << " >" << be_uidt_nl; + } + os - << "static TAO::TypeCode::Struct<char const *," << be_nl - << " CORBA::TypeCode_ptr const *," << be_nl - << " TAO::TypeCode::Struct_Field<char const *," - << be_nl - << " CORBA::TypeCode_ptr const *> const *," << be_nl - << " TAO::Null_RefCount_Policy>" << be_idt_nl << "_tao_tc_" << node->flat_name () << " (" << be_idt_nl << "CORBA::tk_" << (is_exception ? "except" : "struct") << "," diff --git a/TAO/TAO_IDL/be/be_visitor_typecode/typecode_defn.cpp b/TAO/TAO_IDL/be/be_visitor_typecode/typecode_defn.cpp index d11e172d084..4308a82c785 100644 --- a/TAO/TAO_IDL/be/be_visitor_typecode/typecode_defn.cpp +++ b/TAO/TAO_IDL/be/be_visitor_typecode/typecode_defn.cpp @@ -66,6 +66,7 @@ Scoped_Compute_Queue_Guard::~Scoped_Compute_Queue_Guard (void) be_visitor_typecode_defn::be_visitor_typecode_defn (be_visitor_context * ctx) : be_visitor_scope (ctx), + recursion_detect_ (false), computed_tc_size_ (0), computed_encap_len_ (0), computed_scope_encap_len_ (0), @@ -940,6 +941,9 @@ be_visitor_typecode_defn::visit_sequence (be_sequence * node) -1); } + if (this->recursion_detect_) + return 0; // Nothing else to do. + // Multiple definition guards. // @todo Can we automate duplicate detection within the IDL compiler // itself? @@ -985,7 +989,7 @@ be_visitor_typecode_defn::visit_sequence (be_sequence * node) << "}" << be_nl << be_nl; os << "\n#endif /* _TAO_TYPECODE_" << node->flat_name () << "_GUARD */" - << be_nl; + << be_nl << be_nl; return 0; // this->gen_typecode_ptr (node); } @@ -1000,6 +1004,9 @@ be_visitor_typecode_defn::visit_string (be_string * node) return 0; } + if (this->recursion_detect_) + return 0; // Nothing else to do. + TAO_OutStream & os = *this->ctx_->stream (); os << be_nl << be_nl @@ -1039,7 +1046,7 @@ be_visitor_typecode_defn::visit_string (be_string * node) << "}" << be_nl << be_nl; os << "\n#endif /* _TAO_TYPECODE_" << node->flat_name () << "_GUARD */" - << be_nl; + << be_nl << be_nl; return 0; // this->gen_typecode_ptr (node); } @@ -1055,34 +1062,37 @@ be_visitor_typecode_defn::visit_structure (be_structure * node) return this->gen_forward_declared_typecode (node); } -// int -// be_visitor_typecode_defn::visit_typedef (be_typedef *node) -// { -// switch (this->ctx_->sub_state ()) -// { -// case TAO_CodeGen::TAO_TC_DEFN_TYPECODE: -// return this->visit_type (node); -// case TAO_CodeGen::TAO_TC_DEFN_TYPECODE_NESTED: -// return this->gen_typecode (node); -// case TAO_CodeGen::TAO_TC_DEFN_ENCAPSULATION: -// return this->gen_encapsulation (node); -// case TAO_CodeGen::TAO_TC_DEFN_TC_SIZE: -// this->computed_tc_size_ = this->compute_tc_size (node); -// return ((this->computed_tc_size_ > 0) ? 0 : -1); -// case TAO_CodeGen::TAO_TC_DEFN_ENCAP_LEN: -// this->computed_encap_len_ = this->compute_encap_length (node); -// return ((this->computed_encap_len_ > 0) ? 0 : -1); -// default: -// // error -// break; -// } +int +be_visitor_typecode_defn::visit_typedef (be_typedef *node) +{ + // Only used for recursion detection. -// ACE_ERROR_RETURN ((LM_ERROR, -// ACE_TEXT ("(%N:%l) be_visitor_typecode_defn::") -// ACE_TEXT ("visit - bad sub state ") -// ACE_TEXT ("in visitor context\n")), -// -1); -// } + // The only base types with no-op visitors that will be potentially + // visited are strings and sequences. All others have their own + // full-fledged visitors (e.g. objref_typecode, etc.) + + this->recursion_detect_ = true; + + be_type * const base = be_type::narrow_from_decl (node->base_type ()); + + // Generate typecode for the base type, being careful to avoid doing + // so a for a typedef since that could recursively cause multiple + // base type TypeCode definitions to be generated. + if (!base || (base->accept (this) == -1)) + { + this->recursion_detect_ = false; + + ACE_ERROR_RETURN ((LM_ERROR, + ACE_TEXT ("(%N:%l) be_visitor_typecode_defn") + ACE_TEXT ("::visit_typedef) - ") + ACE_TEXT ("failed to visit base typecode\n")), + -1); + } + + this->recursion_detect_ = false; + + return 0; +} int be_visitor_typecode_defn::visit_union (be_union *node) diff --git a/TAO/TAO_IDL/be/be_visitor_typecode/union_typecode.cpp b/TAO/TAO_IDL/be/be_visitor_typecode/union_typecode.cpp index 51a909b9bee..0d252952277 100644 --- a/TAO/TAO_IDL/be/be_visitor_typecode/union_typecode.cpp +++ b/TAO/TAO_IDL/be/be_visitor_typecode/union_typecode.cpp @@ -17,6 +17,7 @@ TAO::be_visitor_union_typecode::be_visitor_union_typecode ( be_visitor_context * ctx) : be_visitor_typecode_defn (ctx) , in_recursion_ (false) + , is_recursive_ (false) { } @@ -28,11 +29,12 @@ TAO::be_visitor_union_typecode::visit_union (be_union * node) if (this->in_recursion_) { - // Nothing to do yet. + // This works because the same visitor instance is used for the + // top-level TypeCode and the indirected TypeCode in the member + // containing the recursive type (e.g. an anonymous sequence). + + this->is_recursive_ = true; - /** - * @todo Merge recursive union TypeCode generation code. - */ return 0; } else @@ -62,14 +64,35 @@ TAO::be_visitor_union_typecode::visit_union (be_union * node) if (this->visit_cases (node) != 0) return -1; + static char const StringType[] = "char const *"; + static char const TypeCodeType[] = "CORBA::TypeCode_ptr const *"; + static char const MemberArrayType[] = + "TAO::TypeCode::Case<char const *, " + "CORBA::TypeCode_ptr const *> const * const *"; + // Generate the TypeCode instantiation. + os << "static "; + + if (this->is_recursive_) + { + os << "TAO::TypeCode::Recursive_Type<" << be_idt_nl; + } + + // -- TypeCodeBase -- + os + << "TAO::TypeCode::Union<" << StringType << "," << be_nl + << " " << TypeCodeType << "," << be_nl + << " " << MemberArrayType << "," << be_nl + << " TAO::Null_RefCount_Policy>"; + + if (this->is_recursive_) + { + os << "," << be_nl + << TypeCodeType << "," << be_nl + << MemberArrayType << " >" << be_uidt_nl; + } + os - << "static TAO::TypeCode::Union<char const *," << be_nl - << " CORBA::TypeCode_ptr const *," << be_nl - << " TAO::TypeCode::Case<char const *," << be_nl - << " CORBA::TypeCode_ptr const *>" - << " const * const *," << be_nl - << " TAO::Null_RefCount_Policy>" << be_idt_nl << "_tao_tc_" << node->flat_name () << " (" << be_idt_nl << "\"" << node->repoID () << "\"," << be_nl diff --git a/TAO/TAO_IDL/be/be_visitor_typecode/value_typecode.cpp b/TAO/TAO_IDL/be/be_visitor_typecode/value_typecode.cpp index 23a101d2473..0712c23671b 100644 --- a/TAO/TAO_IDL/be/be_visitor_typecode/value_typecode.cpp +++ b/TAO/TAO_IDL/be/be_visitor_typecode/value_typecode.cpp @@ -20,6 +20,7 @@ TAO::be_visitor_value_typecode::be_visitor_value_typecode ( be_visitor_context * ctx) : be_visitor_typecode_defn (ctx) , in_recursion_ (false) + , is_recursive_ (false) { } @@ -31,11 +32,12 @@ TAO::be_visitor_value_typecode::visit_valuetype (be_valuetype * node) if (this->in_recursion_) { - // Nothing to do yet. + // This works because the same visitor instance is used for the + // top-level TypeCode and the indirected TypeCode in the member + // containing the recursive type (e.g. an anonymous sequence). + + this->is_recursive_ = true; - /** - * @todo Merge recursive union TypeCode generation code. - */ return 0; } else @@ -120,14 +122,34 @@ TAO::be_visitor_value_typecode::visit_valuetype (be_valuetype * node) // Generate the TypeCode instantiation. - os << be_nl - << "static TAO::TypeCode::Value<char const *," << be_nl - << " CORBA::TypeCode_ptr const *," << be_nl - << " TAO::TypeCode::Value_Field<char const *," - << be_nl - << " CORBA::TypeCode_ptr const *> const *," << be_nl - << " TAO::Null_RefCount_Policy>" - << be_idt_nl + static char const StringType[] = "char const *"; + static char const TypeCodeType[] = "CORBA::TypeCode_ptr const *"; + static char const MemberArrayType[] = + "TAO::TypeCode::Value_Field<char const *, " + "CORBA::TypeCode_ptr const *> const *"; + + os << "static "; + + if (this->is_recursive_) + { + os << "TAO::TypeCode::Recursive_Type<" << be_idt_nl; + } + + // -- TypeCodeBase -- + os + << "TAO::TypeCode::Value<" << StringType << "," << be_nl + << " " << TypeCodeType << "," << be_nl + << " " << MemberArrayType << "," << be_nl + << " TAO::Null_RefCount_Policy>"; + + if (this->is_recursive_) + { + os << "," << be_nl + << TypeCodeType << "," << be_nl + << MemberArrayType << " >" << be_uidt_nl; + } + + os << be_idt_nl << "_tao_tc_" << node->flat_name () << " (" << be_idt_nl << "CORBA::tk_" << (dynamic_cast<be_eventtype *> (node) ? "event" : "value") diff --git a/TAO/TAO_IDL/be_include/be_visitor_typecode/struct_typecode.h b/TAO/TAO_IDL/be_include/be_visitor_typecode/struct_typecode.h index a4f06b6b244..c0b8bce7769 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_typecode/struct_typecode.h +++ b/TAO/TAO_IDL/be_include/be_visitor_typecode/struct_typecode.h @@ -78,6 +78,13 @@ namespace TAO */ bool in_recursion_; + /// @c true if the struct is recursive. + /** + * @note Only applies for struct TypeCodes. Exceptions cannot be + * recursive. + */ + bool is_recursive_; + }; } diff --git a/TAO/TAO_IDL/be_include/be_visitor_typecode/typecode_defn.h b/TAO/TAO_IDL/be_include/be_visitor_typecode/typecode_defn.h index aaf0410ae05..e97ea40da5b 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_typecode/typecode_defn.h +++ b/TAO/TAO_IDL/be_include/be_visitor_typecode/typecode_defn.h @@ -90,6 +90,9 @@ public: virtual int visit_structure (be_structure *node); // visit a structure + // visit a typedef + virtual int visit_typedef (be_typedef *node); + virtual int visit_union (be_union *node); // visit a union @@ -295,10 +298,12 @@ protected: bool is_typecode_generation_required (be_type * node); private: - // friend class Scoped_Compute_Queue_Guard; + /// @c true if we are detecting recursion. + bool recursion_detect_; + ACE_CDR::Long computed_tc_size_; // the tc size of the node under consideration diff --git a/TAO/TAO_IDL/be_include/be_visitor_typecode/union_typecode.h b/TAO/TAO_IDL/be_include/be_visitor_typecode/union_typecode.h index 61a8e2093b7..25be2ddfa98 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_typecode/union_typecode.h +++ b/TAO/TAO_IDL/be_include/be_visitor_typecode/union_typecode.h @@ -57,6 +57,9 @@ namespace TAO /// this visitor. bool in_recursion_; + /// @c true if the union is recursive. + bool is_recursive_; + }; } diff --git a/TAO/TAO_IDL/be_include/be_visitor_typecode/value_typecode.h b/TAO/TAO_IDL/be_include/be_visitor_typecode/value_typecode.h index b8f19e1c10e..25cd8381fa0 100644 --- a/TAO/TAO_IDL/be_include/be_visitor_typecode/value_typecode.h +++ b/TAO/TAO_IDL/be_include/be_visitor_typecode/value_typecode.h @@ -57,6 +57,9 @@ namespace TAO /// generated using this visitor. bool in_recursion_; + /// @c true if the valuetype or eventtype is recursive. + bool is_recursive_; + }; } diff --git a/TAO/TAO_IDL/include/idl_global.h b/TAO/TAO_IDL/include/idl_global.h index 735c0045cfe..b838cd8fe82 100644 --- a/TAO/TAO_IDL/include/idl_global.h +++ b/TAO/TAO_IDL/include/idl_global.h @@ -300,6 +300,7 @@ public: bool octet_seq_seen_; bool operation_seen_; bool pseudo_seq_seen_; + bool recursive_type_seen_; bool seq_seen_; bool short_seq_seen_; bool special_basic_arg_seen_; diff --git a/TAO/TAO_IDL/util/utl_global.cpp b/TAO/TAO_IDL/util/utl_global.cpp index 78fc80d1d9c..777d297ea57 100644 --- a/TAO/TAO_IDL/util/utl_global.cpp +++ b/TAO/TAO_IDL/util/utl_global.cpp @@ -232,6 +232,7 @@ IDL_GlobalData::reset_flag_seen (void) octet_seq_seen_ = false; operation_seen_ = false; pseudo_seq_seen_ = false; + recursive_type_seen_ = false; seq_seen_ = false; short_seq_seen_ = false; special_basic_arg_seen_ = false; diff --git a/TAO/tao/Recursive_Type_TypeCode.cpp b/TAO/tao/Recursive_Type_TypeCode.cpp index 21032d64309..e554dfaaaae 100644 --- a/TAO/tao/Recursive_Type_TypeCode.cpp +++ b/TAO/tao/Recursive_Type_TypeCode.cpp @@ -6,13 +6,15 @@ # include "tao/Recursive_Type_TypeCode.inl" #endif /* __ACE_INLINE__ */ +#include "tao/CDR.h" + template <class TypeCodeBase, typename TypeCodeType, typename MemberArrayType> bool TAO::TypeCode::Recursive_Type<TypeCodeBase, TypeCodeType, MemberArrayType>::tao_marshal ( - TAO_Output & cdr) const + TAO_OutputCDR & cdr) const { ACE_GUARD_RETURN (TAO_SYNCH_RECURSIVE_MUTEX, guard, diff --git a/TAO/tao/Recursive_Type_TypeCode.h b/TAO/tao/Recursive_Type_TypeCode.h index f6321ec2be1..e8b2a8e1ec5 100644 --- a/TAO/tao/Recursive_Type_TypeCode.h +++ b/TAO/tao/Recursive_Type_TypeCode.h @@ -13,11 +13,12 @@ */ //============================================================================= -#ifndef TAO_RECURSIVE_TYPECODE_H -#define TAO_RECURSIVE_TYPECODE_H +#ifndef TAO_RECURSIVE_TYPE_TYPECODE_H +#define TAO_RECURSIVE_TYPE_TYPECODE_H #include /**/ "ace/pre.h" +#include "ace/Recursive_Thread_Mutex.h" namespace TAO { @@ -137,6 +138,14 @@ namespace TAO # include "tao/Recursive_Type_TypeCode.inl" #endif /* __ACE_INLINE__ */ +#ifdef ACE_TEMPLATES_REQUIRE_SOURCE +# include "tao/Recursive_Type_TypeCode.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#ifdef ACE_TEMPLATES_REQUIRE_PRAGMA +# pragma implementation ("Recursive_Type_TypeCode.cpp") +#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */ + #include /**/ "ace/post.h" -#endif /* TAO_RECURSIVE_TYPECODE_H */ +#endif /* TAO_RECURSIVE_TYPE_TYPECODE_H */ diff --git a/TAO/tao/Recursive_Type_TypeCode.inl b/TAO/tao/Recursive_Type_TypeCode.inl index ca82c860b99..73d9fd699d4 100644 --- a/TAO/tao/Recursive_Type_TypeCode.inl +++ b/TAO/tao/Recursive_Type_TypeCode.inl @@ -6,7 +6,7 @@ template <class TypeCodeBase, typename TypeCodeType, typename MemberArrayType> ACE_INLINE TAO::TypeCode::Recursive_Type<TypeCodeBase, TypeCodeType, - MemberArrayType>::RecursiveType ( + MemberArrayType>::Recursive_Type ( CORBA::TCKind kind, char const * id, char const * name, @@ -24,7 +24,7 @@ template <class TypeCodeBase, typename TypeCodeType, typename MemberArrayType> ACE_INLINE TAO::TypeCode::Recursive_Type<TypeCodeBase, TypeCodeType, - MemberArrayType>::RecursiveType ( + MemberArrayType>::Recursive_Type ( char const * id, char const * name, #if defined (__BORLANDC__) && (__BORLANDC__ < 0x572) @@ -51,7 +51,7 @@ template <class TypeCodeBase, typename TypeCodeType, typename MemberArrayType> ACE_INLINE TAO::TypeCode::Recursive_Type<TypeCodeBase, TypeCodeType, - MemberArrayType>::RecursiveType ( + MemberArrayType>::Recursive_Type ( CORBA::TCKind kind, char const * id, char const * name, @@ -63,7 +63,7 @@ TAO::TypeCode::Recursive_Type<TypeCodeBase, #endif MemberArrayType const & fields, CORBA::ULong nfields) - TypeCodeBase (kind, + : TypeCodeBase (kind, id, name, modifier, |