[fpc-pascal] Procedure types

Michael Van Canneyt michael at freepascal.org
Sat Dec 20 12:54:12 CET 2008



On Fri, 19 Dec 2008, Mark Morgan Lloyd wrote:

> I've got a few thousand lines of Pascal which I'm converting to FPC. It's
> actually the Meta-2 compiler-compiler which despite its age I still find
> useful for embedded script processing, I hope eventually to get it running on
> SPARC and possibly ARM as well as x86. Linux will not be the first OS this
> code has run on, by any means.
> 
> This code was originally written using MT+86, but compatibility with that has
> been sacrificed and it now works with TopSpeed Pascal, TP5.5 and Delphi.
> Because it is still compilable with TopSpeed which doesn't use the "standard"
> directive and conditional-compilation format I'm having to be very careful
> with the source.
> 
> In one place I am checking a number of procedure variables which are actually
> callbacks for reading input etc., if they're NIL then default procedures are
> used instead. For portability I have defined myself a function
> 
> FUNCTION AddressOf(VAR x): POINTER;
> 
> Hence
> 
> IF AddressOf(source) <> NIL THEN
>   state.source:= source
> ELSE
>   state.source:= dummyRead;
> 
> That works OK with the other compilers but when compiling with FPC it reports
> "Wrong number of parameters specified for call to "<Procedure 
> Variable>".
> 
> If instead I use
> 
> IF @source <> NIL THEN
>   state.source:= source
> ELSE
>   state.source:= dummyRead;
> 
> that works with FPC and probably other Borland-style compilers, but not with
> TopSpeed.
> 
> Is there a directive or mode that will allow a procedure variable to be
> compatible with AddressOf() as defined? Alternatively is there a type which is
> compatible with any procedure variable (i.e. like Modula-2's PROC, if my
> memory is correct), and can I overload AddressOf() to handle the specific case
> of a procedure passed as parameter while leaving it tolerant of other types?

No you cannot.

Did you try using Delphi mode ? The compiler uses other rules then.

Michael.



More information about the fpc-pascal mailing list