On 14 mrt 2005, at 09:45, Michael Van Canneyt 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 ?

That is not possible. If you take the address of f and put it in a procedural variable, you'll get an error (just like when you attempt to assign a method to a regular procedural variable). You can only pass it as parameter to procedures declared with an ISO-style procedure/function parameter, and since its scope is limited to somefun, somefun will always be active when you can do so.


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.

Well, it currently isn't in either our compiler or in Delphi. You cannot declare a function type inside a parameter list for now. Maybe this was even done on purpose to avoid clashes with ISO-style procedure parameters.



Jonas


_______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to