[fpc-pascal] type helpers

Mattias Gaertner nc-gaertnma at netcologne.de
Fri Jan 11 11:23:49 CET 2019


Hi,

A type helper can change Self.
I wondered how FPC 3.3.1 handles properties and got some
unexpected results. Is this by design, a bug, or not-yet-implemented?

{$mode objfpc}{$modeswitch typehelpers}
type
  TIntHlp = type helper for word
    procedure DoIt;
  end;

  TBig = class
  strict private
    FW: word;
    procedure SetW(const AValue: word);
  public
    property W: word read FW write SetW;
  end;

var b: TBird;

procedure TBig.SetW(const AValue: word);
begin
  // not called by type helper
  writeln('TBig.SetW');
end;

procedure TIntHlp.DoIt;
begin
  writeln('TIntHlp.DoIt START ',Self,' w=',b.w);
  Self:=4; // changes b.FW directly
  writeln('TIntHlp.DoIt END ',Self,' w=',b.w);
end;

begin
  b:=TBig.Create;
  b.w.DoIt;
end.


Mattias



More information about the fpc-pascal mailing list