diff --git a/src/gerbil/compiler/driver.ss b/src/gerbil/compiler/driver.ss index 42e82e123..db57111db 100644 --- a/src/gerbil/compiler/driver.ss +++ b/src/gerbil/compiler/driver.ss @@ -139,8 +139,13 @@ namespace: gxc (write `(define builtin-modules (append (quote ,builtin-modules) libgerbil-builtin-modules))) (write `(define (gerbil-main) - (gerbil-runtime-init! builtin-modules) - (apply ,mod-main (cdr (command-line))))) + (with-unwind-protect + (lambda () + (gerbil-runtime-init! builtin-modules) + (apply ,mod-main (cdr (command-line)))) + (lambda () + (with-catch void (lambda () (force-output (current-output-port)))) + (with-catch void (lambda () (force-output (current-error-port)))))))) (write '(gerbil-main)) (newline))) diff --git a/src/gerbil/main.ss b/src/gerbil/main.ss index eec224a7d..edf741ec2 100644 --- a/src/gerbil/main.ss +++ b/src/gerbil/main.ss @@ -233,14 +233,17 @@ package: gerbil (def (main) (init!) - (let* ((cmdline (command-line)) - (program (car cmdline)) - (program-name (path-strip-directory program)) - (args (cdr cmdline))) - (if (string-prefix? "gx" program-name) - ;; a gerbil tool - (tool-main program-name args) - ;; our main -- process arguments and dispatch - (bach-main program-name args)))) + (unwind-protect + (let* ((cmdline (command-line)) + (program (car cmdline)) + (program-name (path-strip-directory program)) + (args (cdr cmdline))) + (if (string-prefix? "gx" program-name) + ;; a gerbil tool + (tool-main program-name args) + ;; our main -- process arguments and dispatch + (bach-main program-name args))) + (with-catch void (cut force-output (current-output-port))) + (with-catch void (cut force-output (current-error-port))))) (##main-set! main)