From 2b1f2e8e5790b4bc517ac9a56a0676d07e532929 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 27 Sep 2016 22:34:37 -0400 Subject: [PATCH] Issue #111 - Improve output of error messages --- icyc.scm | 8 ++++++-- runtime.c | 13 +++++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/icyc.scm b/icyc.scm index 36bfd1cf..424333a1 100644 --- a/icyc.scm +++ b/icyc.scm @@ -38,14 +38,18 @@ (display "Error: ") (cond ((pair? obj) + (when (string? (car obj)) + (display (car obj)) + (display ": ") + (set! obj (cdr obj))) (for-each (lambda (o) - (display o) + (write o) (display " ")) obj)) (else (display obj))) - (display "\n") + (newline) (k #t)) (lambda () (repl))))) diff --git a/runtime.c b/runtime.c index 8316b528..760f9ec5 100644 --- a/runtime.c +++ b/runtime.c @@ -423,6 +423,7 @@ object Cyc_glo_eval_from_c = NULL; object Cyc_default_exception_handler(void *data, int argc, closure _, object err) { + int is_msg = 1; fprintf(stderr, "Error: "); if ((err == NULL) || is_value_type(err) || type_of(err) != pair_tag) { @@ -431,8 +432,16 @@ object Cyc_default_exception_handler(void *data, int argc, closure _, // Error is list of form (type arg1 ... argn) err = cdr(err); // skip type field for (; (err != NULL); err = cdr(err)) { // output with no enclosing parens - Cyc_display(car(err), stderr); - fprintf(stderr, " "); + if (is_msg && + is_object_type(car(err)) && + type_of(car(err)) == string_tag) { + is_msg = 0; + Cyc_display(car(err), stderr); + fprintf(stderr, ": "); + } else { + Cyc_write(car(err), stderr); + fprintf(stderr, " "); + } } }