[fpc-devel] C-block reference syntax (blocker for 3.2)
jonas at freepascal.org
Sat Dec 7 10:28:32 CET 2019
On 2019-12-07 01:00, Blaise at blaise.ru wrote:
> 3) My first example back in 2016 intentionally featured a valid use
> case: CDECL is crucial for VARARGS. (Somehow, not only that case, but
> the whole point that DCC accepts calling conventions went unnoticed.)
I indeed did not know that.
> I wonder from where that desire to have the Delphi-like syntax for
> C-block references came.
It came from the facts that
1) afaik Delphi also allows you to pass plain methods (not sure about
plain procedures/functions though) to anonymous function parameters, so
inventing a new syntax seemed counterproductive
2) if, over time, someone would implement support for inline anonymous
functions (as you are doing now), that support could be added for
C-blocks as well without ending up with two different syntaxes for
semantically the same thing (just a different runtime/implementation
under the hood).
> If there is a consensus that this is a blocker, I am ready to do the
> work ASAP. provided we select the syntax. Personally, I am inclined
> towards these three:
> type M = procedure (const N: Integer) with var;
> type M = procedure (const N: Integer) cblock;
> type M = reference to procedure (const N: Integer) c;
I would prefer type M = reference to procedure (const N: Integer)
It's weird that unlike with plain procvar type declarations, there's no
semicolon between the end of the signature and the calling convention
modifier though. Or is that merely a Delphi syntax thing?
More information about the fpc-devel