i have some C code like this:

void func0 (void) { … }
int func1 (void) { … return smth+42; }

#define MYMACRO()  ({ func0(); func1(); })

int v;
…
v = MYMACRO()-16;


what it does? it uses GCC extension "statement expression" which allows to place almost arbitrary C operator block inside any expression. result of evaluating this "operator block" will be value of the last operator in it (return value of func1() in my case). this block can contain ifs, switches, local vars, local function declarations and so on.

in D we have no "statement expressions" in this form, afaik, and comma operator is very limited (and will be deprecated anyway). how can i reproduce such thing in D? i.e. i want to write something like:

v = mixin(MYMACRO())-16;

and have the same effect as in C code: all MYMACRO content (this can be almost anything) *always* inlined. the only thing i was able to think out is to generate nested functions with immediate call in MYMACRO, but it will not guarantee inlining (i.e. i must trust compiler intellgence here).

Reply via email to