From: Jan Nieuwenhuizen <janneke@gnu.org>
To: Stefan Monnier <monnier@iro.umontreal.ca>
Cc: guile-devel <guile-devel@gnu.org>, emacs-devel <emacs-devel@gnu.org>
Subject: Re: [PATCH] Initial Guile REPL (guiler) debugger support for GUD.
Date: Sat, 09 Aug 2014 18:10:48 +0200 [thread overview]
Message-ID: <87wqah3apj.fsf@drakenvlieg.flower> (raw)
In-Reply-To: <jwvzjfd3cf1.fsf-monnier+emacs@gnu.org> (Stefan Monnier's message of "Sat, 09 Aug 2014 11:35:11 -0400")
[-- Attachment #1: Type: text/plain, Size: 320 bytes --]
Stefan Monnier writes:
>> * progmodes/gud.el (guiler): New function. Starts the Guile REPL;
>> add Guile debugger support for GUD.
>
> Looks OK,
That's great, we're going to guile support in GUD!
> tho please use the new `setq-local' when setting variables
> buffer-locally.
New patch attached.
Greetings, Jan
[-- Attachment #2: 0001-Initial-Guile-REPL-guiler-debugger-support-for-GUD.patch --]
[-- Type: text/x-diff, Size: 7013 bytes --]
From 3db1acfeb281f6fbbc8df19164b7f313e37b81ee Mon Sep 17 00:00:00 2001
From: Jan Nieuwenhuizen <janneke@gnu.org>
Date: Mon, 4 Aug 2014 11:15:59 +0200
Subject: [PATCH] Initial Guile REPL (guiler) debugger support for GUD.
* lisp/progmodes/gud.el (guiler): New function. Starts the
Guile REPL; add Guile debugger support for GUD.
---
lisp/ChangeLog | 5 +++
lisp/progmodes/gud.el | 89 ++++++++++++++++++++++++++++++++++++++++++++++++---
2 files changed, 89 insertions(+), 5 deletions(-)
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index b6f16ea..b3da957 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,3 +1,8 @@
+2014-08-05 Jan Nieuwenhuizen <janneke@gnu.org>
+
+ * progmodes/gud.el (guiler): New function. Starts the Guile REPL;
+ add Guile debugger support for GUD.
+
2014-08-03 Paul Eggert <eggert@cs.ucla.edu>
Don't mishandle year-9999 dates (Bug#18176).
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index c6fc944..09085f7 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -34,7 +34,8 @@
;; and added a menu. Brian D. Carlstrom <bdc@ai.mit.edu> combined the IRIX
;; kluge with the gud-xdb-directories hack producing gud-dbx-directories.
;; Derek L. Davies <ddavies@world.std.com> added support for jdb (Java
-;; debugger.)
+;; debugger.) Jan Nieuwenhuizen added support for the Guile REPL (Guile
+;; debugger).
;;; Code:
@@ -140,7 +141,7 @@ Used to gray out relevant toolbar icons.")
(display-graphic-p)
(fboundp 'x-show-tip))
:visible (memq gud-minor-mode
- '(gdbmi dbx sdb xdb pdb))
+ '(gdbmi guiler dbx sdb xdb pdb))
:button (:toggle . gud-tooltip-mode))
([refresh] "Refresh" . gud-refresh)
([run] menu-item "Run" gud-run
@@ -170,11 +171,11 @@ Used to gray out relevant toolbar icons.")
([up] menu-item "Up Stack" gud-up
:enable (not gud-running)
:visible (memq gud-minor-mode
- '(gdbmi gdb dbx xdb jdb pdb)))
+ '(gdbmi gdb guiler dbx xdb jdb pdb)))
([down] menu-item "Down Stack" gud-down
:enable (not gud-running)
:visible (memq gud-minor-mode
- '(gdbmi gdb dbx xdb jdb pdb)))
+ '(gdbmi gdb guiler dbx xdb jdb pdb)))
([pp] menu-item "Print S-expression" gud-pp
:enable (and (not gud-running)
(bound-and-true-p gdb-active-process))
@@ -195,7 +196,7 @@ Used to gray out relevant toolbar icons.")
([finish] menu-item "Finish Function" gud-finish
:enable (not gud-running)
:visible (memq gud-minor-mode
- '(gdbmi gdb xdb jdb pdb)))
+ '(gdbmi gdb guiler xdb jdb pdb)))
([stepi] menu-item "Step Instruction" gud-stepi
:enable (not gud-running)
:visible (memq gud-minor-mode '(gdbmi gdb dbx)))
@@ -1704,6 +1705,83 @@ and source-file directory for your debugger."
(run-hooks 'pdb-mode-hook))
\f
;; ======================================================================
+;; Guile REPL (guiler) functions
+
+;; History of argument lists passed to guiler.
+(defvar gud-guiler-history nil)
+
+(defvar gud-guiler-lastfile nil)
+
+(defun gud-guiler-marker-filter (string)
+ (setq gud-marker-acc (if gud-marker-acc (concat gud-marker-acc string) string))
+
+ (let ((start 0))
+ (while
+ (cond
+ ((string-match "^In \\(.*\\):" gud-marker-acc start)
+ (setq gud-guiler-lastfile (match-string 1 gud-marker-acc)))
+ ((string-match "^\\([^:\n]+\\):\\([0-9]+\\):\\([0-9]+\\):[^\n]*"
+ gud-marker-acc start)
+ (setq gud-guiler-lastfile (match-string 1 gud-marker-acc))
+ (setq gud-last-frame
+ (cons gud-guiler-lastfile
+ (string-to-number (match-string 2 gud-marker-acc)))))
+ ((string-match "^[ ]*\\([0-9]+\\):\\([0-9]+\\) [^\n]*"
+ gud-marker-acc start)
+ (if gud-guiler-lastfile
+ (setq gud-last-frame
+ (cons gud-guiler-lastfile
+ (string-to-number (match-string 1 gud-marker-acc))))))
+ ((string-match comint-prompt-regexp gud-marker-acc start) t)
+ ((string= (substring gud-marker-acc start) "") nil)
+ (t nil))
+ (setq start (match-end 0)))
+
+ ;; Search for the last incomplete line in this chunk
+ (while (string-match "\n" gud-marker-acc start)
+ (setq start (match-end 0)))
+
+ ;; If we have an incomplete line, store it in gud-marker-acc.
+ (setq gud-marker-acc (substring gud-marker-acc (or start 0))))
+ string)
+
+
+(defcustom gud-guiler-command-name "guile"
+ "File name for executing the Guile debugger.
+This should be an executable on your path, or an absolute file name."
+ :type 'string
+ :group 'gud)
+
+;;;###autoload
+(defun guiler (command-line)
+ "Run guiler on program FILE in buffer `*gud-FILE*'.
+The directory containing FILE becomes the initial working directory
+and source-file directory for your debugger."
+ (interactive
+ (list (gud-query-cmdline 'guiler)))
+
+ (gud-common-init command-line nil 'gud-guiler-marker-filter)
+ (setq-local gud-minor-mode 'guiler)
+
+;; FIXME: absolute file-names are not grokked yet by Guile's ,break-at-source
+;; and relative file names only when relative to %load-path.
+;; (gud-def gud-break ",break-at-source %d%f %l" "\C-b" "Set breakpoint at current line.")
+ (gud-def gud-break ",break-at-source %f %l" "\C-b" "Set breakpoint at current line.")
+;; FIXME: remove breakpoint with file-line not yet supported by Guile
+;; (gud-def gud-remove ",delete ---> %d%f:%l" "\C-d" "Remove breakpoint at current line")
+ (gud-def gud-step ",step" "\C-s" "Step one source line with display.")
+ (gud-def gud-next ",next" "\C-n" "Step one line (skip functions).")
+;; (gud-def gud-cont "continue" "\C-r" "Continue with display.")
+ (gud-def gud-finish ",finish" "\C-f" "Finish executing current function.")
+ (gud-def gud-up ",up" "<" "Up one stack frame.")
+ (gud-def gud-down ",down" ">" "Down one stack frame.")
+ (gud-def gud-print "%e" "\C-p" "Evaluate Guile expression at point.")
+
+ (setq comint-prompt-regexp "^scheme@([^>]+> ")
+ (setq paragraph-start comint-prompt-regexp)
+ (run-hooks 'guiler-mode-hook))
+\f
+;; ======================================================================
;;
;; JDB support.
;;
@@ -3450,6 +3528,7 @@ With arg, dereference expr if ARG is positive, otherwise do not dereference."
"Return a suitable command to print the expression EXPR."
(pcase gud-minor-mode
(`gdbmi (concat "-data-evaluate-expression \"" expr "\""))
+ (`guiler expr)
(`dbx (concat "print " expr))
((or `xdb `pdb) (concat "p " expr))
(`sdb (concat expr "/"))))
--
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.nl
[-- Attachment #3: Type: text/plain, Size: 154 bytes --]
--
Jan Nieuwenhuizen <janneke@gnu.org> | GNU LilyPond http://lilypond.org
Freelance IT http://JoyofSource.com | Avatar® http://AvatarAcademy.nl
prev parent reply other threads:[~2014-08-09 16:10 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-05 13:21 Initial GUD integration for Guile Jan Nieuwenhuizen
2014-08-05 13:21 ` [PATCH] Initial GUD integration support Jan Nieuwenhuizen
2014-08-05 13:21 ` [PATCH] Initial Guile REPL (guiler) debugger support for GUD Jan Nieuwenhuizen
2014-08-09 15:35 ` Stefan Monnier
2014-08-09 16:10 ` Jan Nieuwenhuizen [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.gnu.org/software/emacs/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87wqah3apj.fsf@drakenvlieg.flower \
--to=janneke@gnu.org \
--cc=emacs-devel@gnu.org \
--cc=guile-devel@gnu.org \
--cc=monnier@iro.umontreal.ca \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).