/* Test multiple inheritance and assertions */ proc verifyAncestor( object, ancestor ) { object = object.parent; while( object ) { if( object == ancestor ) break; object = object.parent; } return object; } class a { public var a = 1; public proc howdy() { say( "Howdy. a = ", a, "\n" ); } } class b { public var b = 2; public proc pardner() { say( "Pardner. b = ", b, "\n" ); } } class c(a,b){} class a1 { var a = 1; public proc howdy() { say( "Howdy. a = ", a, "\n" ); } } class b1 { var b = 2; public proc pardner() { say( "Pardner. b = ", b, "\n" ); } } class c1(a1,b1) { public proc pardner() { a = 3; b = 4; if( !verifyAncestor( self, a1 ) ) { say( "Not descended from a1\n" ); return nil; } (a1.howdy)(); say( "Note: b really is: ", b, "\n" ); } } a a_obj {} b b_obj {} c c_obj {} a1 a1_obj {} b1 b1_obj {} c1 c1_obj {} proc main() { a_obj.howdy(); b_obj.pardner(); c_obj.howdy(); c_obj.pardner(); a1_obj.howdy(); b1_obj.pardner(); c1_obj.howdy(); c1_obj.pardner(); c1.pardner(); }