The FSF has a new address.
[bpt/guile.git] / ice-9 / debugger.scm
index 54711c6..99f2d50 100644 (file)
@@ -2,57 +2,34 @@
 
 ;;; Copyright (C) 1999, 2001, 2002 Free Software Foundation, Inc.
 ;;;
-;;; This program is free software; you can redistribute it and/or
-;;; modify it under the terms of the GNU General Public License as
-;;; published by the Free Software Foundation; either version 2, or
-;;; (at your option) any later version.
-;;;
-;;; This program is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-;;; General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with this software; see the file COPYING.  If not, write to
-;;; the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
-;;; Boston, MA 02111-1307 USA
-;;;
-;;; As a special exception, the Free Software Foundation gives permission
-;;; for additional uses of the text contained in its release of GUILE.
-;;;
-;;; The exception is that, if you link the GUILE library with other files
-;;; to produce an executable, this does not by itself cause the
-;;; resulting executable to be covered by the GNU General Public License.
-;;; Your use of that executable is in no way restricted on account of
-;;; linking the GUILE library code into it.
-;;;
-;;; This exception does not however invalidate any other reasons why
-;;; the executable file might be covered by the GNU General Public License.
-;;;
-;;; This exception applies only to the code released by the
-;;; Free Software Foundation under the name GUILE.  If you copy
-;;; code from other Free Software Foundation releases into a copy of
-;;; GUILE, as the General Public License permits, the exception does
-;;; not apply to the code that you add in this way.  To avoid misleading
-;;; anyone as to the status of such modified files, you must delete
-;;; this exception notice from them.
-;;;
-;;; If you write modifications of your own for GUILE, it is your choice
-;;; whether to permit this exception to apply to your modifications.
-;;; If you do not wish that, delete this exception notice.
+;; This library is free software; you can redistribute it and/or
+;; modify it under the terms of the GNU Lesser General Public
+;; License as published by the Free Software Foundation; either
+;; version 2.1 of the License, or (at your option) any later version.
+;; 
+;; This library is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+;; Lesser General Public License for more details.
+;; 
+;; 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., 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
@@ -144,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."
@@ -177,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.