On Wednesday, 11 April 2018 at 18:36:56 UTC, Walter Bright wrote:
On 4/11/2018 3:25 AM, Atila Neves wrote:
I did the best I could having seen some macros. It's likely there are cases I've missed, or that maybe the translation in the link above doesn't work even for what it's supposed to be doing (I have no confidence about catching all the C casts for instance).

If there are other cases, I'll fix them as they're encountered. It's possible some of them can't be fixed and the user will have to work around them. Right now I have a feeling it will probably be ok. Time will tell (assuming I have users!).


That's right. There is no general solution. One can only look for common patterns and do those. For example,

  #define X 15

is a common pattern and can be reliably rewritten as:

  enum X = 15;

If I understand it correctly, dpp doesn't do that.

Instead, it runs the pre-processor on the source code, just like in C, so

// test.dpp
#define X 15
int foo() { return X; }

becomes

// test.d
int foo() { return 15; }

The upside of this approach: all macros just work, unless they use C (not C pre-processor, C proper) features that dpp can't handle. `sizeof(...)` is a special case that is handled in dpp.cursor.macro.translateToD and more could be added.

The downside: macros can't be directly used outside .dpp files.

Reply via email to