Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-pascal / 2018-03

procedure and function parameters?

4 messages · 3 people · –

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

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

Reply by email

Sven Barth
to Bernd Oppolzer
Bernd Oppolzer wrote 24 lines
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

Reply by email

Bernd Oppolzer
to Sven Barth: There is only one solution that currently really will work with that kind of code: use…
Sven Barth wrote 37 lines
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

Reply by email