summaryrefslogtreecommitdiff
path: root/emacs
diff options
context:
space:
mode:
authorNeil Jerram <neil@ossau.uklinux.net>2008-07-11 17:53:43 +0100
committerNeil Jerram <neil@ossau.uklinux.net>2008-07-17 23:05:57 +0100
commit091baf9edfb8330226524b99c3bf623499516bf7 (patch)
treec10c5cc50e2397626401f6d930d945e9cea563d4 /emacs
parent0d751d472091421d91c097342c849cd52386f6ca (diff)
Single stepping through code from Emacs
When you use GDS to evaluate Scheme code from Emacs, you can now use `C-u' to indicate that you want to single step through that code. See `Evaluating Scheme Code' in the manual for more details. * scheme-using.texi (Evaluating Scheme Code): Document use of `C-u' prefix with evaluation commands. * gds-scheme.el (gds-eval-region, gds-eval-expression) (gds-eval-defun, gds-eval-last-sexp): Support `C-u' prefix, meaning that user wants to single step through the code. * gds-client.scm (handle-nondebug-protocol): Add support for setting a trap on code that is about to be evaluated.
Diffstat (limited to 'emacs')
-rw-r--r--emacs/ChangeLog6
-rwxr-xr-xemacs/gds-scheme.el52
2 files changed, 39 insertions, 19 deletions
diff --git a/emacs/ChangeLog b/emacs/ChangeLog
index 5a4365ff5..fb9d78999 100644
--- a/emacs/ChangeLog
+++ b/emacs/ChangeLog
@@ -1,3 +1,9 @@
+2008-07-17 Neil Jerram <neil@ossau.uklinux.net>
+
+ * gds-scheme.el (gds-eval-region, gds-eval-expression)
+ (gds-eval-defun, gds-eval-last-sexp): Support `C-u' prefix,
+ meaning that user wants to single step through the code.
+
2007-02-06 Clinton Ebadi <clinton@unknownlamer.org>
* gds-scheme.el (gds-display-results): Use save-selected-window
diff --git a/emacs/gds-scheme.el b/emacs/gds-scheme.el
index a03a07ba5..db0e6cd41 100755
--- a/emacs/gds-scheme.el
+++ b/emacs/gds-scheme.el
@@ -279,9 +279,12 @@ region's code."
(setq line (count-lines (point-min) (point))))
(cons line column)))
-(defun gds-eval-region (start end)
- "Evaluate the current region."
- (interactive "r")
+(defun gds-eval-region (start end &optional debugp)
+ "Evaluate the current region. If invoked with `C-u' prefix (or, in
+a program, with optional DEBUGP arg non-nil), pause and pop up the
+stack at the start of the evaluation, so that the user can single-step
+through the code."
+ (interactive "r\nP")
(or gds-client
(gds-auto-associate-buffer)
(call-interactively 'gds-associate-buffer))
@@ -289,24 +292,29 @@ region's code."
(port-name (gds-port-name start end))
(lc (gds-line-and-column start)))
(let ((code (buffer-substring-no-properties start end)))
- (gds-send (format "eval (region . %S) %s %S %d %d %S"
+ (gds-send (format "eval (region . %S) %s %S %d %d %S %s"
(gds-abbreviated code)
(if module (prin1-to-string module) "#f")
port-name (car lc) (cdr lc)
- code)
+ code
+ (if debugp '(debug) '(none)))
gds-client))))
-(defun gds-eval-expression (expr &optional correlator)
- "Evaluate the supplied EXPR (a string)."
- (interactive "sEvaluate expression: \nP")
+(defun gds-eval-expression (expr &optional correlator debugp)
+ "Evaluate the supplied EXPR (a string). If invoked with `C-u'
+prefix (or, in a program, with optional DEBUGP arg non-nil), pause and
+pop up the stack at the start of the evaluation, so that the user can
+single-step through the code."
+ (interactive "sEvaluate expression: \ni\nP")
(or gds-client
(gds-auto-associate-buffer)
(call-interactively 'gds-associate-buffer))
(set-text-properties 0 (length expr) nil expr)
- (gds-send (format "eval (%S . %S) #f \"Emacs expression\" 0 0 %S"
+ (gds-send (format "eval (%S . %S) #f \"Emacs expression\" 0 0 %S %s"
(or correlator 'expression)
(gds-abbreviated expr)
- expr)
+ expr
+ (if debugp '(debug) '(none)))
gds-client))
(defconst gds-abbreviated-length 35)
@@ -325,19 +333,25 @@ region's code."
(concat (substring code 0 (- gds-abbreviated-length 3)) "...")
code))
-(defun gds-eval-defun ()
- "Evaluate the defun (top-level form) at point."
- (interactive)
+(defun gds-eval-defun (&optional debugp)
+ "Evaluate the defun (top-level form) at point. If invoked with
+`C-u' prefix (or, in a program, with optional DEBUGP arg non-nil),
+pause and pop up the stack at the start of the evaluation, so that the
+user can single-step through the code."
+ (interactive "P")
(save-excursion
(end-of-defun)
(let ((end (point)))
(beginning-of-defun)
- (gds-eval-region (point) end))))
-
-(defun gds-eval-last-sexp ()
- "Evaluate the sexp before point."
- (interactive)
- (gds-eval-region (save-excursion (backward-sexp) (point)) (point)))
+ (gds-eval-region (point) end debugp))))
+
+(defun gds-eval-last-sexp (&optional debugp)
+ "Evaluate the sexp before point. If invoked with `C-u' prefix (or,
+in a program, with optional DEBUGP arg non-nil), pause and pop up the
+stack at the start of the evaluation, so that the user can single-step
+through the code."
+ (interactive "P")
+ (gds-eval-region (save-excursion (backward-sexp) (point)) (point) debugp))
;;;; Help.