The FSF has a new address.
[bpt/guile.git] / ice-9 / debugger.scm
index fb00c53..99f2d50 100644 (file)
 ;; 
 ;; You should have received a copy of the GNU Lesser General Public
 ;; License along with this library; if not, write to the Free Software
-;; Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+;; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 
 (define-module (ice-9 debugger)
   #:use-module (ice-9 debugger command-loop)
   #:use-module (ice-9 debugger state)
   #:use-module (ice-9 debugger utils)
   #:use-module (ice-9 format)
+  #:use-module (emacs gds-client)
   #:export (debug-stack
            debug
            debug-last-error
            debugger-error
            debugger-quit
            debugger-input-port
-           debugger-output-port)
+           debugger-output-port
+           debug-on-error)
   #:no-backtrace)
 
 ;;; The old (ice-9 debugger) has been factored into its constituent
@@ -119,7 +121,9 @@ Indicates that the debugger should display an introductory message.
                        (display "There is 1 frame on the stack.\n\n")
                        (format #t "There are ~A frames on the stack.\n\n" ssize))))
              (write-state-short state)
-             (debugger-command-loop state))))))))
+             (if (gds-connected?)
+                 (gds-command-loop state)
+                 (debugger-command-loop state)))))))))
 
 (define (debug)
   "Invoke the Guile debugger to explore the context of the last error."
@@ -152,4 +156,20 @@ Indicates that the debugger should display an introductory message.
      (lambda () output-port)
      (lambda (port) (set! output-port port)))))
 
+;;; {Debug on Error}
+
+(define (debug-on-error syms)
+  "Enable or disable debug on error."
+  (set! lazy-handler-dispatch
+       (if syms
+           (lambda (key . args)
+             (if (memq key syms)
+                 (begin
+                   (debug-stack (make-stack #t lazy-handler-dispatch)
+                                #:with-introduction
+                                #:continuable)
+                   (throw 'abort key)))
+             (apply default-lazy-handler key args))
+           default-lazy-handler)))
+
 ;;; (ice-9 debugger) ends here.