On Thursday, 12 April 2018 at 11:43:51 UTC, John Colvin wrote:
On Wednesday, 11 April 2018 at 18:36:56 UTC, Walter Bright wrote:
On 4/11/2018 3:25 AM, Atila Neves wrote:
[...]


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.

Yes, I assumed it actually "expands" the macros, whereas it actually runs the preprocessor on dpp files: https://github.com/atilaneves/dpp/issues/30

I can see it perfectly matches the Atila's usecase, and I'm curious
what are the other usecases for dpp?

Reply via email to