diff options
author | W. Kosior <koszko@koszko.org> | 2025-02-11 12:13:45 +0100 |
---|---|---|
committer | W. Kosior <koszko@koszko.org> | 2025-02-11 12:13:45 +0100 |
commit | 7cad1d5907705bb7ca3411017a099186aa75ce19 (patch) | |
tree | b2c6b23f5427b56933022e4256a1e6c5934e5e05 | |
parent | 6995ff9efcf9c3e02a83656dc41dce3934e5cd97 (diff) | |
download | cantius-7cad1d5907705bb7ca3411017a099186aa75ce19.tar.gz cantius-7cad1d5907705bb7ca3411017a099186aa75ce19.zip |
Avoid `with-parameters*' which creates a continuation barrier.
-rw-r--r-- | src/guile/cantius.scm | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/src/guile/cantius.scm b/src/guile/cantius.scm index 36aafb7..bbe6c2c 100644 --- a/src/guile/cantius.scm +++ b/src/guile/cantius.scm @@ -659,17 +659,23 @@ (apply (endpoint-handler endpoint) request body (or (and=> path-tail list) '())))))))))) - (with-parameters* (map car parameters) (map cdr parameters) - (lambda () - (match ((compose list compute-response)) - ((response-body) - (values (build-response*) response-body)) - ((response response-body) - (values response response-body)) - (something-else - (values (build-response* #:headers *%default-headers #:code 500) - (format #f "Invalid return values from handler:~%~a" - something-else)))))))) + (let recurse ((parameters parameters)) + (match parameters + + (((param . value) . rest) + (parameterize ((param value)) + (recurse rest))) + + (() + (match ((compose list compute-response)) + ((response-body) + (values (build-response*) response-body)) + ((response response-body) + (values response response-body)) + (something-else + (values (build-response* #:headers *%default-headers #:code 500) + (format #f "Invalid return values from handler:~%~a" + something-else))))))))) (define-public (run-cantius endset . server-args) (apply run-server (cut handler <> <> endset) server-args)) |