This mail is to discuss issue http://bugs.freepascal.org/view.php?id=13630.
>From the issue description: Given the definitions: type T1 = class procedure SetP(AP: Integer); virtual; property P: Integer read FP write SetP; end; T2 = class(T1) procedure SetP(AP: Integer); override; end; procedure T1.SetP(AP: Integer); begin Writeln('T1.SetP'); end; procedure T2.SetP(AP: Integer); begin Writeln('T2.SetP'); inherited P := AP; end; the assignment t2obj.P := 1 causes infinite recursion, because "inherited P := AP" calls T2.SetP instead of T1.SetP. This problem was already reported, fixed, but the fix was reverted: http://bugs.freepascal.org/view.php?id=10927 http://bugs.freepascal.org/view.php?id=10979 (sorry for not searching the Mantis myself before posting the issue). However, I believe that the problem in issue 10979 was caused by incorrect fix to 10927 and it is actually possible (and desirable) to fix both. inherited P := V Should: 1) Search base classes to find the definition of P in some class B. 2) If it is not writable, error out. 3) If it writes to a field, do that. 4) If it has setter named "SetP", do the equivalent of "inherited SetP". it is the presence vs. absence "inherited" in step 4 that should have been changed to fix 10927, but it sounds like a "B.SetP" was used instead, which caused issue 10979. Regarding Delphi compatibility -- note that current behavior leads to stack overflow in both Delphi and FPC, so I doubt there are many programs relying on it ;-) -- Alexander S. Klenin _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel