--static dispatch expression Class C inherits A { manc5():Int{ { (new C)@B.man4(23, true); (self)@A.mana1(); (self)@A.man(); --valid call (self)@B.man5((new C)); } }; manc6():C{ self@B.man6(1) }; }; Class A inherits B{ m:Int; mana1():Int { self@B.man() --valid call...valid ret type }; mana2():Int { { m<-23; m<-(new A)@B.man3(m); --valid call...valid ret type m<- (new B)@B.man3(m); --valid call...valid ret type self@B.man5(self); } }; mana3():A { self@B.man6(1) --check for SELF_TYPE }; }; Class B { r:Int; s:Bool; man():Int { r<-1 }; man3(n:Int):Int { r<-n }; man4(n:Int, m:Bool):Bool { { r<-n; s<-m; } }; man5(n:B ):Int { r<-1 }; man6(n:Int ):SELF_TYPE { self }; }; class Main { main():Int { 1 }; };