c2cs icon indicating copy to clipboard operation
c2cs copied to clipboard

Function-like macros

Open lithiumtoast opened this issue 4 years ago • 3 comments
trafficstars

lithiumtoast avatar Aug 26 '21 21:08 lithiumtoast

Object-like macros have been implemented. It would just be taking it to the next level with function-like macros.

lithiumtoast avatar Aug 28 '21 21:08 lithiumtoast

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.

lithiumtoast avatar Apr 24 '22 02:04 lithiumtoast

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);\
    }

lithiumtoast avatar Jun 01 '22 01:06 lithiumtoast