c2cs
c2cs copied to clipboard
Function-like macros
Object-like macros have been implemented. It would just be taking it to the next level with function-like macros.
C header .h files may contain source code. Since function macros could technically be seen as "source code" and subject to terms and agreements or otherwise licensing, transpiling C function macros into C# code would have to be optional. For libraries that are free and open source, I would recommend transpiling function-like macros; otherwise, I would advise caution and suggest you don't use the option unless you know 100% what you are doing.
Now that object-like macros are working well enough, this should be explored more. I need it for flecs-cs.
E.g. the function-like macro ECS_COMPONENT_DEFINE which takes an ecs_world, and id as "parameters". Inferring the type should be possible for world but the type for id would need to be a generic type in C#. It's not clear right now how to reliably tell when a function-like macro "parameter" is a type.
#define ECS_COMPONENT_DEFINE(world, id) \
{\
ecs_component_desc_t desc = {0}; \
desc.entity.entity = ecs_id(id); \
desc.entity.name = #id; \
desc.entity.symbol = #id; \
desc.size = sizeof(id); \
desc.alignment = ECS_ALIGNOF(id); \
ecs_id(id) = ecs_component_init(world, &desc);\
ecs_assert(ecs_id(id) != 0, ECS_INVALID_PARAMETER, NULL);\
}