(* Test: non-opaque OBJECTs *) MODULE Main; TYPE obj1 = OBJECT a: INTEGER; METHODS p (i: INTEGER) := P1; END; obj2 = obj1 OBJECT b: INTEGER; METHODS q (r:REAL) := Q2; OVERRIDES p := P2; END; obj3 = obj2 OBJECT END; PROCEDURE P1 (self: obj1; x: INTEGER) = BEGIN x := self.a; self.p (x); END P1; PROCEDURE P2 (self: obj2; x: INTEGER) = BEGIN x := self.a + self.b; self.p (x); END P2; PROCEDURE Q2 (self: obj2; r: REAL) = BEGIN self.a := 4; self.q (3.14159 + r); END Q2; BEGIN VAR o1: obj1; o2: obj2; o3: obj3; BEGIN o1 := o2; o1 := o3; o2 := o1; o2 := o3; o3 := o1; o3 := o2; o1.p (4); o2.p (o3.b); o3.q (4.5); END; END Main.