[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