static int exec_program(void) { int err = 0; again: ; JL_TRY { if (err) { //jl_lisp_prompt(); //return 1; jl_value_t *errs = jl_stderr_obj(); jl_value_t *e = jl_exception_in_transit; if (errs != NULL) { jl_show(jl_stderr_obj(), e); } else { jl_printf(JL_STDERR, "error during bootstrap: "); jl_static_show(JL_STDERR, e); } jl_printf(JL_STDERR, "\n"); JL_EH_POP(); return 1; } jl_load(program); } JL_CATCH { err = 1; goto again; } return 0; }
static int exec_program(char *program) { int err = 0; again: ; JL_TRY { if (err) { jl_value_t *errs = jl_stderr_obj(); jl_value_t *e = jl_exception_in_transit; if (errs != NULL) { jl_show(errs, e); } else { jl_printf(JL_STDERR, "error during bootstrap:\n"); jl_static_show(JL_STDERR, e); jl_printf(JL_STDERR, "\n"); jlbacktrace(); } jl_printf(JL_STDERR, "\n"); JL_EH_POP(); return 1; } jl_load(program, strlen(program)); } JL_CATCH { err = 1; goto again; } return 0; }
static int exec_program(void) { int err = 0; again: ; JL_TRY { jl_register_toplevel_eh(); if (err) { //jl_lisp_prompt(); //return 1; jl_value_t *errs = jl_stderr_obj(); jl_value_t *e = jl_exception_in_transit; if (errs != NULL) { jl_show(jl_stderr_obj(), e); } else { while (1) { if (jl_typeof(e) == (jl_type_t*)jl_loaderror_type) { e = jl_fieldref(e, 2); // TODO: show file and line } else if (jl_typeof(e) == (jl_type_t*)jl_backtrace_type) { e = jl_fieldref(e, 0); } else break; } if (jl_typeof(e) == (jl_type_t*)jl_errorexception_type) { ios_printf(ios_stderr, "error during bootstrap: %s\n", jl_string_data(jl_fieldref(e,0))); } else { ios_printf(ios_stderr, "error during bootstrap\n"); } } ios_printf(ios_stderr, "\n"); JL_EH_POP(); return 1; } jl_load(program); } JL_CATCH { err = 1; goto again; } return 0; }
DLLEXPORT void jl_eval_user_input(jl_value_t *ast, int show_value) { if (jl_have_event_loop) { // with multi.j loaded the command line input callback can return // before the command finishes running, so we have to // disable rl to prevent the prompt from reappearing too soon. repl_callback_disable(); } JL_GC_PUSH(&ast); assert(ast != NULL); int iserr = 0; again: ; JL_TRY { jl_register_toplevel_eh(); if (have_color) { ios_printf(ios_stdout, jl_color_normal); } if (iserr) { jl_show(jl_exception_in_transit); ios_printf(ios_stdout, "\n"); JL_EH_POP(); break; // leave JL_TRY } jl_value_t *value = jl_toplevel_eval(ast); jl_set_global(jl_system_module, jl_symbol("ans"), value); if (value != (jl_value_t*)jl_nothing && show_value) { if (have_color) { ios_printf(ios_stdout, jl_answer_color()); } repl_show_value(value); ios_printf(ios_stdout, "\n"); } } JL_CATCH { iserr = 1; goto again; } ios_printf(ios_stdout, "\n"); JL_GC_POP(); repl_callback_enable(); }
static int exec_program(void) { int err = 0; again: ; JL_TRY { jl_register_toplevel_eh(); if (err) { jl_show(jl_exception_in_transit); ios_printf(ios_stdout, "\n"); JL_EH_POP(); return 1; } jl_load(program); } JL_CATCH { err = 1; goto again; } return 0; }