chain of exceptions, next method
    Paul Backus 
    snarwin at gmail.com
       
    Sun Aug 14 02:30:43 UTC 2022
    
    
  
On Sunday, 14 August 2022 at 02:07:05 UTC, Ali Çehreli wrote:
>
> This automatic "combining" of exceptions happens for cleanup 
> code like scope(exit). (I remember bug(s) for scope(failure).):
To be precise, an exception thrown inside a 'finally' block gets 
chained onto the previous exception, but an exception thrown 
inside a 'catch' block does not. scope(exit) and scope(failure) 
are just syntax sugar for 'finally' and 'catch', respectively.
Relevant spec paragraph:
> If an exception is raised in the FinallyStatement and is not 
> caught before
> the original exception is caught, it is chained to the previous 
> exception via
> the next member of Throwable. Note that, in contrast to most 
> other
> programming languages, the new exception does not replace the 
> original
> exception. Instead, later exceptions are regarded as 
> 'collateral damage'
> caused by the first exception. The original exception must be 
> caught, and
> this results in the capture of the entire chain.
Source: https://dlang.org/spec/statement.html#try-statement
So, once an exception is caught, the chain ends, and any 
exception thrown after that begins a new chain.
    
    
More information about the Digitalmars-d-learn
mailing list