[fpc-pascal] Why does nested function get corrupted?
Ondrej Pokorny
lazarus at kluug.net
Sun Sep 11 12:11:48 CEST 2022
Am 11.09.2022 um 11:26 schrieb Sven Barth via fpc-pascal:
> Hairy Pixels <genericptr at gmail.com> schrieb am Sa., 10. Sep. 2022, 03:21:
>
>
>
> > On Sep 9, 2022, at 4:48 PM, Sven Barth
> <pascaldragon at googlemail.com> wrote:
> >
> > How about you simply report such corruptions as bugs? I can
> always close them as "not a bug" or duplicate if necessary.
> >
>
> Well I thought the data may have been saved on the stack and thus
> lost when the function exits. What is the expected behavior for
> passing these outside of the calling scope?
>
>
> Looking at your example again - I'm only on my phone currently - it's
> indeed your fault because the state passed to a nested function
> variable does *not* survive the stack frame it belongs to. That's
> where function references shine, because there the state *does* survive.
Shouldn't this assignment be forbidden?
type
TProc = procedure is nested;
function TestNested: TProc;
begin
result := procedure // why is this possible?
begin
writeln(data);
end;
It is not a nested function but an anonymous one.
Ondrej
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20220911/7e8dcae7/attachment.htm>
More information about the fpc-pascal
mailing list