[fpc-pascal] Property write access on records
Ryan Joseph
genericptr at gmail.com
Sat Mar 7 03:23:09 CET 2020
> On Mar 7, 2020, at 5:15 AM, Sven Barth <pascaldragon at googlemail.com> wrote:
>
> I've found two bug reports related to this (I searched for "property" and only those reports that are neither closed nor resolved):
> - https://bugs.freepascal.org/view.php?id=23620
> - https://bugs.freepascal.org/view.php?id=14534
>
> And I noticed that the following already does generate an error:
Yes, you're right this does trigger the correct error. My example was actually bad because I didn't notice that my problem was coming from a more complex situation.
Given the code I get no error because the "width" property of the helper is writeable but the "point" property is read-only. This should still give the error because even though "width" is writable the "point" is read-only and the assignment will still go to temporary memory, thus failing silently.
Should I file a new bug report for this?
====================
{$mode objfpc}
{$modeswitch advancedrecords}
program test;
type
TPoint = record
x, y: integer;
end;
type
TSizeHelper = record helper for TPoint
procedure SetWidth(newValue: integer); inline;
procedure SetHeight(newValue: integer); inline;
function GetWidth: integer; inline;
function GetHeight: integer; inline;
property Width: integer read GetWidth write SetWidth;
property Height: integer read GetHeight write SetHeight;
end;
procedure TSizeHelper.SetWidth(newValue: integer);
begin
x := newValue;
end;
procedure TSizeHelper.SetHeight(newValue: integer);
begin
y := newValue;
end;
function TSizeHelper.GetWidth: integer;
begin
result := x;
end;
function TSizeHelper.GetHeight: integer;
begin
result := y;
end;
type
TThing = record
m_point: TPoint;
function GetPoint: TPoint;
property point: TPoint read GetPoint;
end;
function TThing.GetPoint: TPoint;
begin
result := m_point;
end;
var
t: TThing;
begin
// no error!
t.point.width := 0;
end.
Regards,
Ryan Joseph
More information about the fpc-pascal
mailing list