Am 06.03.2020 um 03:17 schrieb Ryan Joseph via fpc-pascal:
On Mar 5, 2020, at 2:24 PM, Ryan Joseph <generic...@gmail.com> wrote:
Can we consider changing this behavior?
from https://lists.freepascal.org/pipermail/fpc-pascal/2020-March/057434.html
On 05/03/2020 08:24, Ryan Joseph via fpc-pascal wrote:
Yes, it's a temporary variable but doesn't it make sense to give an error
because the property is read only? It's basically a no-op like it is now and
defeats the purpose of read-only properties. It also creates a nasty bug
because the programmer thinks they've written to something but they actually
didn't.
I think there is already an open bug report for this.
Jonas
================
I looked on the bug tracker for "properties" and didn't see this so I'll make
one but I wanted to confirm first it's not intended behavior. Jonas seems to hint that it
is but Sven didn't mention it.
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:
=== code begin ===
program trecprop;
{$mode objfpc}
type
TTestRec = record
x: LongInt;
end;
{ TTestClass }
TTestClass = class(TObject)
private
fTestRec: TTestRec;
function GetTestRec: TTestRec;
public
property Rec: TTestRec read fTestRec;
property Rec2: TTestRec read GetTestRec;
end;
var
c: TTestClass;
function TTestClass.GetTestRec: TTestRec;
begin
Result := fTestRec;
end;
begin
c := TTestClass.Create;
try
c.Rec.x := 42;
c.Rec2.x := 42;
finally
c.Free;
end;
end.
=== code end ===
=== shell begin ===
PS C:\fpc\git> .\compiler\ppcx64.exe -n -Furtl\units\x86_64-win64 -viwn
-FEtestoutput .\fpctests\trecprop.pp
Target OS: Win64 for x64
Compiling .\fpctests\trecprop.pp
trecprop.pp(32,10) Error: Argument cannot be assigned to
trecprop.pp(33,11) Error: Argument cannot be assigned to
trecprop.pp(38) Fatal: There were 2 errors compiling module, stopping
Fatal: Compilation aborted
=== shell end ===
What currently does not generate an error is if you use a with-statement
with the property (which is referenced by the bug reports).
So would you please provide a full example that shows your error? Cause
if there is yet another case where the compiler does not generate an
error where it should (aside from the with-statement) then this would be
good to know.
Regards,
Sven
_______________________________________________
fpc-pascal maillist - fpc-pascal@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal