scope(faliure) flow control.
Ali Çehreli
acehreli at yahoo.com
Sat Dec 28 13:45:41 PST 2013
On 12/28/2013 12:50 PM, "Casper Færgemand" <shorttail at hotmail.com>" wrote:
> On Saturday, 28 December 2013 at 20:31:14 UTC, TheFlyingFiddle wrote:
>> int foo()
>> {
>> scope(failure) return 22;
>> throw new Exception("E");
>> }
>>
>> unittest
>> {
>> assert(foo() == 22);
>> }
>>
>> Is this defined behavior? At least in x64 dmd the exception is
>> swallowed and the assert evaluates to true.
>>
>> In any case what should happen? Should the method return or should the
>> exception be propagated up the callstack?
>
> It's rewritten as follows:
>
> int foo()
> {
> try {
> throw new Exception("E");
> } catch (Exception e) { // or whatever the D syntax is, I never
used it
> return 22;
There must also be the re-throwing of the caught exception:
throw e;
What happens is, the return statement does not allow that to happen.
> }
> }
>
> So yes, it's intended. scope(exit) uses finally instead of catch.
The spec brings restrictions to scope(exit) and scope(success) but does
not say much about scope(failure):
http://dlang.org/statement.html#ScopeGuardStatement
Yeah, it appears that OP's code is legal.
Ali
More information about the Digitalmars-d-learn
mailing list