//============================================================================= /** * @file interface.idl * * $Id$ * * 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. * * * @author Jeff Parsons and TAO users. */ //============================================================================= // Used to be a problem in the get() and set() // generated code. interface Base { attribute long value; }; interface Derived : Base { }; // The fact that the interface begins with 'foo' was causing // problems. The IDL compiler thought the interface was in // foo's scope. module foo_mod { struct date { short month; }; }; interface foostep { foo_mod::date getDate (); }; // Only operations or attributes should cause a clash // in this type of situation. interface mother { struct member { long val; }; }; interface father { struct member { short ident; }; }; interface child : mother, father { }; interface try { }; // Definition below in file. interface later; typedef boolean Bool; interface later_user { later op (in later inarg, inout later inoutarg, out later outarg); // Not a clash with the C++ keyword because they are case sensitive, // but the Arg_Traits<> specialization parameter (ACE_InputCDR::to_boolean) // needs the unaliased type name to work. void op2 (in Bool inarg2); }; struct later_holder { later member; }; interface later {}; // Previously, we could have found v if it // was inherited into Client, but not in // the case below, where it is inherited into // somewhere other than the scope where the // lookup starts. interface Begin { typedef long Value; }; interface Middle : Begin { }; interface End : Middle { }; interface Client { attribute End::Value v; }; // Tests arg_traits visitor for unaliased bounded (w)string // attributes. interface AttributeTester { typedef string string_1[1]; attribute string a_su; attribute string_1 a_sb; }; // All of the 'recursion' below is legal. module ParamMod { interface ParameterTester { exception object_excep_type { ParameterTester objref; }; typedef sequence object_seq_type; typedef ParameterTester object_array_type[5]; struct object_struct_type { octet o1; ParameterTester p1; long l1; }; union object_union_type switch (long) { case 0: string str; case 1: ParameterTester pt; }; object_seq_type parameter_tester_op ( in object_struct_type inarg, inout object_array_type inoutarg, out object_union_type outarg ) raises (object_excep_type); }; }; local interface testlocal { }; interface A { union U switch(boolean) { case TRUE: A aa; }; }; module M { interface A; }; module M { interface A; interface A {}; }; module i1 { interface if1 { string getStr(); }; }; module i2 { interface if2 : ::i1::if1 { string getstr2(); }; interface if3 : ::i2::if2 { string getstr3(); }; }; /// Tests acceptance of legal redefinitions (of /// constants, exceptions and types) in a derived /// interface. module redefs { interface base { const long lconst = -5; exception ex { string info; }; struct foo { short index; }; }; interface derived : base { const long lconst = 44; exception ex { long serial; }; struct foo { string str; }; }; }; // Had to relocate the spot where the typedef is marked as // having its arg traits instantiation already generated. // Otherwise, when the scope of the base interface is visited // as part of this process, we had infinite recursion and a // stack overflow. module Rec_Arg_Traits { interface base { typedef Rec_Arg_Traits::base plan_stub_type; }; interface derived : Rec_Arg_Traits::base { void remove_task (in plan_stub_type listener); }; };