static CORBA_EnumMemberSeq * MateCORBA_imodule_get_enum_members (IDL_tree tree, CORBA_Environment *ev) { CORBA_EnumMemberSeq *members; IDL_tree l; int num_members = 0; int i; g_return_val_if_fail (IDL_NODE_TYPE (tree) == IDLN_TYPE_ENUM, NULL); num_members = IDL_list_length (IDL_TYPE_ENUM (tree).enumerator_list); members = CORBA_EnumMemberSeq__alloc (); members->_length = members->_maximum = num_members; members->_buffer = CORBA_EnumMemberSeq_allocbuf (members->_length); members->_release = CORBA_TRUE; for (i = 0, l = IDL_TYPE_ENUM (tree).enumerator_list; l; i++, l = IDL_LIST (l).next) members->_buffer [i] = CORBA_string_dup (IDL_IDENT (IDL_LIST (l).data).str); g_assert (i == num_members); return members; }
static CORBA_TypeCode orbit_idl_tree_type_to_typecode_enum(IDL_tree type) { CORBA_TypeCode type_code; CORBA_EnumMemberSeq * p_members = NULL; p_members = CORBA_EnumMemberSeq__alloc(); p_members->_maximum = p_members->_length = 1; p_members->_buffer = CORBA_sequence_CORBA_Identifier_allocbuf(p_members->_length); p_members->_buffer[0] = "dummy"; /* * TODO: initialize p_members with members... * look at orbit_idl_tree_type_to_typecode_struct */ type_code = CORBA_ORB_create_enum_tc( orbit_get_orb(), IDL_IDENT(IDL_TYPE_ENUM(type).ident).repo_id, IDL_IDENT(IDL_TYPE_ENUM(type).ident).str, p_members, orbit_get_environment()); if (orbit_error_test("CORBA_ORB_create_enum_tc")) { goto error; } if (type_code == NULL) { /* printf("unable to create enum typecode for type %s\n", IDL_IDENT(IDL_TYPE_ENUM(type).ident).str);*/ } goto exit; error: type_code = NULL; exit: CORBA_free(p_members); return type_code; }