After hardening, if specimen is throwable, return it.
A specimen is throwable iff it is Passable and contains no PassableCaps,
i.e., no Remotables or Promises.
IOW, if it contains only copy-data and passable errors.
Otherwise, if specimen is almost throwable, for example, it is
an error that can be made throwable by toPassableError, then
return specimen converted to a throwable.
Otherwise, throw a diagnostic indicating a failure to coerce.
This is in support of the exo boundary throwing only throwables, to ease
security review.
TODO Adopt a more flexitble notion of throwable, in which
data containers containing non-passable errors can themselves be coerced
to throwable by coercing to a similar containers containing
the results of coercing those errors to passable errors.
After hardening, if
specimen
is throwable, return it. A specimen is throwable iff it is Passable and contains no PassableCaps, i.e., no Remotables or Promises. IOW, if it contains only copy-data and passable errors.Otherwise, if
specimen
is almost throwable, for example, it is an error that can be made throwable bytoPassableError
, then returnspecimen
converted to a throwable.Otherwise, throw a diagnostic indicating a failure to coerce.
This is in support of the exo boundary throwing only throwables, to ease security review.
TODO Adopt a more flexitble notion of throwable, in which data containers containing non-passable errors can themselves be coerced to throwable by coercing to a similar containers containing the results of coercing those errors to passable errors.