Estimated hours taken: 0.25
extras/exceptions/exception.m:
extras/clpr/cfloat.m:
Rename base_type* as type_ctor*, using Tyson's sed script,
to match Tyson's changes to runtime/* and elsewhere.
Estimated hours taken: 8
Add support for exceptions to the debugger, and
add support for debugging to the exception module.
browser/debugger_interface.m:
Add `exception' to the trace_port_type enumeration.
runtime/mercury_trace_base.h:
Add MR_PORT_EXCEPTION to the MR_Trace_Port enumeration.
trace/mercury_trace_internal.c:
trace/mercury_trace.h:
trace/mercury_trace.c:
Modify the code to handle MR_PORT_EXCEPTION.
extras/exceptions/exception.m:
- Define stack layout structures for the hand-written procedures
`builtin_throw' and `builtin_catch'.
- Use mktempframe() rather than mkframe() to allocate the temporary
frames used to prevent hijacking of the exception-catching frame
(this is more efficient, and avoids the need to give a stack
layout for those frames).
- Change the code for builtin_throw/1 so that if MR_trace_enabled
is true, it calls a new function trace_throw(), which calls
MR_trace(..., MR_PORT_EXCEPTION, ...) for each stack frame.
- Fix some type errors occurring for non-GC grades.
- Fix some uses of obsolete names (e.g. replace `hp' with `MR_hp').
runtime/mercury_trace_base.c:
compiler/trace.m:
Add some comments relating to the above changes.
Estimated hours taken: 80
Add support for exception handling, in extras/exceptions.
extras/exceptions/README:
Describes the files in this directory.
extras/exceptions/exception.m:
Contains the exception handling interface and implementation.
extras/exceptions/test_exceptions.m:
extras/exceptions/test_exceptions.exp:
extras/exceptions/test_uncaught_exception.m:
extras/exceptions/test_uncaught_exception.exp:
extras/exceptions/test_exceptions_func.m:
extras/exceptions/test_exceptions_func.exp:
Test cases.
extras/exceptions/Mmakefile:
The Mmakefile for building and running the test cases.