declare local SetSelf={NewName} class DelegateMixin attr this Delegate:none meth !SetSelf(S) this:=S end meth set(A X) A:=X end meth get(A ?X) X=@A end meth setDelegate(D) Delegate:=D end meth Del(M S) SS in SS=@this this:=S try {self M} finally this:=SS end end meth call(M) SS in SS=@this this:=self try {self M} finally this:=SS end end meth otherwise(M) if @Delegate==none then raise undefinedMethod end else {@Delegate Del(M @this)} end end end in fun {NewD Class Init} Obj={New class $ from Class DelegateMixin end Init} in {Obj SetSelf(Obj)} Obj end end