Thread overview
ImportC has improved macro support
Dec 06, 2023
Walter Bright
Dec 06, 2023
Walter Bright
Dec 06, 2023
user1234
Dec 06, 2023
Dave P.
Dec 07, 2023
Walter Bright
Dec 08, 2023
Ki Rill
Dec 09, 2023
Walter Bright
Dec 09, 2023
Paolo Invernizzi
December 06, 2023
Macros with the pattern:

    #define BOO ( expression )

are now translated to:

    auto BOO()() { return expression; }

and are available for importing!
December 06, 2023
On 12/6/2023 11:59 AM, Walter Bright wrote:
> Macros with the pattern:
> 
>      #define BOO ( expression )
> 
> are now translated to:
> 
>      auto BOO()() { return expression; }
> 
> and are available for importing!

The interesting thing here is `expression` does not need to be translated to D. It's still a C expression, and has C semantics. D templates with C semantics just falls out of the way ImportC was implemented.
December 06, 2023

On Wednesday, 6 December 2023 at 20:26:38 UTC, Walter Bright wrote:

>

The interesting thing here is expression does not need to be translated to D. It's still a C expression, and has C semantics. D templates with C semantics just falls out of the way ImportC was implemented.

Indeed, I've seen that the other day, the PR only modifies the parser.

December 06, 2023
On Wednesday, 6 December 2023 at 19:59:54 UTC, Walter Bright wrote:
> Macros with the pattern:
>
>     #define BOO ( expression )
>
> are now translated to:
>
>     auto BOO()() { return expression; }
>
> and are available for importing!

Does this work for function-like macros?
December 07, 2023
On 12/6/2023 12:43 PM, Dave P. wrote:
> Does this work for function-like macros?

Not yet. It just lays the groundwork for that.
December 08, 2023

On Wednesday, 6 December 2023 at 19:59:54 UTC, Walter Bright wrote:

>

Macros with the pattern:

#define BOO ( expression )

are now translated to:

auto BOO()() { return expression; }

and are available for importing!

This is amazing! It should solve the disappearing of enum-like definitions in code. I encountered this in Raylib. It has colors defined as macros:

#define WHITE (Color){255, 255, 255, 255}

I preprocessed the file and all color definitions were gone. I had to redefine them manually.

Nuklear does the same too for their Flags.

December 08, 2023
On 12/7/2023 9:17 PM, Ki Rill wrote:
> This is amazing!

All in a day's work!

> It should solve the disappearing of enum-like definitions in code. I encountered this in Raylib. It has colors defined as macros:
> 
> ```c
> #define WHITE (Color){255, 255, 255, 255}
> ```
> 
> I preprocessed the file and all color definitions were gone. I had to redefine them manually.

Give it a try, it should work now!

December 09, 2023

On Friday, 8 December 2023 at 05:17:30 UTC, Ki Rill wrote:

>

On Wednesday, 6 December 2023 at 19:59:54 UTC, Walter Bright wrote:

>

Macros with the pattern:

#define BOO ( expression )

are now translated to:

auto BOO()() { return expression; }

and are available for importing!

This is amazing! It should solve the disappearing of enum-like definitions in code. I encountered this in Raylib. It has colors defined as macros:

#define WHITE (Color){255, 255, 255, 255}

I preprocessed the file and all color definitions were gone. I had to redefine them manually.

Nuklear does the same too for their Flags.

Same situation here, with RayLib!
I really really like the way importC is improving, kudos to Walter!

/Paolo