fpc/tests/webtbs/tw8145.pp
2007-01-19 18:05:58 +00:00

106 lines
1.9 KiB
ObjectPascal

program ClassOfDifference;
{$IFDEF FPC}
{$mode delphi}
{$ENDIF}
var
l: longint;
type
TMyObject = class
class procedure Foo;
class procedure Foo2; virtual;
end;
TMyClass = class of TMyObject;
TMyDerivedObject = class(TMyObject)
class procedure Foo2; override;
end;
TMyDerivedClass = class of TMyDerivedObject;
TMyObject2 = class
class procedure Foo3;
end;
TMyClass2 = class of TMyObject2;
TMyDerivedObject2 = class(TMyObject2)
end;
TMyDerivedClass2 = class of TMyDerivedObject2;
class procedure TMyObject.Foo;
begin
if (l <> 1) then
halt(1);
end;
class procedure TMyObject.Foo2;
begin
if (l <> 2) then
halt(2);
end;
class procedure TMyDerivedObject.Foo2;
begin
if (l <> 3) then
halt(3);
end;
class procedure TMyObject2.Foo3;
begin
if (l <> 4) then
halt(4);
end;
var
MyClassA : TMyClass = TMyObject;
MyClassB : TMyClass = TMyDerivedObject;
MyDerivedClass : TMyDerivedClass = TMyDerivedObject;
MyClassA2 : TMyClass2 = TMyObject2;
MyClassB2 : TMyClass2 = TMyDerivedObject2;
MyDerivedClass2 : TMyDerivedClass2 = TMyDerivedObject2;
begin
l := 1;
TMyObject.Foo; //works in FPC and Delphi
TMyDerivedObject.Foo; //works in FPC and Delphi
MyClassA.Foo; //works in FPC and Delphi
MyClassB.Foo; //works in FPC and Delphi
MyDerivedClass.Foo; //works in FPC and Delphi
TMyClass.Foo; //works only in Delphi
TMyDerivedClass.Foo; //works only in Delphi
l := 2;
TMyObject.Foo2;
MyClassA.Foo2;
TMyClass.Foo2;
l := 3;
TMyDerivedObject.Foo2;
TMyDerivedClass.Foo2;
MyClassB.Foo2;
l := 4;
TMyObject2.Foo3; //works in FPC and Delphi
TMyDerivedObject2.Foo3; //works in FPC and Delphi
MyClassA2.Foo3; //works in FPC and Delphi
MyClassB2.Foo3; //works in FPC and Delphi
MyDerivedClass2.Foo3; //works in FPC and Delphi
TMyClass2.Foo3; //works only in Delphi
TMyDerivedClass2.Foo3; //works only in Delphi
end.