// $Id$ // ============================================================================ // // = LIBRARY // TAO/tests/IDL_Test // // = FILENAME // array.idl // // = DESCRIPTION // This file contains examples of IDL code that has // caused problems in the past for the TAO IDL // compiler. This test is to make sure the problems // stay fixed. // // = AUTHORS // Jeff Parsons and TAO users. // // ============================================================================ // Multidimensional arrays - constant vigilance. typedef short TwoDArray[64][63]; typedef short ThreeDArray[64][63][62]; typedef short FourDArray[64][63][62][61]; // This problem is a combination of two others // that have long been fixed, but you never know... typedef long inside_array[5]; struct wrap { inside_array member; }; typedef wrap outside_array[10]; // Once a problem with expressions in the brackets, // as well as the typedef'd/anonymous thing. interface tdef { const short byteslen = 12; typedef octet Bytes[byteslen + 1]; struct bytes_or_longs { Bytes the_bytes; // typedef'd long Longs[byteslen]; // anonymous }; }; // To test that all the octet arrays build and link as // unique types. module ABCModule { struct RmtPhysicalInfo { octet rmtNodeId[22]; octet rmtDetails[22]; }; struct bbbBubBubBubBaby { octet rmtNodeId[22]; octet rmtDetails[22]; }; }; typedef octet oa1[22]; typedef octet oa2[22]; // Test generation of Arg_Traits specialization for identical // arrays. interface array_args { void all_arrays (in oa1 arg1, in oa2 arg2); }; // This should generate unique _var and _forany types, but // also generate TAO_String_Manager as the element type for both. module string_array { typedef string ArrayOfString[15]; typedef string MyString; typedef MyString ArrayOfMyString[15]; }; // Checks code generation for arrays and typedefs of arrays // when they are not declared globally or inside a module. interface testdata { typedef char Arraychar[2]; typedef Arraychar ArrayDeChar; struct struct2 { Arraychar field_1; ArrayDeChar field_2; }; typedef sequence ArraycharList; typedef sequence BdArraycharList; typedef sequence ArrayDeCharList; typedef sequence BdArrayDeCharList; }; // Tests for explicit conversion of slice pointer to the // corresponding forany class before using CDR or Any // operators. This is required because myvec2_slice and // myvec3_slice are the same type, so implicit conversion // from myvec2_slice (in the case below) could go to // myvec2_forany or myvec3_forany. module arraytest { typedef string myvec2[2]; typedef string myvec3[3]; interface MyTest { void test_method (out myvec2 mystring); }; }; // Caught the has_constructor() flag not being passed from the // element type to the array in the AST. module bug_2126 { union FirstUnion switch (boolean) { case TRUE: long first_union_foo; case FALSE: long first_union_bar; }; typedef FirstUnion FirstUnionArray[2]; struct MyStruct { FirstUnionArray my_struct_foo; }; union SecondUnion switch (boolean) { case TRUE: MyStruct second_union_struct_member; case FALSE: long wibble; }; typedef FirstUnion BdFirstUnionArray[2]; struct BdMyStruct { BdFirstUnionArray my_struct_foo; }; union BdSecondUnion switch (boolean) { case TRUE: BdMyStruct second_union_struct_member; case FALSE: long wibble; }; };