{$APPTYPE CONSOLE}
{$IFDEF FPC}
{$MODE Delphi}
{$ENDIF}
type
PB = ^B;
B = object
public
test: string;
constructor Init;
function GetTest: string;
end;
PA = ^A;
A = object(B)
public
function TestFunc: string;
end;
function A.TestFunc;
begin
Writeln('>> this.test = ', self.test);
Result := self.test
end;
constructor B.init;
begin
self.test := 'Nice trick';
end;
function B.GetTest;
begin
Result := A(self).TestFunc;
end;
var theb: PB;
begin
theb := new(PB, Init);
Writeln(theb^.GetTest())
end.
eyRBUFBUWVBFIENPTlNPTEV9CnskSUZERUYgRlBDfQp7JE1PREUgRGVscGhpfQp7JEVORElGfQoKdHlwZQoKUEIgPSBeQjsKQiA9IG9iamVjdAogICAgcHVibGljCiAgICB0ZXN0OiBzdHJpbmc7CgogICAgY29uc3RydWN0b3IgSW5pdDsKCiAgICBmdW5jdGlvbiBHZXRUZXN0OiBzdHJpbmc7CmVuZDsKClBBID0gXkE7CkEgPSBvYmplY3QoQikKICAgIHB1YmxpYwogICAgZnVuY3Rpb24gVGVzdEZ1bmM6IHN0cmluZzsKZW5kOwoKZnVuY3Rpb24gQS5UZXN0RnVuYzsKYmVnaW4KICAgIFdyaXRlbG4oJz4+IHRoaXMudGVzdCA9ICcsIHNlbGYudGVzdCk7CiAgICBSZXN1bHQgOj0gc2VsZi50ZXN0CmVuZDsKCmNvbnN0cnVjdG9yIEIuaW5pdDsKYmVnaW4KICAgIHNlbGYudGVzdCA6PSAnTmljZSB0cmljayc7CmVuZDsKCmZ1bmN0aW9uIEIuR2V0VGVzdDsKYmVnaW4KICAgIFJlc3VsdCA6PSBBKHNlbGYpLlRlc3RGdW5jOwplbmQ7Cgp2YXIgdGhlYjogUEI7CmJlZ2luCiAgICB0aGViIDo9IG5ldyhQQiwgSW5pdCk7CiAgICBXcml0ZWxuKHRoZWJeLkdldFRlc3QoKSkKZW5kLgo=