Hi Marģers,

Thanks for the feedback!

Assigning the results of pure functions to constants has not yet been developed.  I had planned to add it once the bulk of pure functions (i.e. the current merge request) had been approved since it requires some additional work (specifically what happens if the function is not actually pure or otherwise can't return a straightforward result).

2 and 3 are definite bugs though.  The second case should at the very least make the function impure, while the third case should indeed not disqualify the function.  I'll see what I can do. Thanks again.

Kit

On 28/06/2024 09:35, Marģers . via fpc-devel wrote:
1. pure function value to constants

function foo(i:longword):longword; pure;
begin
  foo:=9;
end;

const bar = foo( 8 );  //-- not allowed.. but i expect this to work!
         jar : longword = foo( 7 ); //-- and this as well


2. this does not end grasefully

function foo (i:longword):shortstring; pure;
var s : shortstring;
      n : longword;
begin
  s:=''';
  for n:=1 to i do s:=s +'a';
  //-- not assing return value
end;
begin writeln(foo(9)); end.

3.
function foo (i:longword):ansistring; pure;
var s : shortstring;
      n : longword;
begin
  s:=''';
  for n:=1 to i do s:=s +'a';
  foo:=s; //-- this makes function not pure, but why whould it!
end;
begin writeln(foo(9)); end.


_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

--
This email has been checked for viruses by Avast antivirus software.
www.avast.com
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to