ECL_RESTART_CASE
— C macro for restart-case
ECL_RESTART_CASE_BEGIN(env,names) {
} ECL_RESTART_CASE(n,args) { {
} ECL_RESTART_CASE_END;
ECL_RESTART_CASE_BEGIN runs a block of C code with a set of restarts bound to the names given by the list names. The subsequent ECL_RESTART_CASE statements specify what to do when the n-th restart is invoked, where n is an integer denoting the position of the name in the list names.
When the restart is invoked, it can receive any number of arguments, which are grouped in a list and stored in a new variable created with the name args.
The following example shows how to establish an ABORT and a USE-VALUE restart. Note how the first value to ECL_RESTART_CASE matches the position of the restart name in the list:
cl_object abort = ecl_make_symbol("ABORT","CL");
cl_object use_value = ecl_make_symbol("USE-VALUE","CL");
ECL_RESTART_BEGIN(the_env, cl_list(2, abort, use_value)) {
/* This form is evaluated with bound restarts */
output = cl_eval(1, form);
} ECL_RESTART_CASE(1, args) {
/* This code is executed when the 1st restart (ABORT) is invoked */
output = Cnil;
} ECL_RESTART_CASE(2, args) {
/* This code is executed when the 2nd restart (ABORT) is invoked */
output = ECL_CAR(args);
} ECL_RESTART_END;