[fpc-pascal] Tests in Delphi XE3 regarding Type Helpers

Sven Barth pascaldragon at googlemail.com
Thu Nov 29 09:53:03 CET 2012


Hello together!

Could someone with access to Delphi XE3 please compile and run the 
attached tests and provide me with the output of the test or (in case of 
an error) with the output of the compiler?
The tthlperrX.pas tests should not compile, so here I'd like to get the 
error messages.
The other tests should compile, so please try to adjust them until they 
do and report me any adjustments you made. If you can't get them to 
compile then please report me the errors you get with the initial test file.

Thank you.

Regards,
Sven
-------------- next part --------------
program tthlperr1;

begin
  42.DoTest; // <- no helper in scope
end.
-------------- next part --------------
program tthlperr2;

type
  TOrdinalHelper = record helper for LongInt // <- adjust type so that first call compiles!
    procedure DoTest1;
  end;

procedure TOrdinalHelper.DoTest1;
begin

end;

begin
  42.DoTest1; // <- should work
  42.DoTest2; // <- compile error
end.
-------------- next part --------------
program tthlpminus;

type
  TOrdinalHelper = record helper for LongInt // <- adjust, so that test compiles
    procedure DoTest;
  end;

procedure TOrdinalHelper.DoTest;
begin
  Writeln(Self);
end;

begin
  42.DoTest;
  -42.DoTest;
end.
-------------- next part --------------
program tthlpself;

type
  TIntegerHelper = record helper for Integer
    procedure DoTest;
  end;

  TStringHelper = record helper for String
    procedure DoTest;
  end;

procedure TStringHelper.DoTest;
begin
  Writeln(Self);
  Self := 'Hello ' + Self + ' World';
end;

procedure TIntegerHelper.DoTest;
begin
  Writeln(Self);
  Self := Self div 2;
end;

var
  i: Integer;
  s: String;
begin
  i := 42;
  i.DoTest;
  Writeln(i);

  s := 'Type Helper';
  s.DoTest;
  Writeln(s);
end.
-------------- next part --------------
program tthlpsize;

type
  TByteHelper = record helper for Byte
    function DoTest: String;
  end;

  TWordHelper = record helper for Word
    function DoTest: String;
  end;

  TLongWordHelper = record helper for LongWord
    function DoTest: String;
  end;

  TUInt64Helper = record helper for UInt64
    function DoTest: String;
  end;

  TSmallIntHelper = record helper for SmallInt
    function DoTest: String;
  end;

  TShortHelper = record helper for Short
    function DoTest: String;
  end;

  TLongIntHelper = record helper for LongInt
    function DoTest: String;
  end;

  TInt64Helper = record helper for Int64
    function DoTest: String;
  end;

function TInt64Helper.DoTest: String;
begin
  Result := 'Int64';
end;

function TLongIntHelper.DoTest: String;
begin
  Result := 'LongInt';
end;

function TShortHelper.DoTest: String;
begin
  Result := 'Short';
end;

function TSmallIntHelper.DoTest: String;
begin
  Result := 'SmallInt';
end;

function TUInt64Helper.DoTest: String;
begin
  Result := 'UInt64';
end;

function TLongWordHelper.DoTest: String;
begin
  Result := 'LongWord';
end;

function TWordHelper.DoTest: String;
begin
  Result := 'Word';
end;

function TByteHelper.DoTest: String;
begin
  Result := 'Byte';
end;

begin
  Writeln(0, #9, 0.DoTest);
  Writeln(-1, #9, -1.DoTest);
  Writeln($ABCD, #9, $ABCD.DoTest);
  Writeln(-32987, #9, -32987.DoTest);
  Writeln(2345678, #9, 2345678.DoTest);
  Writeln(-2345678, #9, -2345678.DoTest);
  Writeln($1234567887654321, #9, $1234567887654321.DoTest);
  Writeln(-9876543211234, #9, -9876543211234.DoTest);
  Writeln(9876543211234, #9, 9876543211234.DoTest);
end.


More information about the fpc-pascal mailing list