[fpc-devel] Error: Procedure/Function declared with call option NOSTACKFRAME but without ASSEMBLER
Martin Frb
lazarus at mfriebe.de
Thu Mar 20 20:46:04 CET 2025
Ok, maybe I lost the point in verbosity.
The following type
type a=procedure foo;
gives the error
project1.lpr(2,19) Fatal: Syntax error, ";" expected but
"identifier FOO" found
In a type declaration, the procedure can not have a name, and "foo" is
not a valid modifier here (cdecl would be and can be given).
But then
type a=procedure NoStackFrame ;
gives
project1.lpr(3,1) Error: Procedure/Function declared with call
option NOSTACKFRAME but without ASSEMBLER
Though I can not specify
type a=procedure assembler;
because it also gives
project1.lpr(7,33) Fatal: Syntax error, ";" expected but "identifier
ASSEMBLER" found
I.e. assembler seems not to be relevant for the type declaration. It can
only be given when I actually declare a procedure.
It also wont work as
type a=procedure assembler NoStackFrame ;
type a=procedure NoStackFrame assembler;
So why does the compiler interpret NoStackFrame in the type declaration,
when it does not do that for other non-relevant modifiers (like assembler)?
Just curious...
On 20/03/2025 20:23, Marco van de Voort via fpc-devel wrote:
>
> Op 20-3-2025 om 20:09 schreef Martin Frb via fpc-devel:
>> It is possible to declare a type for a cdecl function like
>> type a=procedure cdecl;
>>
>> But, not for "assembler" which makes sense, because its not a calling
>> convention. Same should likely be the case for NoStackframe.
>
> Roughly yes. Basically a procedure variable is a contract which should
> give the calling situation enough information to call the said function.
>
>
>> But
>>
>> program Project1;
>> type a=procedure {assembler} NoStackFrame ;
>> begin
>> end.
>>
> assembler is a comment?
>
>
>> gives a different error?
>
> Which error do you mean? Not to be facetious, just that errors might
> depend on architecture.
>
>
>> Should it?
>>
> The bar is twofold, the first, as said, being that the calling side
> must have enough information to call the result in all circumstances
> (read: on all targets), and the second , minor one, if that if there
> is an exception for parameterless functions, if it is worth to
> implement an exception.
>
>
> _______________________________________________
> fpc-devel maillist - fpc-devel at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
More information about the fpc-devel
mailing list