www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.announce - ImportC has improved macro support

reply Walter Bright <newshound2 digitalmars.com> writes:
Macros with the pattern:

     #define BOO ( expression )

are now translated to:

     auto BOO()() { return expression; }

and are available for importing!
Dec 06 2023
next sibling parent reply Walter Bright <newshound2 digitalmars.com> writes:
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.
Dec 06 2023
parent user1234 <user1234 12.de> writes:
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](https://github.com/dlang/dmd/pull/15871/files) only modifies the parser.
Dec 06 2023
prev sibling next sibling parent reply Dave P. <dave287091 gmail.com> writes:
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?
Dec 06 2023
parent Walter Bright <newshound2 digitalmars.com> writes:
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.
Dec 07 2023
prev sibling parent reply Ki Rill <rill.ki yahoo.com> writes:
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: ```c #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.
Dec 07 2023
next sibling parent Walter Bright <newshound2 digitalmars.com> writes:
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!
Dec 08 2023
prev sibling parent Paolo Invernizzi <paolo.invernizzi gmail.com> writes:
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: ```c #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
Dec 09 2023