This is not possible in the general case.

A block is a structure containing:

 - A pointer to the invoke function.
 - The type info for the call.
 - A set of references to captured variables including:
   - Helpers to destroy any captured variables.
   - Helpers to copy any captured variables.

C macros are nowhere near expressive enough for this. You could probably (just about) implement them using C++ templates, though it would be a lot of work.

The block macros give a way of allowing functions / methods that take blocks to be called, so that it is possible to build GNUstep with GCC and link it to a program built with clang. To date, anything that needs to create blocks, we have implemented a different way or conditionally compiled out when building with GCC.

David

On 27/10/2019 15:55, Gregory Casamento wrote:
How do I create a block using the macros?  I know how to declare one, but not actually create one.   Doing it in clang is easy, but I need something that will work for both....

Any ideas?

GC
--
Gregory Casamento
GNUstep Lead Developer / OLC, Principal Consultant
http://www.gnustep.org - http://heronsperch.blogspot.com
http://ind.ie/phoenix/

Mailtrack <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&;> Sender notified by Mailtrack <https://mailtrack.io?utm_source=gmail&utm_medium=signature&utm_campaign=signaturevirality5&;> 10/27/19, 11:53:53 AM


Reply via email to