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;
---

Reply via email to