summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--TAO/TAOACE.dsw3
-rw-r--r--TAO/examples/TypeCode_Creation/main.cpp51
-rw-r--r--TAO/examples/TypeCode_Creation/test.idl9
-rw-r--r--TAO/orbsvcs/IFR_Service/AttributeDef_i.cpp6
-rw-r--r--TAO/orbsvcs/IFR_Service/ConstantDef_i.cpp2
-rw-r--r--TAO/orbsvcs/IFR_Service/Contained_i.cpp2
-rw-r--r--TAO/orbsvcs/IFR_Service/Container_i.cpp30
-rw-r--r--TAO/orbsvcs/IFR_Service/ExceptionDef_i.cpp2
-rw-r--r--TAO/orbsvcs/IFR_Service/InterfaceDef_i.cpp6
-rw-r--r--TAO/orbsvcs/IFR_Service/OperationDef_i.cpp6
-rw-r--r--TAO/orbsvcs/IFR_Service/Repository_i.cpp10
-rw-r--r--TAO/orbsvcs/IFR_Service/UnionDef_i.cpp2
-rw-r--r--TAO/orbsvcs/IFR_Service/ifr_adding_visitor.cpp30
-rw-r--r--TAO/orbsvcs/IFR_Service/ifr_adding_visitor_exception.cpp18
-rw-r--r--TAO/orbsvcs/IFR_Service/ifr_adding_visitor_operation.cpp8
-rw-r--r--TAO/orbsvcs/IFR_Service/ifr_adding_visitor_structure.cpp18
-rw-r--r--TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.cpp20
-rw-r--r--TAO/orbsvcs/tests/InterfaceRepo/IFR_Test/Admin_Client.cpp31
-rw-r--r--TAO/tao/TypeCodeFactory/TypeCodeFactory_i.cpp725
-rw-r--r--TAO/tao/TypeCodeFactory/TypeCodeFactory_i.h24
20 files changed, 808 insertions, 195 deletions
diff --git a/TAO/TAOACE.dsw b/TAO/TAOACE.dsw
index c123287a4c9..bfd69242f4e 100644
--- a/TAO/TAOACE.dsw
+++ b/TAO/TAOACE.dsw
@@ -459,9 +459,6 @@ Package=<5>
Package=<4>
{{{
Begin Project Dependency
- Project_Dep_Name TypeCodeFactory_DLL
- End Project Dependency
- Begin Project Dependency
Project_Dep_Name Svc Utils
End Project Dependency
Begin Project Dependency
diff --git a/TAO/examples/TypeCode_Creation/main.cpp b/TAO/examples/TypeCode_Creation/main.cpp
index 079fb85fdea..52112b176e0 100644
--- a/TAO/examples/TypeCode_Creation/main.cpp
+++ b/TAO/examples/TypeCode_Creation/main.cpp
@@ -16,37 +16,68 @@ int main(int argc, char *argv[])
ACE_TRY_ENV);
ACE_TRY_CHECK;
- CORBA::TypeCode_ptr iface_tc =
+ CORBA::TypeCode_var iface_tc =
orb->create_interface_tc (CORBA::string_dup ("IDL:iface:1.0"),
CORBA::string_dup ("iface"),
ACE_TRY_ENV);
ACE_TRY_CHECK;
- CORBA::ULong length = 2;
+ CORBA::ULong length = 5;
- CORBA::StructMemberSeq foo_members (length);
+ CORBA::UnionMemberSeq foo_members (length);
foo_members.length (length);
+ // The first three members are multiple case labels for a
+ // single string member. The label values are not in order
+ // or consecutive.
+
foo_members[0].name = CORBA::string_dup ("foo_str_member");
+
+ // The type member of the UnionMember takes ownership.
foo_members[0].type = CORBA::TypeCode::_duplicate (CORBA::_tc_string);
// Not needed for ORB-created typecodes
// (see CORBA 2.4.2 section 10.7.3).
foo_members[0].type_def = CORBA::IDLType::_nil ();
+ CORBA::Short label_value = -3;
+ foo_members[0].label <<= label_value;
- foo_members[1].name = CORBA::string_dup ("foo_iface_member");
-
- // StructMember.type takes ownership.
- foo_members[1].type = iface_tc;
-
+ foo_members[1].name = CORBA::string_dup ("foo_str_member");
+ foo_members[1].type = CORBA::TypeCode::_duplicate (CORBA::_tc_string);
foo_members[1].type_def = CORBA::IDLType::_nil ();
-
- CORBA::TypeCode_ptr foo_tc = orb->create_struct_tc ("IDL:foo:1.0",
+ label_value = 4;
+ foo_members[1].label <<= label_value;
+
+ foo_members[2].name = CORBA::string_dup ("foo_str_member");
+ foo_members[2].type = CORBA::TypeCode::_duplicate (CORBA::_tc_string);
+ foo_members[2].type_def = CORBA::IDLType::_nil ();
+ label_value = -1;
+ foo_members[2].label <<= label_value;
+
+ // The default member.
+ foo_members[3].name = CORBA::string_dup ("foo_iface_member");
+ foo_members[3].type = CORBA::TypeCode::_duplicate (iface_tc.in ());
+ foo_members[3].type_def = CORBA::IDLType::_nil ();
+ CORBA::Octet default_label_value = 0;
+ foo_members[3].label <<= CORBA::Any::from_octet (default_label_value);
+
+ // The last member is the same type as the previous one, but has
+ // a different name.
+ foo_members[4].name = CORBA::string_dup ("foo_iface_member2");
+ foo_members[4].type = CORBA::TypeCode::_duplicate (iface_tc.in ());
+ foo_members[4].type_def = CORBA::IDLType::_nil ();
+ label_value = 0;
+ foo_members[4].label <<= label_value;
+
+ CORBA::TypeCode_ptr foo_tc = orb->create_union_tc ("IDL:foo:1.0",
"foo",
+ CORBA::_tc_short,
foo_members,
ACE_TRY_ENV);
ACE_TRY_CHECK;
+ length = 2;
+
CORBA::StructMemberSeq bar_members (length);
bar_members.length (length);
diff --git a/TAO/examples/TypeCode_Creation/test.idl b/TAO/examples/TypeCode_Creation/test.idl
index 2ad83b62f14..5633d769d46 100644
--- a/TAO/examples/TypeCode_Creation/test.idl
+++ b/TAO/examples/TypeCode_Creation/test.idl
@@ -10,10 +10,13 @@
interface iface {};
-struct foo
+union foo switch (short)
{
- string foo_str_member;
- iface foo_iface_member;
+ case -3:
+ case 4:
+ case -1: string foo_str_member;
+ default: iface foo_iface_member;
+ case 0: iface foo_iface_member2;
};
struct bar
diff --git a/TAO/orbsvcs/IFR_Service/AttributeDef_i.cpp b/TAO/orbsvcs/IFR_Service/AttributeDef_i.cpp
index c7d4f41c91e..790b8a069a5 100644
--- a/TAO/orbsvcs/IFR_Service/AttributeDef_i.cpp
+++ b/TAO/orbsvcs/IFR_Service/AttributeDef_i.cpp
@@ -133,7 +133,7 @@ TAO_AttributeDef_i::type_def_i (CORBA::Environment &ACE_TRY_ENV)
ACE_CHECK_RETURN (CORBA_IDLType::_nil ());
CORBA_IDLType_var retval = CORBA_IDLType::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_CHECK_RETURN (CORBA_IDLType::_nil ());
return retval._retn ();
@@ -486,7 +486,7 @@ TAO_AttributeDef_i::get_exceptions (CORBA::Environment &ACE_TRY_ENV)
ACE_CHECK_RETURN (0);
retval[i] = CORBA_ExceptionDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_CHECK_RETURN (0);
}
@@ -563,7 +563,7 @@ TAO_AttributeDef_i::put_exceptions (CORBA::Environment &ACE_TRY_ENV)
ACE_CHECK_RETURN (0);
retval[i] = CORBA_ExceptionDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_CHECK_RETURN (0);
}
diff --git a/TAO/orbsvcs/IFR_Service/ConstantDef_i.cpp b/TAO/orbsvcs/IFR_Service/ConstantDef_i.cpp
index 8aa673eadd7..f2b9bb6ad69 100644
--- a/TAO/orbsvcs/IFR_Service/ConstantDef_i.cpp
+++ b/TAO/orbsvcs/IFR_Service/ConstantDef_i.cpp
@@ -158,7 +158,7 @@ TAO_ConstantDef_i::type_def_i (CORBA::Environment &ACE_TRY_ENV)
ACE_CHECK_RETURN (CORBA_IDLType::_nil ());
return CORBA_IDLType::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
void
diff --git a/TAO/orbsvcs/IFR_Service/Contained_i.cpp b/TAO/orbsvcs/IFR_Service/Contained_i.cpp
index f60be2f5df2..1417f706ea3 100644
--- a/TAO/orbsvcs/IFR_Service/Contained_i.cpp
+++ b/TAO/orbsvcs/IFR_Service/Contained_i.cpp
@@ -319,7 +319,7 @@ TAO_Contained_i::defined_in_i (CORBA::Environment &ACE_TRY_ENV)
ACE_CHECK_RETURN (CORBA_Container::_nil ());
CORBA_Container_var retval = CORBA_Container::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_CHECK_RETURN (CORBA_Container::_nil ());
return retval._retn ();
diff --git a/TAO/orbsvcs/IFR_Service/Container_i.cpp b/TAO/orbsvcs/IFR_Service/Container_i.cpp
index 0d72676fb29..93fa3561470 100644
--- a/TAO/orbsvcs/IFR_Service/Container_i.cpp
+++ b/TAO/orbsvcs/IFR_Service/Container_i.cpp
@@ -382,7 +382,7 @@ TAO_Container_i::lookup_i (const char *search_name,
ACE_CHECK_RETURN (CORBA_Contained::_nil ());
return CORBA_Contained::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_ContainedSeq *
@@ -516,7 +516,7 @@ TAO_Container_i::contents_i (CORBA::DefinitionKind limit_type,
CORBA_Contained_var next_cont =
CORBA_Contained::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_CHECK_RETURN (0);
retval[j] = next_cont._retn ();
@@ -588,7 +588,7 @@ TAO_Container_i::lookup_name_i (const char *search_name,
CORBA_Contained_var next_cont =
CORBA_Contained::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_CHECK_RETURN (0);
retval[i] = next_cont._retn ();
@@ -756,7 +756,7 @@ TAO_Container_i::create_module_i (const char *id,
ACE_CHECK_RETURN (CORBA_ModuleDef::_nil ());
return CORBA_ModuleDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_ConstantDef_ptr
@@ -873,7 +873,7 @@ TAO_Container_i::create_constant_i (const char *id,
ACE_CHECK_RETURN (CORBA_ConstantDef::_nil ());
return CORBA_ConstantDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_StructDef_ptr
@@ -993,7 +993,7 @@ TAO_Container_i::create_struct_i (const char *id,
ACE_CHECK_RETURN (CORBA_StructDef::_nil ());
return CORBA_StructDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_UnionDef_ptr
@@ -1133,7 +1133,7 @@ TAO_Container_i::create_union_i (const char *id,
ACE_CHECK_RETURN (CORBA_UnionDef::_nil ());
return CORBA_UnionDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_EnumDef_ptr
@@ -1234,7 +1234,7 @@ TAO_Container_i::create_enum_i (const char *id,
ACE_CHECK_RETURN (CORBA_EnumDef::_nil ());
return CORBA_EnumDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_AliasDef_ptr
@@ -1315,7 +1315,7 @@ TAO_Container_i::create_alias_i (const char *id,
ACE_CHECK_RETURN (CORBA_AliasDef::_nil ());
return CORBA_AliasDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_InterfaceDef_ptr
@@ -1414,7 +1414,7 @@ TAO_Container_i::create_interface_i (const char *id,
ACE_CHECK_RETURN (CORBA_InterfaceDef::_nil ());
return CORBA_InterfaceDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_ValueDef_ptr
@@ -1542,7 +1542,7 @@ TAO_Container_i::create_value_box_i (const char *id,
ACE_CHECK_RETURN (CORBA_ValueBoxDef::_nil ());
return CORBA_ValueBoxDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_ExceptionDef_ptr
@@ -1649,7 +1649,7 @@ TAO_Container_i::create_exception_i (const char *id,
ACE_CHECK_RETURN (CORBA_ExceptionDef::_nil ());
return CORBA_ExceptionDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_NativeDef_ptr
@@ -1714,7 +1714,7 @@ TAO_Container_i::create_native_i (const char *id,
ACE_CHECK_RETURN (CORBA_NativeDef::_nil ());
return CORBA_NativeDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_AbstractInterfaceDef_ptr
@@ -1819,7 +1819,7 @@ TAO_Container_i::create_abstract_interface_i (
ACE_CHECK_RETURN (CORBA_AbstractInterfaceDef::_nil ());
return CORBA_AbstractInterfaceDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_LocalInterfaceDef_ptr
@@ -1922,7 +1922,7 @@ TAO_Container_i::create_local_interface_i (
ACE_CHECK_RETURN (CORBA_LocalInterfaceDef::_nil ());
return CORBA_LocalInterfaceDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA::Boolean
diff --git a/TAO/orbsvcs/IFR_Service/ExceptionDef_i.cpp b/TAO/orbsvcs/IFR_Service/ExceptionDef_i.cpp
index 2f79e6f6d83..cb6db156611 100644
--- a/TAO/orbsvcs/IFR_Service/ExceptionDef_i.cpp
+++ b/TAO/orbsvcs/IFR_Service/ExceptionDef_i.cpp
@@ -244,7 +244,7 @@ TAO_ExceptionDef_i::members_i (CORBA::Environment &ACE_TRY_ENV)
ACE_CHECK_RETURN (0);
retval[k].type_def = CORBA_IDLType::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_CHECK_RETURN (0);
this->repo_->config ()->expand_path (this->repo_->root_key (),
diff --git a/TAO/orbsvcs/IFR_Service/InterfaceDef_i.cpp b/TAO/orbsvcs/IFR_Service/InterfaceDef_i.cpp
index 03f3f0eb849..346c0932bdb 100644
--- a/TAO/orbsvcs/IFR_Service/InterfaceDef_i.cpp
+++ b/TAO/orbsvcs/IFR_Service/InterfaceDef_i.cpp
@@ -224,7 +224,7 @@ TAO_InterfaceDef_i::base_interfaces_i (CORBA::Environment &ACE_TRY_ENV)
ACE_CHECK_RETURN (0);
retval[i] = CORBA_InterfaceDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_CHECK_RETURN (0);
}
@@ -739,7 +739,7 @@ TAO_InterfaceDef_i::create_attribute_i (
CORBA_AttributeDef_var retval =
CORBA_AttributeDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_CHECK_RETURN (CORBA_AttributeDef::_nil ());
return retval._retn ();
@@ -939,7 +939,7 @@ TAO_InterfaceDef_i::create_operation_i (const char *id,
CORBA_OperationDef_var retval =
CORBA_OperationDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_CHECK_RETURN (CORBA_OperationDef::_nil ());
return retval._retn ();
diff --git a/TAO/orbsvcs/IFR_Service/OperationDef_i.cpp b/TAO/orbsvcs/IFR_Service/OperationDef_i.cpp
index f3db32824e9..80c674f66f5 100644
--- a/TAO/orbsvcs/IFR_Service/OperationDef_i.cpp
+++ b/TAO/orbsvcs/IFR_Service/OperationDef_i.cpp
@@ -133,7 +133,7 @@ TAO_OperationDef_i::result_def_i (CORBA::Environment &ACE_TRY_ENV)
ACE_CHECK_RETURN (CORBA_IDLType::_nil ());
return CORBA_IDLType::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
void
@@ -281,7 +281,7 @@ TAO_OperationDef_i::params_i (CORBA::Environment &ACE_TRY_ENV)
ACE_CHECK_RETURN (0);
retval[i].type_def = CORBA_IDLType::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_CHECK_RETURN (0);
}
@@ -596,7 +596,7 @@ TAO_OperationDef_i::exceptions_i (CORBA::Environment &ACE_TRY_ENV )
ACE_CHECK_RETURN (0);
retval[i] = CORBA_ExceptionDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_CHECK_RETURN (0);
}
diff --git a/TAO/orbsvcs/IFR_Service/Repository_i.cpp b/TAO/orbsvcs/IFR_Service/Repository_i.cpp
index d590e317b47..74473273697 100644
--- a/TAO/orbsvcs/IFR_Service/Repository_i.cpp
+++ b/TAO/orbsvcs/IFR_Service/Repository_i.cpp
@@ -414,7 +414,7 @@ TAO_Repository_i::get_primitive (CORBA::PrimitiveKind kind,
ACE_CHECK_RETURN (CORBA_PrimitiveDef::_nil ());
return CORBA_PrimitiveDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_StringDef_ptr
@@ -473,7 +473,7 @@ TAO_Repository_i::create_string_i (CORBA::ULong bound,
ACE_CHECK_RETURN (CORBA_StringDef::_nil ());
return CORBA_StringDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_WstringDef_ptr
@@ -532,7 +532,7 @@ TAO_Repository_i::create_wstring_i (CORBA::ULong bound,
ACE_CHECK_RETURN (CORBA_WstringDef::_nil ());
return CORBA_WstringDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_SequenceDef_ptr
@@ -610,7 +610,7 @@ TAO_Repository_i::create_sequence_i (CORBA::ULong bound,
ACE_CHECK_RETURN (CORBA_SequenceDef::_nil ());
return CORBA_SequenceDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_ArrayDef_ptr
@@ -688,7 +688,7 @@ TAO_Repository_i::create_array_i (CORBA::ULong length,
ACE_CHECK_RETURN (CORBA_ArrayDef::_nil ());
return CORBA_ArrayDef::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
}
CORBA_FixedDef_ptr
diff --git a/TAO/orbsvcs/IFR_Service/UnionDef_i.cpp b/TAO/orbsvcs/IFR_Service/UnionDef_i.cpp
index b7d559d5b51..c1aa94e2243 100644
--- a/TAO/orbsvcs/IFR_Service/UnionDef_i.cpp
+++ b/TAO/orbsvcs/IFR_Service/UnionDef_i.cpp
@@ -307,7 +307,7 @@ TAO_UnionDef_i::members_i (CORBA::Environment &ACE_TRY_ENV)
ACE_CHECK_RETURN (0);
retval[k].type_def = CORBA_IDLType::_narrow (obj.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_CHECK_RETURN (0);
impl =
diff --git a/TAO/orbsvcs/IFR_Service/ifr_adding_visitor.cpp b/TAO/orbsvcs/IFR_Service/ifr_adding_visitor.cpp
index bd7d334fa8b..a8765ff316d 100644
--- a/TAO/orbsvcs/IFR_Service/ifr_adding_visitor.cpp
+++ b/TAO/orbsvcs/IFR_Service/ifr_adding_visitor.cpp
@@ -434,7 +434,7 @@ ifr_adding_visitor::visit_interface (AST_Interface *node)
{
this->ir_current_ =
CORBA_IDLType::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK
return 0;
@@ -521,7 +521,7 @@ ifr_adding_visitor::visit_interface (AST_Interface *node)
{
this->ir_current_ =
CORBA_InterfaceDef::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
if (CORBA::is_nil (this->ir_current_.in ()))
@@ -619,7 +619,7 @@ ifr_adding_visitor::visit_interface_fwd (AST_InterfaceFwd *node)
// the current IR object holder.
this->ir_current_ =
CORBA_InterfaceDef::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this interface's repo id from already being
@@ -706,7 +706,7 @@ ifr_adding_visitor::visit_structure (AST_Structure *node)
{
this->ir_current_ =
CORBA_IDLType::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this struct's repo id from already being
@@ -818,7 +818,7 @@ ifr_adding_visitor::visit_enum (AST_Enum *node)
// the current IR object holder.
this->ir_current_ =
CORBA_EnumDef::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this enum's repo id from already being
@@ -929,7 +929,7 @@ ifr_adding_visitor::visit_attribute (AST_Attribute *node)
this->ir_current_ =
CORBA_IDLType::_narrow (prev_type_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
}
else
@@ -956,7 +956,9 @@ ifr_adding_visitor::visit_attribute (AST_Attribute *node)
if (be_global->ifr_scopes ().top (current_scope) == 0)
{
CORBA_InterfaceDef_var iface =
- CORBA_InterfaceDef::_narrow (current_scope);
+ CORBA_InterfaceDef::_narrow (current_scope,
+ ACE_TRY_ENV);
+ ACE_TRY_CHECK;
new_def =
iface->create_attribute (node->repoID (),
@@ -982,7 +984,7 @@ ifr_adding_visitor::visit_attribute (AST_Attribute *node)
{
new_def =
CORBA_AttributeDef::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this attribute's repo id from already being
@@ -1046,7 +1048,7 @@ ifr_adding_visitor::visit_union (AST_Union *node)
{
this->ir_current_ =
CORBA_UnionDef::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this union's repo id from already being
@@ -1135,7 +1137,7 @@ ifr_adding_visitor::visit_constant (AST_Constant *node)
{
CORBA_ConstantDef_var const_def =
CORBA_ConstantDef::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
if (CORBA::is_nil (const_def.in ()))
@@ -1362,7 +1364,7 @@ ifr_adding_visitor::visit_typedef (AST_Typedef *node)
// the current IR object holder.
this->ir_current_ =
CORBA_TypedefDef::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this typedef's repo id from already being
@@ -1405,7 +1407,7 @@ ifr_adding_visitor::visit_root (AST_Root *node)
{
CORBA_Container_var new_scope =
CORBA_Container::_narrow (be_global->repository (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
if (be_global->ifr_scopes ().push (new_scope.in ()) != 0)
@@ -1496,7 +1498,7 @@ ifr_adding_visitor::visit_native (AST_Native *node)
{
this->ir_current_ =
CORBA_NativeDef::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this native type's repo id from already being
@@ -1748,7 +1750,7 @@ ifr_adding_visitor::element_type (AST_Type *base_type,
}
this->ir_current_ = CORBA_IDLType::_narrow (contained.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_CHECK;
}
}
diff --git a/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_exception.cpp b/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_exception.cpp
index aa5b2d02444..7c6516ad8fe 100644
--- a/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_exception.cpp
+++ b/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_exception.cpp
@@ -80,7 +80,7 @@ ifr_adding_visitor_exception::visit_scope (UTL_Scope *node)
// IfR method create_exception does not use this - it just needs
// to be non-null for marshaling.
this->members_[i].type =
- CORBA::TypeCode::_duplicate (CORBA::_tc_null);
+ CORBA::TypeCode::_duplicate (CORBA::_tc_void);
this->members_[i].type_def =
CORBA_IDLType::_duplicate (this->ir_current_.in ());
@@ -116,7 +116,7 @@ ifr_adding_visitor_exception::visit_structure (AST_Structure *node)
CORBA_Contained_ptr tmp =
CORBA_Contained::_narrow (visitor.ir_current (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Since the enclosing ExceptionDef hasn't been created
@@ -134,7 +134,7 @@ ifr_adding_visitor_exception::visit_structure (AST_Structure *node)
// the current IR object holder.
this->ir_current_ =
CORBA_IDLType::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this struct's repo id from already being
@@ -187,7 +187,7 @@ ifr_adding_visitor_exception::visit_exception (AST_Exception *node)
{
CORBA_ExceptionDef_var except_def =
CORBA_ExceptionDef::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this exception's repo id from already being
@@ -255,7 +255,7 @@ ifr_adding_visitor_exception::visit_exception (AST_Exception *node)
CORBA_Container_var new_container =
CORBA_Container::_narrow (new_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
for (size_t i = 0; i < size; ++i)
@@ -336,7 +336,7 @@ ifr_adding_visitor_exception::visit_enum (AST_Enum *node)
CORBA_Contained_ptr tmp =
CORBA_Contained::_narrow (this->ir_current_.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
this->move_queue_.enqueue_tail (tmp);
@@ -347,7 +347,7 @@ ifr_adding_visitor_exception::visit_enum (AST_Enum *node)
// the current IR object holder.
this->ir_current_ =
CORBA_IDLType::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this enum's repo id from already being
@@ -412,7 +412,7 @@ ifr_adding_visitor_exception::visit_union (AST_Union *node)
CORBA_Contained_ptr tmp =
CORBA_Contained::_narrow (visitor.ir_current (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Since the enclosing ExceptionDef hasn't been created
@@ -430,7 +430,7 @@ ifr_adding_visitor_exception::visit_union (AST_Union *node)
// the current IR object holder.
this->ir_current_ =
CORBA_IDLType::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this union's repo id from already being
diff --git a/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_operation.cpp b/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_operation.cpp
index 275f567fdda..0e64701a78c 100644
--- a/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_operation.cpp
+++ b/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_operation.cpp
@@ -91,7 +91,7 @@ ifr_adding_visitor_operation::visit_operation (AST_Operation *node)
ACE_TRY_CHECK;
exceptions[i++] = CORBA_ExceptionDef::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
ex_iter.next ();
@@ -146,7 +146,7 @@ ifr_adding_visitor_operation::visit_operation (AST_Operation *node)
ACE_TRY_CHECK;
this->ir_current_ = CORBA_IDLType::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
}
else
@@ -180,7 +180,7 @@ ifr_adding_visitor_operation::visit_operation (AST_Operation *node)
{
CORBA_InterfaceDef_var iface =
CORBA_InterfaceDef::_narrow (current_scope,
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
CORBA_OperationDef_var new_def =
@@ -247,7 +247,7 @@ ifr_adding_visitor_operation::visit_argument (AST_Argument *node)
ACE_TRY_CHECK;
this->ir_current_ = CORBA_IDLType::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
}
else
diff --git a/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_structure.cpp b/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_structure.cpp
index be05c04ea5c..775279b15cf 100644
--- a/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_structure.cpp
+++ b/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_structure.cpp
@@ -97,7 +97,7 @@ ifr_adding_visitor_structure::visit_scope (UTL_Scope *node)
CORBA_Contained_ptr tmp =
CORBA_Contained::_narrow (visitor.ir_current (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
this->move_queue_.enqueue_tail (tmp);
@@ -106,7 +106,7 @@ ifr_adding_visitor_structure::visit_scope (UTL_Scope *node)
{
this->ir_current_ =
CORBA_IDLType::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
}
}
@@ -131,7 +131,7 @@ ifr_adding_visitor_structure::visit_scope (UTL_Scope *node)
// IfR method create_struct does not use this - it just needs
// to be non-null for marshaling.
this->members_[i].type =
- CORBA::TypeCode::_duplicate (CORBA::_tc_null);
+ CORBA::TypeCode::_duplicate (CORBA::_tc_void);
this->members_[i].type_def =
CORBA_IDLType::_duplicate (this->ir_current_.in ());
@@ -223,7 +223,7 @@ ifr_adding_visitor_structure::visit_structure (AST_Structure *node)
CORBA_Container_var new_container =
CORBA_Container::_narrow (this->ir_current_.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
for (size_t i = 0; i < size; ++i)
@@ -249,7 +249,7 @@ ifr_adding_visitor_structure::visit_structure (AST_Structure *node)
{
this->ir_current_ =
CORBA_IDLType::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this struct's repo id from already being
@@ -333,7 +333,7 @@ ifr_adding_visitor_structure::visit_enum (AST_Enum *node)
CORBA_Contained_ptr tmp =
CORBA_Contained::_narrow (this->ir_current_.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Since the enclosing StructDef hasn't been created
@@ -348,7 +348,7 @@ ifr_adding_visitor_structure::visit_enum (AST_Enum *node)
// the current IR object holder.
this->ir_current_ =
CORBA_IDLType::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this enum's repo id from already being
@@ -413,7 +413,7 @@ ifr_adding_visitor_structure::visit_union (AST_Union *node)
CORBA_Contained_ptr tmp =
CORBA_Contained::_narrow (visitor.ir_current (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Since the enclosing StructDef hasn't been created
@@ -431,7 +431,7 @@ ifr_adding_visitor_structure::visit_union (AST_Union *node)
// the current IR object holder.
this->ir_current_ =
CORBA_IDLType::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this union's repo id from already being
diff --git a/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.cpp b/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.cpp
index f64b49000f6..55583669c89 100644
--- a/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.cpp
+++ b/TAO/orbsvcs/IFR_Service/ifr_adding_visitor_union.cpp
@@ -100,7 +100,7 @@ ifr_adding_visitor_union::visit_scope (UTL_Scope *node)
CORBA_Contained_ptr tmp =
CORBA_Contained::_narrow (visitor.ir_current (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
this->move_queue_.enqueue_tail (tmp);
@@ -109,7 +109,7 @@ ifr_adding_visitor_union::visit_scope (UTL_Scope *node)
{
this->ir_current_ =
CORBA_IDLType::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
}
}
@@ -201,7 +201,7 @@ ifr_adding_visitor_union::visit_scope (UTL_Scope *node)
// IfR method create_union does not use this - it just needs
// to be non-null for marshaling.
this->members_[index].type =
- CORBA::TypeCode::_duplicate (CORBA::_tc_null);
+ CORBA::TypeCode::_duplicate (CORBA::_tc_void);
this->members_[index++].type_def =
CORBA_IDLType::_duplicate (this->ir_current_.in ());
@@ -249,7 +249,7 @@ ifr_adding_visitor_union::visit_structure (AST_Structure *node)
CORBA_Contained_ptr tmp =
CORBA_Contained::_narrow (visitor.ir_current (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Since the enclosing UnionDef hasn't been created
@@ -267,7 +267,7 @@ ifr_adding_visitor_union::visit_structure (AST_Structure *node)
// the current IR object holder.
this->ir_current_ =
CORBA_IDLType::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this struct's repo id from already being
@@ -349,7 +349,7 @@ ifr_adding_visitor_union::visit_enum (AST_Enum *node)
CORBA_Contained_ptr tmp =
CORBA_Contained::_narrow (this->ir_current_.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Since the enclosing UnionDef hasn't been created
@@ -364,7 +364,7 @@ ifr_adding_visitor_union::visit_enum (AST_Enum *node)
// the current IR object holder.
this->ir_current_ =
CORBA_IDLType::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this enum's repo id from already being
@@ -442,7 +442,7 @@ ifr_adding_visitor_union::visit_union (AST_Union *node)
CORBA_IDLType_var idl_def =
CORBA_IDLType::_narrow (disc_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
this->disc_tc_ = idl_def->type (ACE_TRY_ENV);
@@ -521,7 +521,7 @@ ifr_adding_visitor_union::visit_union (AST_Union *node)
CORBA_Container_var new_container =
CORBA_Container::_narrow (this->ir_current_.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
for (size_t i = 0; i < size; ++i)
@@ -547,7 +547,7 @@ ifr_adding_visitor_union::visit_union (AST_Union *node)
{
this->ir_current_ =
CORBA_IDLType::_narrow (prev_def.in (),
- ACE_TRY_ENV);
+ ACE_TRY_ENV);
ACE_TRY_CHECK;
// Nothing prevents this union's repo id from already being
diff --git a/TAO/orbsvcs/tests/InterfaceRepo/IFR_Test/Admin_Client.cpp b/TAO/orbsvcs/tests/InterfaceRepo/IFR_Test/Admin_Client.cpp
index 65da895a675..3489ececfa3 100644
--- a/TAO/orbsvcs/tests/InterfaceRepo/IFR_Test/Admin_Client.cpp
+++ b/TAO/orbsvcs/tests/InterfaceRepo/IFR_Test/Admin_Client.cpp
@@ -871,15 +871,13 @@ Admin_Client::struct_test (CORBA::Environment &ACE_TRY_ENV)
members[0].type_def = this->repo_->get_primitive (CORBA::pk_string,
ACE_TRY_ENV);
ACE_CHECK;
- members[0].type = members[0].type_def->type (ACE_TRY_ENV);
- ACE_CHECK;
+ members[0].type = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
members[1].name = CORBA::string_dup ("bd_string");
members[1].type_def = this->repo_->create_string (5,
ACE_TRY_ENV);
ACE_CHECK;
- members[1].type = members[1].type_def->type (ACE_TRY_ENV);
- ACE_CHECK;
+ members[1].type = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
CORBA::EnumMemberSeq e_members (2);
e_members.length (2);
@@ -895,8 +893,7 @@ Admin_Client::struct_test (CORBA::Environment &ACE_TRY_ENV)
ACE_TRY_ENV);
ACE_CHECK;
members[2].type_def = CORBA::EnumDef::_duplicate (e_var.in ());
- members[2].type = members[2].type_def->type (ACE_TRY_ENV);
- ACE_CHECK;
+ members[2].type = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
CORBA::StructDef_var svar = this->repo_->create_struct ("IDL:my_struct:1.0",
"my_struct",
@@ -968,16 +965,14 @@ Admin_Client::struct_test (CORBA::Environment &ACE_TRY_ENV)
members[0].type_def = this->repo_->get_primitive (CORBA::pk_long,
ACE_TRY_ENV);
ACE_CHECK;
- members[0].type = members[0].type_def->type (ACE_TRY_ENV);
- ACE_CHECK;
+ members[0].type = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
members[1].name = CORBA::string_dup ("array_mem");
members[1].type_def = this->repo_->create_array (5,
members[0].type_def.in (),
ACE_TRY_ENV);
ACE_CHECK;
- members[1].type = members[1].type_def->type (ACE_TRY_ENV);
- ACE_CHECK;
+ members[1].type = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
svar->members (members,
ACE_TRY_ENV);
@@ -1288,8 +1283,7 @@ Admin_Client::union_test (CORBA::Environment &ACE_TRY_ENV)
s_members[0].type_def = this->repo_->create_string (6,
ACE_TRY_ENV);
ACE_CHECK;
- s_members[0].type = s_members[0].type_def->type (ACE_TRY_ENV);
- ACE_CHECK;
+ s_members[0].type = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
CORBA::StructDef_var s_var =
this->repo_->create_struct ("IDL:struct_in_union:1.0",
@@ -1306,8 +1300,7 @@ Admin_Client::union_test (CORBA::Environment &ACE_TRY_ENV)
u_members[0].type_def = this->repo_->get_primitive (CORBA::pk_long,
ACE_TRY_ENV);
ACE_CHECK;
- u_members[0].type = u_members[0].type_def->type (ACE_TRY_ENV);
- ACE_CHECK;
+ u_members[0].type = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
CORBA::TypeCode_var d_type = d_var->type (ACE_TRY_ENV);
ACE_CHECK;
TAO_OutputCDR maker2;
@@ -1322,8 +1315,7 @@ Admin_Client::union_test (CORBA::Environment &ACE_TRY_ENV)
u_members[1].type_def = this->repo_->get_primitive (CORBA::pk_long,
ACE_TRY_ENV);
ACE_CHECK;
- u_members[1].type = u_members[1].type_def->type (ACE_TRY_ENV);
- ACE_CHECK;
+ u_members[1].type = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
TAO_OutputCDR maker0;
maker0.write_ulong (2); // TWO
CORBA::Any any0 (d_type.in (),
@@ -1334,8 +1326,8 @@ Admin_Client::union_test (CORBA::Environment &ACE_TRY_ENV)
u_members[2].name = CORBA::string_dup ("structval");
u_members[2].type_def = CORBA::StructDef::_duplicate (s_var.in ());
- u_members[2].type = u_members[2].type_def->type (ACE_TRY_ENV);
- ACE_CHECK;
+ u_members[2].type = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
+
TAO_OutputCDR maker1;
maker1.write_ulong (0); // ZERO
CORBA::Any any1 (d_type.in (),
@@ -1348,8 +1340,7 @@ Admin_Client::union_test (CORBA::Environment &ACE_TRY_ENV)
u_members[3].type_def = this->repo_->create_string (17,
ACE_TRY_ENV);
ACE_CHECK;
- u_members[3].type = u_members[3].type_def->type (ACE_TRY_ENV);
- ACE_CHECK;
+ u_members[3].type = CORBA::TypeCode::_duplicate (CORBA::_tc_void);
u_members[3].label <<= CORBA::Any::from_octet (0); // default case (ONE)
CORBA::UnionDef_var u_var = this->repo_->create_union ("IDL:my_union:1.0",
diff --git a/TAO/tao/TypeCodeFactory/TypeCodeFactory_i.cpp b/TAO/tao/TypeCodeFactory/TypeCodeFactory_i.cpp
index 4ba813fe871..60cdf6c13b5 100644
--- a/TAO/tao/TypeCodeFactory/TypeCodeFactory_i.cpp
+++ b/TAO/tao/TypeCodeFactory/TypeCodeFactory_i.cpp
@@ -59,37 +59,11 @@ TAO_TypeCodeFactory_i::create_struct_tc (
)
ACE_THROW_SPEC ((CORBA::SystemException))
{
- TAO_OutputCDR cdr;
-
- cdr << TAO_ENCAP_BYTE_ORDER;
-
- cdr << id;
-
- cdr << name;
-
- // Number of members..
- CORBA::ULong len = members.length ();
- cdr << len;
-
- for (CORBA::ULong index = 0; index < len; ++index)
- {
- cdr << members[index].name;
-
- cdr << members[index].type.in ();
- }
-
- CORBA::TypeCode_ptr struct_typecode =
- CORBA::TypeCode::_nil ();
- ACE_NEW_THROW_EX (struct_typecode,
- CORBA_TypeCode (CORBA::tk_struct,
- cdr.total_length (),
- cdr.buffer (),
- 0,
- 0),
- CORBA::NO_MEMORY ());
- ACE_CHECK_RETURN (CORBA::TypeCode::_nil ());
-
- return struct_typecode;
+ return this->struct_except_tc_common (id,
+ name,
+ members,
+ CORBA::tk_struct,
+ ACE_TRY_ENV);
}
CORBA::TypeCode_ptr
@@ -102,54 +76,179 @@ TAO_TypeCodeFactory_i::create_union_tc (
)
ACE_THROW_SPEC ((CORBA::SystemException))
{
- TAO_OutputCDR cdr;
-
- cdr << TAO_ENCAP_BYTE_ORDER;
+ if (name != 0 && !this->valid_name (name))
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (15,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
- cdr << id;
+ if (id != 0 && !this->valid_id (id))
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (16,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
- cdr << name;
+ CORBA::Boolean good_disc_type =
+ this->valid_disc_type (discriminator_type,
+ ACE_TRY_ENV);
+ ACE_CHECK_RETURN (CORBA::TypeCode::_nil ());
- cdr << discriminator_type;
+ if (!good_disc_type)
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (20,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
CORBA::ULong len = members.length ();
CORBA::ULong dups = 0;
+ CORBA::ULong raw_default_index = ACE_UINT32_MAX;
CORBA::Long default_index = -1;
- CORBA::Long raw_default_index = -1;
CORBA::Octet value = ACE_OCTET_MAX;
-
+ CORBA::TypeCode_ptr tc_holder = CORBA::TypeCode::_nil ();
+ CORBA::Boolean valid_member = 1;
+ const char *member_name = 0;
+ ACE_Hash_Map_Manager<ACE_CString, int, ACE_Null_Mutex> map;
+
+ // No getting around iterating over the members twice. We have
+ // to do it once *before* the overall length is written to the
+ // CDR stream, to know by how much, if any, the number of members
+ // differs from the number of labels.
for (CORBA::ULong i = 0; i < len; ++i)
{
+ member_name = members[i].name;
+ int trybind_status = 0;
+
if (i > 0)
{
// Is this a duplicate case label? If so, we have to adjust
// the 'length' we encode - a member gets encoded only once.
- if (ACE_OS::strcmp (members[i].name,
+ if (ACE_OS::strcmp (member_name,
members[i - 1].name)
== 0)
{
- ++dups;
+ CORBA::Boolean equiv =
+ members[i].type.in ()->equivalent (members[i - 1].type.in (),
+ ACE_TRY_ENV);
+ ACE_CHECK_RETURN (CORBA::TypeCode::_nil ());
+
+ // If adjacent names are the same and their types are equivalent,
+ // then they are duplicate case labels. If the types are not
+ // equivalent, then they are separate members with the same name,
+ // which is not allowed.
+ if (equiv)
+ {
+ ++dups;
+ }
+ else
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (17,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+ }
+ else
+ {
+ // Only if we do not have a duplicate case label do we
+ // check for a duplicate member name.
+ ACE_CString ext_id (member_name);
+ int int_id = 0;
+
+ trybind_status = map.trybind (ext_id, int_id);
}
}
+ else
+ {
+ ACE_CString ext_id (member_name);
+ int int_id = 0;
+
+ trybind_status = map.trybind (ext_id, int_id);
+ }
+
+ // Duplicate member name?
+ if (trybind_status != 0)
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (17,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
+ tc_holder = members[i].type.in ();
+
+ // Valid member type?
+ valid_member = this->valid_content_type (tc_holder,
+ ACE_TRY_ENV);
+ ACE_CHECK_RETURN (CORBA::TypeCode::_nil ());
+
+ if (!valid_member)
+ {
+ ACE_THROW_RETURN (CORBA::BAD_TYPECODE (2,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
// Reset the default index, if we have a default case label.
if ((members[i].label >>= CORBA::Any::to_octet (value)) == 1)
{
if (value == 0)
{
- raw_default_index = ACE_static_cast (CORBA::Long, i);
+ raw_default_index = i;
// Only the multiple labels that come before the
// default label affect its adjusted value.
default_index = ACE_static_cast (CORBA::Long, i - dups);
}
}
+ else
+ {
+ // Else check that the label type is equivalent to the
+ // given discriminator type.
+ CORBA::TypeCode_var tmp = members[i].label.type ();
+
+ CORBA::Boolean equiv =
+ discriminator_type->equivalent (tmp.in (),
+ ACE_TRY_ENV);
+ ACE_CHECK_RETURN (CORBA::TypeCode::_nil ());
+
+ if (!equiv)
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (19,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+ }
+ }
+
+ CORBA::Boolean unique_labels =
+ this->unique_label_values (members,
+ discriminator_type,
+ raw_default_index,
+ ACE_TRY_ENV);
+ ACE_CHECK_RETURN (CORBA::TypeCode::_nil ());
+
+ if (!unique_labels)
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (18,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
}
+ TAO_OutputCDR cdr;
+
+ cdr << TAO_ENCAP_BYTE_ORDER;
+
+ cdr << id;
+
+ cdr << name;
+
+ cdr << discriminator_type;
+
cdr << default_index;
cdr << len - dups;
- for (CORBA::ULong index = 0; index < len; index++)
+ for (CORBA::ULong index = 0; index < len; ++index)
{
if (index > 0)
{
@@ -163,8 +262,7 @@ TAO_TypeCodeFactory_i::create_union_tc (
}
}
- if (raw_default_index >= 0
- && index == ACE_static_cast (CORBA::ULong, raw_default_index))
+ if (raw_default_index >= 0 && index == raw_default_index)
{
// This is the default label - we have to find a legal value.
CORBA::TCKind kind = discriminator_type->kind (ACE_TRY_ENV);
@@ -218,6 +316,20 @@ TAO_TypeCodeFactory_i::create_enum_tc (
)
ACE_THROW_SPEC ((CORBA::SystemException))
{
+ if (name != 0 && !this->valid_name (name))
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (15,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
+ if (id != 0 && !this->valid_id (id))
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (16,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
TAO_OutputCDR cdr;
cdr << TAO_ENCAP_BYTE_ORDER;
@@ -230,8 +342,21 @@ TAO_TypeCodeFactory_i::create_enum_tc (
cdr << len;
+ ACE_Hash_Map_Manager<ACE_CString, int, ACE_Null_Mutex> map;
+
for (CORBA::ULong index = 0; index < len; ++index)
{
+ ACE_CString ext_id (members[index]);
+ int int_id = 0;
+
+ // Is there a duplicate member name?
+ if (map.trybind (ext_id, int_id) != 0)
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (17,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
cdr << members[index];
}
@@ -258,6 +383,32 @@ TAO_TypeCodeFactory_i::create_alias_tc (
)
ACE_THROW_SPEC ((CORBA::SystemException))
{
+ if (name != 0 && !this->valid_name (name))
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (15,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
+ if (id != 0 && !this->valid_id (id))
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (16,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
+ CORBA::Boolean valid_content =
+ this->valid_content_type (original_type,
+ ACE_TRY_ENV);
+ ACE_CHECK_RETURN (CORBA::TypeCode::_nil ());
+
+ if (!valid_content)
+ {
+ ACE_THROW_RETURN (CORBA::BAD_TYPECODE (2,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
TAO_OutputCDR cdr;
cdr << TAO_ENCAP_BYTE_ORDER;
@@ -292,40 +443,11 @@ TAO_TypeCodeFactory_i::create_exception_tc (
)
ACE_THROW_SPEC ((CORBA::SystemException))
{
- TAO_OutputCDR cdr;
-
- cdr << TAO_ENCAP_BYTE_ORDER;
-
- cdr << id;
-
- cdr << name;
-
- // Number of members..
- CORBA::ULong len = members.length ();
- cdr << len;
-
- for (CORBA::ULong index = 0; index < len; ++index)
- {
- // Get the first member which is a string..
- CORBA_StructMember struct_member = members[index];
-
- cdr << struct_member.name;
-
- cdr << struct_member.type.in ();
- }
-
- CORBA::TypeCode_ptr exception_typecode =
- CORBA::TypeCode::_nil ();
- ACE_NEW_THROW_EX (exception_typecode,
- CORBA_TypeCode (CORBA::tk_except,
- cdr.total_length (),
- cdr.buffer (),
- 0,
- 0),
- CORBA::NO_MEMORY ());
- ACE_CHECK_RETURN (CORBA::TypeCode::_nil ());
-
- return exception_typecode;
+ return this->struct_except_tc_common (id,
+ name,
+ members,
+ CORBA::tk_except,
+ ACE_TRY_ENV);
}
CORBA::TypeCode_ptr
@@ -416,6 +538,18 @@ TAO_TypeCodeFactory_i::create_sequence_tc (
)
ACE_THROW_SPEC ((CORBA::SystemException))
{
+ CORBA::Boolean valid_element =
+ this->valid_content_type (element_type,
+ ACE_TRY_ENV);
+ ACE_CHECK_RETURN (CORBA::TypeCode::_nil ());
+
+ if (!valid_element)
+ {
+ ACE_THROW_RETURN (CORBA::BAD_TYPECODE (2,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
TAO_OutputCDR cdr;
cdr << TAO_ENCAP_BYTE_ORDER;
@@ -446,6 +580,18 @@ TAO_TypeCodeFactory_i::create_array_tc (
)
ACE_THROW_SPEC ((CORBA::SystemException))
{
+ CORBA::Boolean valid_element =
+ this->valid_content_type (element_type,
+ ACE_TRY_ENV);
+ ACE_CHECK_RETURN (CORBA::TypeCode::_nil ());
+
+ if (!valid_element)
+ {
+ ACE_THROW_RETURN (CORBA::BAD_TYPECODE (2,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
TAO_OutputCDR cdr;
cdr << TAO_ENCAP_BYTE_ORDER;
@@ -492,6 +638,33 @@ TAO_TypeCodeFactory_i::create_value_box_tc (
)
ACE_THROW_SPEC ((CORBA::SystemException))
{
+ if (name != 0 && !this->valid_name (name))
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (15,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
+ // Repo id may not be null for valueboxtype.
+ if (id == 0 || !this->valid_id (id))
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (16,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
+ CORBA::Boolean valid_content =
+ this->valid_content_type (boxed_type,
+ ACE_TRY_ENV);
+ ACE_CHECK_RETURN (CORBA::TypeCode::_nil ());
+
+ if (!valid_content)
+ {
+ ACE_THROW_RETURN (CORBA::BAD_TYPECODE (2,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
TAO_OutputCDR cdr;
cdr << TAO_ENCAP_BYTE_ORDER;
@@ -636,7 +809,6 @@ TAO_TypeCodeFactory_i::compute_default_label (
#endif /* ACE_LACKS_LONGLONG_T */
dv.enum_val = 0;
-
CORBA::ULong len = members.length ();
int success = 0;
@@ -789,6 +961,21 @@ TAO_TypeCodeFactory_i::create_tc_common (
)
ACE_THROW_SPEC ((CORBA::SystemException))
{
+ if (name != 0 && !this->valid_name (name))
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (15,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
+ // Repo id may not be null for object or native type.
+ if (id == 0 || !this->valid_id (id))
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (16,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
TAO_OutputCDR cdr;
cdr << TAO_ENCAP_BYTE_ORDER;
@@ -812,3 +999,381 @@ TAO_TypeCodeFactory_i::create_tc_common (
return result;
}
+CORBA::TypeCode_ptr
+TAO_TypeCodeFactory_i::struct_except_tc_common (
+ const char *id,
+ const char *name,
+ const CORBA_StructMemberSeq &members,
+ CORBA::TCKind kind,
+ CORBA::Environment &ACE_TRY_ENV
+ )
+ ACE_THROW_SPEC ((CORBA::SystemException))
+{
+ if (name != 0 && !this->valid_name (name))
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (15,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
+ // Repo id may not be null for an exception.
+ if ((id == 0 && kind == CORBA::tk_except)
+ || (id != 0 && !this->valid_id (id)))
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (16,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
+ TAO_OutputCDR cdr;
+
+ cdr << TAO_ENCAP_BYTE_ORDER;
+
+ cdr << id;
+
+ cdr << name;
+
+ // Number of members..
+ CORBA::ULong len = members.length ();
+
+ cdr << len;
+
+ CORBA::TypeCode_ptr tc_holder = CORBA::TypeCode::_nil ();
+ CORBA::Boolean valid_member = 1;
+ const char *member_name = 0;
+ ACE_Hash_Map_Manager<ACE_CString, int, ACE_Null_Mutex> map;
+
+ for (CORBA::ULong index = 0; index < len; ++index)
+ {
+ // Valid member type?
+ tc_holder = members[index].type.in ();
+
+ valid_member = this->valid_content_type (tc_holder,
+ ACE_TRY_ENV);
+ ACE_CHECK_RETURN (CORBA::TypeCode::_nil ());
+
+ if (!valid_member)
+ {
+ ACE_THROW_RETURN (CORBA::BAD_TYPECODE (2,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
+ member_name = members[index].name;
+
+ if (member_name == 0 || !this->valid_name (member_name))
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (15,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
+ ACE_CString ext_id (member_name);
+ int int_id = 0;
+
+ // Is there a duplicate member name?
+ if (map.trybind (ext_id, int_id) != 0)
+ {
+ ACE_THROW_RETURN (CORBA::BAD_PARAM (17,
+ CORBA::COMPLETED_NO),
+ CORBA::TypeCode::_nil ());
+ }
+
+ cdr << member_name;
+
+ cdr << tc_holder;
+ }
+
+ CORBA::TypeCode_ptr new_typecode =
+ CORBA::TypeCode::_nil ();
+ ACE_NEW_THROW_EX (new_typecode,
+ CORBA_TypeCode (kind,
+ cdr.total_length (),
+ cdr.buffer (),
+ 0,
+ 0),
+ CORBA::NO_MEMORY ());
+ ACE_CHECK_RETURN (CORBA::TypeCode::_nil ());
+
+ return new_typecode;
+}
+
+CORBA::Boolean
+TAO_TypeCodeFactory_i::valid_name (const char *name)
+{
+ if (!isalpha (*name))
+ {
+ return 0;
+ }
+
+ const char *tmp = name + 1;
+
+ for (; *tmp; ++tmp)
+ {
+ if (isalnum (*tmp) || *tmp == '_')
+ {
+ continue;
+ }
+ else
+ {
+ return 0;
+ }
+ }
+
+ return 1;
+}
+
+CORBA::Boolean
+TAO_TypeCodeFactory_i::valid_id (const char *id)
+{
+ ACE_CString safety (id);
+
+ int pos = safety.find (':');
+
+ if (pos == ACE_CString::npos)
+ {
+ return 0;
+ }
+
+ ACE_CString format (safety.substr (0, pos));
+
+ if (format == "IDL"
+ || format == "RMI"
+ || format == "DCE"
+ || format == "LOCAL")
+ {
+ return 1;
+ }
+
+ return 0;
+}
+
+CORBA::Boolean
+TAO_TypeCodeFactory_i::valid_content_type (CORBA::TypeCode_ptr tc,
+ CORBA::Environment &ACE_TRY_ENV)
+{
+ CORBA::TCKind kind = tc->kind (ACE_TRY_ENV);
+ ACE_CHECK_RETURN (0);
+
+ if (kind == CORBA::tk_null
+ || kind == CORBA::tk_void
+ || kind == CORBA::tk_except)
+ {
+ return 0;
+ }
+
+ return 1;
+}
+
+CORBA::Boolean
+TAO_TypeCodeFactory_i::unique_label_values (const CORBA_UnionMemberSeq &members,
+ CORBA::TypeCode_ptr disc_tc,
+ CORBA::ULong default_index_slot,
+ CORBA::Environment &ACE_TRY_ENV)
+{
+ CORBA::TCKind disc_kind = disc_tc->kind (ACE_TRY_ENV);
+ ACE_CHECK_RETURN (0);
+
+ CORBA::ULong length = members.length ();
+
+ // We have already checked for valid discriminator type
+ // and valid label types, so we won't check for any of that here.
+
+ struct label_types
+ {
+ CORBA::Char char_val;
+ CORBA::WChar wchar_val;
+ CORBA::Boolean bool_val;
+ CORBA::Short short_val;
+ CORBA::UShort ushort_val;
+ CORBA::Long long_val;
+ CORBA::ULong ulong_val;
+ CORBA::ULong enum_val;
+ // TODO - handle (u)longlong types
+ } s;
+
+ s.char_val = 0;
+ s.wchar_val = 0;
+ s.bool_val = 0;
+ s.short_val = 0;
+ s.ushort_val = 0;
+ s.long_val = 0;
+ s.ulong_val = 0;
+ s.enum_val = 0;
+
+ // Two cases - one for signed and one for unsigned discriminator types.
+ if (disc_kind == CORBA::tk_long
+ || disc_kind == CORBA::tk_short)
+ {
+ ACE_Bounded_Set<CORBA::Long> checker (length);
+
+ for (CORBA::ULong i = 0; i < length; ++i)
+ {
+ if (i == default_index_slot)
+ {
+ continue;
+ }
+
+ switch (disc_kind)
+ {
+ case CORBA::tk_long:
+ members[i].label >>= s.long_val;
+
+ if (checker.insert (s.long_val) != 0)
+ {
+ return 0;
+ }
+
+ break;
+ case CORBA::tk_short:
+ members[i].label >>= s.short_val;
+
+ if (checker.insert (s.short_val) != 0)
+ {
+ return 0;
+ }
+
+ break;
+ default:
+ break;
+ }
+ }
+ }
+ else
+ {
+ ACE_Bounded_Set<CORBA::ULong> checker (length);
+
+ for (CORBA::ULong i = 0; i < length; ++i)
+ {
+ if (i == default_index_slot)
+ {
+ continue;
+ }
+
+ switch (disc_kind)
+ {
+ case CORBA::tk_boolean:
+ members[i].label >>= CORBA::Any::to_boolean (s.bool_val);
+
+ if (checker.insert (s.bool_val) != 0)
+ {
+ return 0;
+ }
+
+ break;
+ case CORBA::tk_char:
+ members[i].label >>= CORBA::Any::to_char (s.char_val);
+
+ if (checker.insert (s.char_val) != 0)
+ {
+ return 0;
+ }
+
+ break;
+ case CORBA::tk_wchar:
+ members[i].label >>= CORBA::Any::to_wchar (s.wchar_val);
+
+ if (checker.insert (s.wchar_val) != 0)
+ {
+ return 0;
+ }
+
+ break;
+ case CORBA::tk_ushort:
+ members[i].label >>= s.ushort_val;
+
+ if (checker.insert (s.short_val) != 0)
+ {
+ return 0;
+ }
+
+ break;
+ case CORBA::tk_ulong:
+ members[i].label >>= s.ulong_val;
+
+ if (checker.insert (s.ulong_val) != 0)
+ {
+ return 0;
+ }
+
+ break;
+ case CORBA::tk_enum:
+ {
+ TAO_InputCDR cdr (members[i].label._tao_get_cdr (),
+ members[i].label._tao_byte_order ());
+ cdr.read_ulong (s.enum_val);
+
+ if (checker.insert (s.enum_val) != 0)
+ {
+ return 0;
+ }
+
+ break;
+ }
+ default:
+ break;
+ }
+ }
+ }
+
+ return 1;
+}
+
+CORBA::Boolean
+TAO_TypeCodeFactory_i::valid_disc_type (CORBA::TypeCode_ptr tc,
+ CORBA::Environment &ACE_TRY_ENV)
+{
+ CORBA::TCKind kind = tc->kind (ACE_TRY_ENV);
+ ACE_CHECK_RETURN (0);
+
+ if (kind == CORBA::tk_enum
+ || kind == CORBA::tk_ulong
+ || kind == CORBA::tk_long
+ || kind == CORBA::tk_ushort
+ || kind == CORBA::tk_short
+ || kind == CORBA::tk_char
+ || kind == CORBA::tk_wchar
+ || kind == CORBA::tk_boolean
+ || kind == CORBA::tk_longlong
+ || kind == CORBA::tk_ulonglong)
+ {
+ return 1;
+ }
+
+ return 0;
+}
+
+#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
+
+template class ACE_Hash_Map_Entry<ACE_CString, int>;
+template class ACE_Hash_Map_Iterator_Base_Ex<ACE_CString, int, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, ACE_Null_Mutex>;
+template class ACE_Hash_Map_Iterator_Ex<ACE_CString, int, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, ACE_Null_Mutex>;
+template class ACE_Equal_To<ACE_CString>;
+template class ACE_Hash_Map_Reverse_Iterator_Ex<ACE_CString, int, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, ACE_Null_Mutex>;
+template class ACE_Hash<ACE_CString>;
+template class ACE_Hash_Map_Manager_Ex<ACE_CString, int, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, ACE_Null_Mutex>;
+template class ACE_Hash_Map_Manager<ACE_CString, int, ACE_Null_Mutex>;
+template class ACE_Hash_Map_With_Allocator<ACE_CString, int>;
+template class ACE_Bounded_Set<CORBA::Long>;
+template class ACE_Bounded_Set<CORBA::ULong>;
+template class ACE_Bounded_Set_Iterator<CORBA::Long>;
+template class ACE_Bounded_Set_Iterator<CORBA::ULong>;
+
+#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
+
+#pragma instantiate ACE_Hash_Map_Entry<ACE_CString, int>
+#pragma instantiate ACE_Hash_Map_Iterator_Base_Ex<ACE_CString, int, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, ACE_Null_Mutex>
+#pragma instantiate ACE_Hash_Map_Iterator_Ex<ACE_CString, int, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, ACE_Null_Mutex>
+#pragma instantiate ACE_Equal_To<ACE_CString>
+#pragma instantiate ACE_Hash_Map_Reverse_Iterator_Ex<ACE_CString, int, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, ACE_Null_Mutex>
+#pragma instantiate ACE_Hash<ACE_CString>
+#pragma instantiate ACE_Hash_Map_Manager_Ex<ACE_CString, int, ACE_Hash<ACE_CString>, ACE_Equal_To<ACE_CString>, ACE_Null_Mutex>
+#pragma instantiate ACE_Hash_Map_Manager<ACE_CString, int, ACE_Null_Mutex>
+#pragma instantiate ACE_Hash_Map_With_Allocator<ACE_CString, int>
+#pragma instantiate ACE_Bounded_Set<CORBA::Long>
+#pragma instantiate ACE_Bounded_Set<CORBA::ULong>
+#pragma instantiate ACE_Bounded_Set_Iterator<CORBA::Long>
+#pragma instantiate ACE_Bounded_Set_Iterator<CORBA::ULong>
+
+#endif /* ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION */
+
diff --git a/TAO/tao/TypeCodeFactory/TypeCodeFactory_i.h b/TAO/tao/TypeCodeFactory/TypeCodeFactory_i.h
index f11fe316ac5..13ec6d1d76b 100644
--- a/TAO/tao/TypeCodeFactory/TypeCodeFactory_i.h
+++ b/TAO/tao/TypeCodeFactory/TypeCodeFactory_i.h
@@ -231,6 +231,30 @@ private:
)
ACE_THROW_SPEC ((CORBA::SystemException));
+ /// Code for structs and unions is identical except for TCKind.
+ CORBA::TypeCode_ptr struct_except_tc_common (
+ const char *id,
+ const char *name,
+ const CORBA_StructMemberSeq &members,
+ CORBA::TCKind kind,
+ CORBA::Environment &ACE_TRY_ENV =
+ TAO_default_environment ()
+ )
+ ACE_THROW_SPEC ((CORBA::SystemException));
+
+ /// If any of these fail, we raise a spec-defined minor code
+ /// of BAD_PARAM or BAD_TYPECODE.
+ CORBA::Boolean valid_name (const char *name);
+ CORBA::Boolean valid_id (const char *id);
+ CORBA::Boolean valid_content_type (CORBA::TypeCode_ptr tc,
+ CORBA::Environment &ACE_TRY_ENV);
+ CORBA::Boolean unique_label_values (const CORBA_UnionMemberSeq &members,
+ CORBA::TypeCode_ptr disc_tc,
+ CORBA::ULong default_index_slot,
+ CORBA::Environment &ACE_TRY_ENV);
+ CORBA::Boolean valid_disc_type (CORBA::TypeCode_ptr tc,
+ CORBA::Environment &ACE_TRY_ENV);
+
/// Prohibited
TAO_TypeCodeFactory_i (const TAO_TypeCodeFactory_i &src);
TAO_TypeCodeFactory_i &operator= (const TAO_TypeCodeFactory_i &src);