nothrow doesn't seem to work with the recent dmd compiler :(
I know it because _d_local_unwind2() is still called.

Seems as if I need another more ugly (but still nicer than C++) solution. Mixins which jump on an error to a label...hell I love low level languages (Java is in this sense crap because they disallow [usefull] constructs like goto, templates, ...)

the code will look like this (usage)

mixin(onError(condition, "handling0", "handlingCallback", parameter0, parameter1));

the CTFE function onError checks the condition, if it is false it copies the parameters into variables and jumps to the label named after handling0.

on the end of the function there will be

mixin(errorHandling("cast(int)0", ["handling0", "handlingCallback", ...]));

which writes the goto labels, handling code etc which looks like this

 label_handleFoo:
 handleFoo();
 label_handling0:
 handlingCallback(handling0_parameter0, handling0_parameter1);
 return cast(int)0;

a bit ugly but not so ugly as C++ ... any better ideas?

Reply via email to