chain of exceptions, next method
kdevel
kdevel at vogtner.de
Sat Aug 13 22:59:16 UTC 2022
Quote from `src/druntime/src`:
```
/**
* Returns:
* A reference to the _next error in the list. This is used
when a new
* $(D Throwable) is thrown from inside a $(D catch) block.
The originally
* caught $(D Exception) will be chained to the new $(D
Throwable) via this
* field.
*/
@property inout(Throwable) next() @safe inout return scope
pure nothrow @nogc { return nextInChain; }
```
Testcode:
```
import std.stdio;
import std.exception;
private:
class E1 : Exception { mixin basicExceptionCtors; }
class E2 : Exception { mixin basicExceptionCtors; }
void foo ()
{
try throw new E1 ("e1");
catch (Exception e)
throw new E2 ("e2");
}
void bar ()
{
auto e = new E1 ("e1");
e.next = new E2 ("e2");
throw e;
}
void dumpall (Exception e)
{
Throwable t = e;
stderr.writeln ("dumpall");
do
stderr.writeln (t.msg);
while ((t = t.next) !is null); // XXX: Why does !!(t = t.next)
not compile?
}
public void main ()
{
try foo ();
catch (Exception e)
dumpall (e);
try bar ();
catch (Exception e)
dumpall (e);
}
$ dmd cetest
$ ./cetest
dumpall
e2
dumpall
e1
e2
```
Would have expected two chained Exceptions in both cases. Is it
permitted to append exceptions from user code?
More information about the Digitalmars-d-learn
mailing list