From a90c668e871dc7d9cb446734323c25588dd8d75a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fran=C3=A7ois-Ren=C3=A9=20Rideau?= Date: Mon, 4 Dec 2023 02:12:49 -0500 Subject: [PATCH] Flush outputs in main functions (#1066) Fixes #1064 --- src/gerbil/compiler/driver.ss | 9 +++++++-- src/gerbil/main.ss | 21 ++++++++++++--------- 2 files changed, 19 insertions(+), 11 deletions(-) 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)