[MLton] MLton bug: unhandled exception in Basis Library.
Matthew Fluet
fluet at tti-c.org
Tue Dec 16 08:37:38 PST 2008
On Mon, 15 Dec 2008, Nicolas Bertolotti wrote:
> Not really what I am looking for... (I already know how to use the exception history)
>
> The problem here is that the exception occurs at program startup during the initialisation of the basis library.
>
> At this stage, there is no real way to catch the exception and print the history.
The "fancy" top-level exception handler, that prints the history, is
implemented in
<src>/basis-library/primitive/mlton/exn.sml
and "installed" by 'Primitive.TopLevel.setHandler' in
<src>/basis-library/primitive/mlton/mlton.sml
An unhandled exception that is raised during the evaluation of the Basis
Library before the installation of the "fancy" top-level exception handler
is handled by the "emergency" top-level exception handler that is
"installed" in
<src>/basis-library/primitive/prim2.sml
If you want the emergency exception handler to print an exception history,
then you need to move (some portion of) the fancy exception handler
implementation back to the implementation of the emergency handler. In
particular, you need to call 'Primitive.MLton.Exn.setExtendExtra' with a
non-trivial function that captures the call-stack and you need to walk the
call-stack, extract the entries, and print them. It won't be trivial,
since, at the point of definition of the emergency exception handler, you
have almost no Basis Library functions available; everything will need to
be done with very primitive operations.
More information about the MLton
mailing list