emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[nongnu] elpa/geiser-chez 578ea8f 1/2: add debugger support


From: ELPA Syncer
Subject: [nongnu] elpa/geiser-chez 578ea8f 1/2: add debugger support
Date: Thu, 18 Nov 2021 12:57:42 -0500 (EST)

branch: elpa/geiser-chez
commit 578ea8fda533d09776124510c6b962736337e139
Author: Jay Xu <jay.xu.krfantasy@gmail.com>
Commit: Jay Xu <jay.xu.krfantasy@gmail.com>

    add debugger support
---
 geiser-chez.el       | 26 ++++++++++++++++++++++----
 src/geiser/geiser.ss | 11 +++++++----
 2 files changed, 29 insertions(+), 8 deletions(-)

diff --git a/geiser-chez.el b/geiser-chez.el
index 307356e..a3af75c 100644
--- a/geiser-chez.el
+++ b/geiser-chez.el
@@ -25,6 +25,7 @@
 (require 'geiser-edit)
 (require 'geiser-log)
 (require 'geiser-impl)
+(require 'geiser-repl)
 
 (require 'compile)
 (require 'info-look)
@@ -59,6 +60,11 @@
   :type '(repeat string)
   :group 'geiser-chez)
 
+(geiser-custom--defcustom geiser-chez-debug-on-exception-p nil
+  "Whether to automatically enter the debugger when catching an exception"
+  :type 'boolean
+  :group 'geiser-chez)
+
 
 ;;; REPL support:
 
@@ -83,6 +89,8 @@ This function uses `geiser-chez-init-file' if it exists."
 
 (defconst geiser-chez--prompt-regexp "> ")
 
+(defconst geiser-chez--debugger-prompt-regexp "debug> $\\|break> $\\|.+: $")
+
 
 ;;; Evaluation support:
 
@@ -148,13 +156,23 @@ This function uses `geiser-chez-init-file' if it exists."
 
 ;;; Error display:
 
+(defun geiser-chez--enter-debugger ()
+  "Tell Geiser to interact with the debugger."
+  (when geiser-chez-debug-on-exception-p
+    (let ((bt-cmd "\n(debug)\n")
+          (repl-buffer (geiser-repl--repl/impl 'chez)))
+      (compilation-forget-errors)
+      (goto-char (point-max))
+      (geiser-repl--prepare-send)
+      (comint-send-string repl-buffer bt-cmd)
+      (ignore-errors (next-error)))))
+
 (defun geiser-chez--display-error (_module key msg)
   "Display an error found during evaluation with the given KEY and message 
MSG."
   (when (stringp msg)
     (save-excursion (insert msg))
     (geiser-edit--buttonize-files))
-  (and (or (eq key 'chez-error-message)
-           (not key))
+  (and (not key)
        (not (zerop (length msg)))
        msg))
 
@@ -234,8 +252,8 @@ This function uses `geiser-chez-init-file' if it exists."
   (minimum-version geiser-chez-minimum-version)
   (repl-startup geiser-chez--startup)
   (prompt-regexp geiser-chez--prompt-regexp)
-  (debugger-prompt-regexp nil) ;; geiser-chez--debugger-prompt-regexp
-  ;; (enter-debugger geiser-chez--enter-debugger)
+  (debugger-prompt-regexp geiser-chez--debugger-prompt-regexp)
+  (enter-debugger geiser-chez--enter-debugger)
   (marshall-procedure geiser-chez--geiser-procedure)
   (find-module geiser-chez--get-module)
   ;; (enter-command geiser-chez--enter-command)
diff --git a/src/geiser/geiser.ss b/src/geiser/geiser.ss
index 478b9af..afa58c3 100644
--- a/src/geiser/geiser.ss
+++ b/src/geiser/geiser.ss
@@ -54,11 +54,14 @@
         (lambda (k)
           (with-exception-handler
               (lambda (e)
+                (debug-condition e)     ; save the condition for the debugger
                 (k `((result "")
-                     (output . ,(with-output-to-string
-                                  (lambda ()
-                                    (display-condition e))))
-                     (error (key . chez-error-message)))))
+                     (output . ,(format "~a~%~a"
+                                        (get-output-string output-string)
+                                        (with-output-to-string
+                                          (lambda ()
+                                            (display-condition e)))))
+                     (error (key . geiser-debugger)))))
             (lambda ()
               (call-with-values
                   ;; evaluate form, allow for multiple return values,



reply via email to

[Prev in Thread] Current Thread [Next in Thread]