[fpc-devel] Allow record helper inheritance in Delphi mode
Ondrej Pokorny
lazarus at kluug.net
Tue Aug 29 17:38:45 CEST 2017
There is a difference between FPC 3.0.0 and current trunk (without my
patch) regarding {$modeswitch typehelpers} and "TXYZHelper = type helper
for TXYZ".
In 3.0.0 it is obvious - it can be used only for primitive types.
In trunk you can use type helper for everything (with {$modeswitch
typehelpers}) - primitive types, record, classes and interfaces (btw.
thanks for the interfaces - you should announce it loud :) ).
Example code:
program DelphiHelpers;
{$mode objfpc}
{$modeswitch advancedrecords+}
{$modeswitch typehelpers+}
type
TRec = record
public
function A: string;
end;
TRecHelper = type helper for TRec
public
function AB: string;
end;
TObjectHelper = type helper for TObject
public
end;
{ TRecHelper }
function TRecHelper.AB: string;
begin
Result := inherited A + 'b';
end;
{ TRec }
function TRec.A: string;
begin
Result := 'a';
end;
var
T: TRec;
begin
if T.AB <> 'ab' then
Halt(1);
Writeln('ok');
end.
-> It compiles fine in trunk but does not compile in 3.0.0.
So yes, your description of {$modeswitch typehelpers} makes sense for
3.0.0 but not for trunk any more. So what is your intention - 3.0.0
behavior or trunk behavior?
Ondrej
More information about the fpc-devel
mailing list