changeset 75716:8bfa58061d79

(gdb-if-arrow): New macro. (gdb-mouse-until, gdb-mouse-jump): Use it.
author Nick Roberts <nickrob@snap.net.nz>
date Wed, 07 Feb 2007 21:57:04 +0000
parents 290bc5c215d2
children 1e03c5a4215f
files lisp/progmodes/gdb-ui.el
diffstat 1 files changed, 21 insertions(+), 39 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/progmodes/gdb-ui.el	Wed Feb 07 21:56:29 2007 +0000
+++ b/lisp/progmodes/gdb-ui.el	Wed Feb 07 21:57:04 2007 +0000
@@ -606,6 +606,16 @@
     (setq gdb-version "6.4+"))
   (gdb-init-2))
 
+(defmacro gdb-if-arrow (arrow-position &rest body)
+  `(if ,arrow-position
+      (let ((buffer (marker-buffer ,arrow-position)) (line))
+	(if (equal buffer (window-buffer (posn-window end)))
+	    (with-current-buffer buffer
+	      (when (or (equal start end)
+			(equal (posn-point start)
+			       (marker-position ,arrow-position)))
+		,@body))))))
+
 (defun gdb-mouse-until (event)
   "Continue running until a source line past the current line.
 The destination source line can be selected either by clicking with mouse-2
@@ -613,28 +623,14 @@
   (interactive "e")
   (let ((start (event-start event))
 	(end (event-end event)))
-    (if gud-overlay-arrow-position
-	(let ((buffer (marker-buffer gud-overlay-arrow-position)) (line))
-	  (if (equal buffer (window-buffer (posn-window end)))
-	      (with-current-buffer buffer
-		(when (or (equal start end)
-			  (equal (posn-point start)
-				 (marker-position
-				  gud-overlay-arrow-position)))
+    (gdb-if-arrow gud-overlay-arrow-position
 		  (setq line (line-number-at-pos (posn-point end)))
-		  (gud-call (concat "until " (number-to-string line))))))))
-    (if gdb-overlay-arrow-position
-    (let ((buffer (marker-buffer gdb-overlay-arrow-position)))
-      (if (equal buffer (window-buffer (posn-window end)))
-	  (with-current-buffer buffer
-	    (when (or (equal start end)
-		      (equal (posn-point start)
-			     (marker-position
-			      gdb-overlay-arrow-position)))
-	      (save-excursion
-		(goto-line (line-number-at-pos (posn-point end)))
-		(forward-char 2)
-		(gud-call (concat "until *%a"))))))))))
+		  (gud-call (concat "until " (number-to-string line))))
+    (gdb-if-arrow gdb-overlay-arrow-position
+		  (save-excursion
+		    (goto-line (line-number-at-pos (posn-point end)))
+		    (forward-char 2)
+		    (gud-call (concat "until *%a"))))))
 
 (defun gdb-mouse-jump (event)
   "Set execution address/line.
@@ -645,32 +641,18 @@
   (interactive "e")
   (let ((start (event-start event))
 	(end (event-end event)))
-    (if gud-overlay-arrow-position
-	(let ((buffer (marker-buffer gud-overlay-arrow-position)) (line))
-	  (if (equal buffer (window-buffer (posn-window end)))
-	      (with-current-buffer buffer
-		(when (or (equal start end)
-			  (equal (posn-point start)
-				 (marker-position
-				  gud-overlay-arrow-position)))
+    (gdb-if-arrow gud-overlay-arrow-position
 		  (setq line (line-number-at-pos (posn-point end)))
 		  (progn
 		    (gud-call (concat "tbreak " (number-to-string line)))
-		    (gud-call (concat "jump " (number-to-string line)))))))))
-    (if gdb-overlay-arrow-position
-	(let ((buffer (marker-buffer gdb-overlay-arrow-position)))
-	  (if (equal buffer (window-buffer (posn-window end)))
-	      (with-current-buffer buffer
-		(when (or (equal start end)
-			  (equal (posn-point start)
-				 (marker-position
-				  gdb-overlay-arrow-position)))
+		    (gud-call (concat "jump " (number-to-string line)))))
+    (gdb-if-arrow gdb-overlay-arrow-position
 		  (save-excursion
 		    (goto-line (line-number-at-pos (posn-point end)))
 		    (forward-char 2)
 		    (progn
 		      (gud-call (concat "tbreak *%a"))
-		      (gud-call (concat "jump *%a")))))))))))
+		      (gud-call (concat "jump *%a")))))))
 
 (defcustom gdb-speedbar-auto-raise nil
   "If non-nil raise speedbar every time display of watch expressions is\