diff --git a/src/eql.cpp b/src/eql.cpp index 0213a63..7a551cb 100644 --- a/src/eql.cpp +++ b/src/eql.cpp @@ -7,6 +7,7 @@ #include #include #include +#include const char EQL::version[] = "20.7.1"; // July 2020 @@ -54,9 +55,22 @@ void EQL::ini(int argc, char** argv) { cl_booted = true; cl_boot(argc, argv); } -void EQL::eval(const char* lisp_code) { +void EQL::eval(const char* lisp_code, const EvalMode mode) { CL_CATCH_ALL_BEGIN(ecl_process_env()) { - si_safe_eval(2, ecl_read_from_cstring((char*)lisp_code), Cnil); } + switch(mode) { + case DebugOnError: + si_safe_eval(2, ecl_read_from_cstring((char*)lisp_code), Cnil); + break; + case LogOnError: + case DieOnError: + cl_object ret = si_safe_eval(3, ecl_read_from_cstring((char*)lisp_code), Cnil, ecl_make_fixnum(EVAL_ERROR_VALUE)); + if (ecl_t_of(ret) == t_fixnum && fix(ret) == EVAL_ERROR_VALUE) { + qDebug()<<"Error evaluating " <