diff --git a/libguile/init.c b/libguile/init.c index 3614ee7ee..24304558f 100644 --- a/libguile/init.c +++ b/libguile/init.c @@ -509,8 +509,8 @@ scm_boot_guile_1 (base, closure) if (!setjmp_val) { scm_set_program_arguments (closure->argc, closure->argv, 0); - scm_internal_catch (SCM_BOOL_T, invoke_main_func, closure, - scm_handle_by_message, 0); + scm_internal_lazy_catch (SCM_BOOL_T, invoke_main_func, closure, + scm_handle_by_message, 0); } scm_restore_signals (); diff --git a/libguile/throw.c b/libguile/throw.c index a55e043ea..d17e33968 100644 --- a/libguile/throw.c +++ b/libguile/throw.c @@ -476,21 +476,24 @@ handler_message (void *handler_data, SCM tag, SCM args) char *prog_name = (char *) handler_data; SCM p = scm_cur_errp; - if (! prog_name) - prog_name = "guile"; - - scm_puts (prog_name, p); - scm_puts (": ", p); - if (scm_ilength (args) >= 3) { + SCM stack = scm_make_stack (SCM_LIST1 (SCM_BOOL_T)); + SCM subr = SCM_CAR (args); SCM message = SCM_CADR (args); - SCM parts = SCM_CADDR (args); + SCM parts = SCM_CADDR (args); + SCM rest = SCM_CDDDR (args); - scm_display_error_message (message, parts, p); + scm_display_error (stack, p, subr, message, parts, rest); } else { + if (! prog_name) + prog_name = "guile"; + + scm_puts (prog_name, p); + scm_puts (": ", p); + scm_puts ("uncaught throw to ", p); scm_prin1 (tag, p, 0); scm_puts (": ", p);