mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-07 02:48:07 +02:00
175 lines
3.2 KiB
ObjectPascal
175 lines
3.2 KiB
ObjectPascal
{ type helpers in mode ObjFPC can also be used in place of record and class
|
|
helpers }
|
|
|
|
program tthlp23;
|
|
|
|
{$mode objfpc}
|
|
{$modeswitch advancedrecords}
|
|
{$modeswitch typehelpers}
|
|
|
|
type
|
|
TTest = record
|
|
function Test: LongInt;
|
|
class function TestStatic: LongInt; static;
|
|
end;
|
|
|
|
TTestHelper = type helper for TTest
|
|
function Test: LongInt;
|
|
class function TestStatic: LongInt; static;
|
|
end;
|
|
|
|
TTestHelperSub = type helper(TTestHelper) for TTest
|
|
function Test: LongInt;
|
|
class function TestStatic: LongInt; static;
|
|
end;
|
|
|
|
TObjectHelper = type helper for TObject
|
|
function Test: LongInt;
|
|
class function TestClass: LongInt;
|
|
class function TestStatic: LongInt; static;
|
|
end;
|
|
|
|
TObjectHelperSub = type helper(TObjectHelper) for TObject
|
|
function Test: LongInt;
|
|
class function TestClass: LongInt;
|
|
class function TestStatic: LongInt; static;
|
|
end;
|
|
|
|
TObjectSub = class(TObject)
|
|
function Test: LongInt;
|
|
class function TestClass: LongInt;
|
|
class function TestStatic: LongInt; static;
|
|
end;
|
|
|
|
TObjectSubHelperSub = type helper(TObjectHelper) for TObjectSub
|
|
function Test: LongInt;
|
|
class function TestClass: LongInt;
|
|
class function TestStatic: LongInt; static;
|
|
end;
|
|
|
|
function TTest.Test: LongInt;
|
|
begin
|
|
Result := 1;
|
|
end;
|
|
|
|
class function TTest.TestStatic: LongInt;
|
|
begin
|
|
Result := 2;
|
|
end;
|
|
|
|
function TTestHelper.Test: LongInt;
|
|
begin
|
|
Result := 3;
|
|
end;
|
|
|
|
class function TTestHelper.TestStatic: LongInt;
|
|
begin
|
|
Result := 4;
|
|
end;
|
|
|
|
function TTestHelperSub.Test: LongInt;
|
|
begin
|
|
Result := 5;
|
|
end;
|
|
|
|
class function TTestHelperSub.TestStatic: LongInt;
|
|
begin
|
|
Result := 6;
|
|
end;
|
|
|
|
function TObjectHelper.Test: LongInt;
|
|
begin
|
|
Result := 7;
|
|
end;
|
|
|
|
class function TObjectHelper.TestClass: LongInt;
|
|
begin
|
|
Result := 8;
|
|
end;
|
|
|
|
class function TObjectHelper.TestStatic: LongInt;
|
|
begin
|
|
Result := 9;
|
|
end;
|
|
|
|
function TObjectHelperSub.Test: LongInt;
|
|
begin
|
|
Result := 10;
|
|
end;
|
|
|
|
class function TObjectHelperSub.TestClass: LongInt;
|
|
begin
|
|
Result := 11;
|
|
end;
|
|
|
|
class function TObjectHelperSub.TestStatic: LongInt;
|
|
begin
|
|
Result := 12;
|
|
end;
|
|
|
|
function TObjectSub.Test: LongInt;
|
|
begin
|
|
Result := 13;
|
|
end;
|
|
|
|
class function TObjectSub.TestClass: LongInt;
|
|
begin
|
|
Result := 14;
|
|
end;
|
|
|
|
class function TObjectSub.TestStatic: LongInt;
|
|
begin
|
|
Result := 15;
|
|
end;
|
|
|
|
function TObjectSubHelperSub.Test: LongInt;
|
|
begin
|
|
Result := 16;
|
|
end;
|
|
|
|
class function TObjectSubHelperSub.TestClass: LongInt;
|
|
begin
|
|
Result := 17;
|
|
end;
|
|
|
|
class function TObjectSubHelperSub.TestStatic: LongInt;
|
|
begin
|
|
Result := 18;
|
|
end;
|
|
|
|
var
|
|
t: TTest;
|
|
o: TObject;
|
|
os: TObjectSub;
|
|
begin
|
|
if t.Test <> 5 then
|
|
Halt(1);
|
|
if t.TestStatic <> 6 then
|
|
Halt(2);
|
|
if TTest.TestStatic <> 6 then
|
|
Halt(3);
|
|
o := TObject.Create;
|
|
if o.Test <> 10 then
|
|
Halt(4);
|
|
if o.TestClass <> 11 then
|
|
Halt(5);
|
|
if o.TestStatic <> 12 then
|
|
Halt(6);
|
|
if TObject.TestClass <> 11 then
|
|
Halt(7);
|
|
if TObject.TestStatic <> 12 then
|
|
Halt(8);
|
|
os := TObjectSub.Create;
|
|
if os.Test <> 16 then
|
|
Halt(9);
|
|
if os.TestClass <> 17 then
|
|
Halt(10);
|
|
if os.TestStatic <> 18 then
|
|
Halt(11);
|
|
if TObjectSub.TestClass <> 17 then
|
|
Halt(12);
|
|
if TObjectSub.TestStatic <> 18 then
|
|
Halt(13);
|
|
Writeln('ok');
|
|
end.
|