[fpc-devel] Re: RFC: Delphi style class helpers

Sven Barth pascaldragon at googlemail.com
Fri Jan 7 10:30:31 CET 2011


Hello again!

In the last few days I've written quite a few tests regarding class 
helpers and have come across some interesting cases. I've used Delphi 
2007 to compile these tests.

Case 1:

The following code compiles in Delphi

=== source begin ===

program tchlp20;

{$ifdef fpc}
   {$mode objfpc}
{$endif}

type
   TObjectHelper = class helper for TObject
   end;

   TSomeRec = record
     helper: TObjectHelper;
   end;

begin
end.

=== source end ===

This is strange, because every other reference to a class helper ( 
variable declaration, parameter, parent class) results either in a error 
or even in an internal error (haha ^^). Can someone test with a newer 
version of Delphi (e.g. XE)?
If a newer Delphi also successfully generates a binary for this, should 
I consider this a bug or does someone knew more about this?

Case 2:

The following code compiles as well, which scares me a bit, cause I have 
to implement that as well :P

=== source begin ===

program tchlp36;

type
   TObjectHelper = class helper for TObject
     procedure Test;
   end;

   TFoo = class

   end;

   TFooHelper = class helper(TObjectHelper) for TFoo
   end;

procedure TObjectHelper.Test;
begin
end;

var
   f: TFoo;
begin
   f.Test;
end.

=== source end ===

I yet need to test what happens if the extended classes don't inherit 
from eachother...

Case 3:

I have attached two sources (tchlp35.pp and uchlp35.pp) for a test 
regarding virtual methods in class helpers. This code does not compile 
in Delphi 2007, but it might in Delphi XE. So could someone who has 
access to a Delphi XE compile those tests and send me the binary, please 
(you need to compile the unit first, cause Delphi does not find *.pp 
sources)?


At last I have a question regarding compiler development:
Should I use new error messages like "reference to class helper not 
allowed here" and so on or should I rely on the messages that are 
already there? If the first: what needs to be changed to add a new message?

Regards,
Sven
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: tchlp35.pp
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20110107/5d4ba6b7/attachment.ksh>
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: uchlp35.pp
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20110107/5d4ba6b7/attachment-0001.ksh>


More information about the fpc-devel mailing list