/* 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();
}