Skip to content

si_safe_eval return value

extern cl_object
si_safe_eval(cl_narg narg, cl_object form, cl_object env, ...)
{
        if (narg == 3) {
                cl_object err_value;
                va_list args; va_start(args, env);
                err_value = va_arg(args, cl_object);
                return _ecl_funcall4(@'ext::safe-eval', form, env, err_value);
        }
        return _ecl_funcall3(@'ext::safe-eval', form, env);
}

ECL when provided with the third (fourth if we count narg) argument returns on error provided value (without invoking the debugger). This should be documented. It's a usable feature for production code (we don't want the debugger invoking there on each error – it would hang the service), but undocumented it's useless.