[fpc-devel] Local procedures as procedural parameter
Michael Van Canneyt
michael at freepascal.org
Mon Mar 14 10:51:04 CET 2005
On Mon, 14 Mar 2005 olle.r at automagika.se wrote:
>> On Mon, 14 Mar 2005, Adriaan van Os wrote:
>>
>>> 7. Consider the following program:
>>>
>>> program func;
>>>
>>> type tfun = function( x: real): real;
>>>
>>> procedure iso_fun( function f( x: real): real);
>>> begin
>>> end;
>>>
>>> procedure typ_fun( pf: tfun);
>>> begin
>>> end;
>>>
>>> procedure somefun;
>>>
>>> function f( x: real): real;
>>> begin
>>> f:= x
>>> end;
>>>
>>> begin
>>> iso_fun( f);
>>> typ_fun( f); {procedural variable can't get nested routiine}
>>> end;
>>>
>>> begin
>>> end.
>>
>> 1. What happens if f would use a variable from somefun, and f is called
>> when somefun is no longer executed ?
>
> Yes this is a problem, but it can be solved by not allowing an iso style
> procedure parameter to be stored in a variable. It should only be allowed
> to be passed to another procedure or to be called.
>
> In fact standard pascal does not allow procedure variables, only procedure
> parameters (note the difference). I suppose the above problem is the
> reason.
Then I think standard pascal is very handicapped indeed.
>
>> 2. I see no difference whatsoever between typ_fun and iso_fun, except
>> the use of an extra type, which, in my opinion, does not change
>> anything to the usage or code of these functions. If one is allowed,
>> the other should be allowed as well.
>
> No, and at present there is no difference in generated code.
Which means that the above example IS a problem.
Michael.
More information about the fpc-devel
mailing list