On Wednesday, 28 June 2017 at 06:31:40 UTC, Biotronic wrote:
On Monday, 26 June 2017 at 19:31:53 UTC, Moritz Maxeiner wrote:
the good *way* to achieve this result would be the following:
- When visiting `startFoo`, the compiler automatically
aggregates all different exceptions it may throw and stores
the resulting set
- If `startFoo` is going to be part of a (binary) library and
its symbol is exported, also export its exception set
- Improve the compiler's nothrow analysis such that if
startFoo is called in scope S, but all of the exceptions in
its exception set are caught (i.e. can't break out of scope
S), it is treated as nothrow in S.
- Enclose the call to `startFoo` in B in a nothrow scope.
So I have this .dll. How do I specify which exceptions it
throws?
- Static/Dynamic linking: As said in bullet point two above, the
exception set would have to be exported (more precise: in such a
way that it can be loaded again at compile time); there are
several ways to go about that: Add the exception set (e.g. via
attributes) to the function declarations in a .di file (which
could indeed look like checked exception, except that it's auto
generated), use a separate (binary) file with mangled functions
names to exception set mapping, etc.
- Dynamic loading: Won't work
One could also make an exception for bodyless functions and allow
specification of the exception set *only* there, e.g.
---
// Allow "checked exceptions" for stubs only
void foo() throws AException throws BException;
---