procedure and function parameters?

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

procedure and function parameters?

Bernd Oppolzer
Are procedure and function parameters allowed in Free Pascal?

When I tried to compile the Man-or-boy example program (Knuth's test),
FPC complained with a syntax error:


c:\work\pascal\work>fpc manorboy.pas
Free Pascal Compiler version 3.0.0 [2015/11/16] for i386
Copyright (c) 1993-2015 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling manorboy.pas
manorboy.pas(41,28) Fatal: Syntax error, "identifier" expected but
"FUNCTION" found
Fatal: Compilation aborted
Error: C:\FPC\3.0.0\bin\i386-win32\ppc386.exe returned an error exitcode


This is the place where the function parameter appears in the
definition of the function A:


function A ( K : INTEGER ; function X1 : INTEGER ; function X2 :
            INTEGER ; function X3 : INTEGER ; function X4 : INTEGER ;
            function X5 : INTEGER ) : INTEGER ;


    function B : INTEGER ;

       begin (* B *)
         K := K - 1 ;
         B := A ( K , B , X1 , X2 , X3 , X4 ) ;
       end (* B *) ;


    begin (* A *)
      if K <= 0 then
        begin
          A := X4 + X5 ;
        end (* then *)
      else
        begin
          A := B ;
        end (* else *) ;
    end (* A *) ;

Thank you, kind regards

Bernd


_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: procedure and function parameters?

Free Pascal - General mailing list
On 04.03.2018 18:06, Bernd Oppolzer wrote:

> Are procedure and function parameters allowed in Free Pascal?
>
> When I tried to compile the Man-or-boy example program (Knuth's test),
> FPC complained with a syntax error:
>
>
> c:\work\pascal\work>fpc manorboy.pas
> Free Pascal Compiler version 3.0.0 [2015/11/16] for i386
> Copyright (c) 1993-2015 by Florian Klaempfl and others
> Target OS: Win32 for i386
> Compiling manorboy.pas
> manorboy.pas(41,28) Fatal: Syntax error, "identifier" expected but
> "FUNCTION" found
> Fatal: Compilation aborted
> Error: C:\FPC\3.0.0\bin\i386-win32\ppc386.exe returned an error exitcode
>
>
> This is the place where the function parameter appears in the
> definition of the function A:
>
>
> function A ( K : INTEGER ; function X1 : INTEGER ; function X2 :
>            INTEGER ; function X3 : INTEGER ; function X4 : INTEGER ;
>            function X5 : INTEGER ) : INTEGER ;

There is only one solution that currently really will work with that
kind of code: use {$mode iso} at the top of the file to use the ISO
Pascal compatible mode.

In theory it should also be possible to use another mode plus
{$modeswitch nestedprocvars}, but that doesn't play nicely with the call
to A inside of B as the compiler seems to call the X4 parameter while it
shouldn't...

Regards,
Sven
_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: procedure and function parameters?

Marco van de Voort
In reply to this post by Bernd Oppolzer
In our previous episode, Bernd Oppolzer said:
>
> function A ( K : INTEGER ; function X1 : INTEGER ; function X2 :
>  ?????????? INTEGER ; function X3 : INTEGER ; function X4 : INTEGER ;
>  ?????????? function X5 : INTEGER ) : INTEGER ;

This is not valid in a Borland derived dialect. Use mode ISO (-Miso, I
didn't try myself).

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
Reply | Threaded
Open this post in threaded view
|

Re: procedure and function parameters?

Bernd Oppolzer
In reply to this post by Free Pascal - General mailing list

Am 04.03.2018 um 18:45 schrieb Sven Barth via fpc-pascal:

> On 04.03.2018 18:06, Bernd Oppolzer wrote:
>> Are procedure and function parameters allowed in Free Pascal?
>>
>> When I tried to compile the Man-or-boy example program (Knuth's test),
>> FPC complained with a syntax error:
>>
>>
>> c:\work\pascal\work>fpc manorboy.pas
>> Free Pascal Compiler version 3.0.0 [2015/11/16] for i386
>> Copyright (c) 1993-2015 by Florian Klaempfl and others
>> Target OS: Win32 for i386
>> Compiling manorboy.pas
>> manorboy.pas(41,28) Fatal: Syntax error, "identifier" expected but
>> "FUNCTION" found
>> Fatal: Compilation aborted
>> Error: C:\FPC\3.0.0\bin\i386-win32\ppc386.exe returned an error exitcode
>>
>>
>> This is the place where the function parameter appears in the
>> definition of the function A:
>>
>>
>> function A ( K : INTEGER ; function X1 : INTEGER ; function X2 :
>>             INTEGER ; function X3 : INTEGER ; function X4 : INTEGER ;
>>             function X5 : INTEGER ) : INTEGER ;
> There is only one solution that currently really will work with that
> kind of code: use {$mode iso} at the top of the file to use the ISO
> Pascal compatible mode.
>
> In theory it should also be possible to use another mode plus
> {$modeswitch nestedprocvars}, but that doesn't play nicely with the call
> to A inside of B as the compiler seems to call the X4 parameter while it
> shouldn't...
>
> Regards,
> Sven
>

Thanks,

mode iso worked without problems;
the results were as expected.

Kind regards

Bernd

_______________________________________________
fpc-pascal maillist  -  [hidden email]
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal