diff options
author | Ludovic Courtès <ludo@gnu.org> | 2021-01-21 00:05:29 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2021-01-21 00:14:38 +0100 |
commit | 98d3abe7440717724263cacca8c36e9f43d53fcc (patch) | |
tree | e6c17869b7014cfd8ddf83570d772958b2d10abd /guix | |
parent | 074a201c33f822a7ab59512e7ee8b301204ff732 (diff) |
repl: Fix exception handling for interpreted code.
The 'stack' variable could be #f when code is interpreted, which in
practice happens when running in "legacy" mode--i.e., when
'open-inferior' invokes "guile" instead of "guix repl".
* guix/repl.scm (send-repl-response)[handle-exception]: Check whether
STACK is true before passing it to 'stack->frames'.
* tests/inferior.scm ("&inferior-exception, legacy mode"): New test.
Diffstat (limited to 'guix')
-rw-r--r-- | guix/repl.scm | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/guix/repl.scm b/guix/repl.scm index 0ace5976cf..94d85815ef 100644 --- a/guix/repl.scm +++ b/guix/repl.scm @@ -78,8 +78,14 @@ output port. VERSION is the client's protocol version we are targeting." (let ((stack (if (repl-prompt) (make-stack #t handle-exception (repl-prompt)) (make-stack #t)))) + ;; Note: 'make-stack' returns #f if there's no 'handle-exception' + ;; stack frame, which is the case when this file is being + ;; interpreted as with 'primitive-load'. `(exception (arguments ,key ,@(map value->sexp args)) - (stack ,@(map frame->sexp (stack->frames stack)))))) + (stack ,@(map frame->sexp + (if stack + (stack->frames stack) + '())))))) (_ ;; Protocol (0 0). `(exception ,key ,@(map value->sexp args))))) |