mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-04-27 08:43:40 -07:00
(gud-find-c-expr): Renamed from find-c-expr.
Don't get fooled by if and while statements. (gud-expr-compound): Renamed from expr-compound. (gud-expr-compound-sep): Renamed from expr-compound-sep. (gud-next-expr): Renamed from expr-next. (gud-prev-expr): Renamed from expr-prev. (gud-forward-sexp): Renamed from expr-forward-sexp. (gud-backward-sexp): Renamed from expr-backward-sexp. (gud-innermost-expr): Renamed from expr-cur.
This commit is contained in:
parent
8adfc1ec00
commit
ab4b0d2f59
1 changed files with 51 additions and 44 deletions
95
lisp/gud.el
95
lisp/gud.el
|
|
@ -1403,7 +1403,7 @@ Obeying it means displaying in another window the specified file and line."
|
|||
(1+ (count-lines 1 (point)))))
|
||||
(cdr frame))))
|
||||
((eq key ?e)
|
||||
(setq subst (find-c-expr)))
|
||||
(setq subst (gud-find-c-expr)))
|
||||
((eq key ?a)
|
||||
(setq subst (gud-read-address)))
|
||||
((eq key ?p)
|
||||
|
|
@ -1470,94 +1470,102 @@ Obeying it means displaying in another window the specified file and line."
|
|||
;;; Debby Ayers <ayers@asc.slb.com>,
|
||||
;;; Rich Schaefer <schaefer@asc.slb.com> Schlumberger, Austin, Tx.
|
||||
|
||||
(defun find-c-expr ()
|
||||
(defun gud-find-c-expr ()
|
||||
"Returns the C expr that surrounds point."
|
||||
(interactive)
|
||||
(save-excursion
|
||||
(let ((p) (expr) (test-expr))
|
||||
(let (p expr test-expr)
|
||||
(setq p (point))
|
||||
(setq expr (expr-cur))
|
||||
(setq test-expr (expr-prev))
|
||||
(while (expr-compound test-expr expr)
|
||||
(setq expr (cons (car test-expr) (cdr expr)))
|
||||
(goto-char (car expr))
|
||||
(setq test-expr (expr-prev)))
|
||||
(setq expr (gud-innermost-expr))
|
||||
(setq test-expr (gud-prev-expr))
|
||||
(while (and test-expr (gud-expr-compound test-expr expr))
|
||||
(let ((prev-expr expr))
|
||||
(setq expr (cons (car test-expr) (cdr expr)))
|
||||
(goto-char (car expr))
|
||||
(setq test-expr (gud-prev-expr))
|
||||
;; If we just pasted on the condition of an if or while,
|
||||
;; throw it away again.
|
||||
(if (member (buffer-substring (car test-expr) (cdr test-expr))
|
||||
'("if" "while" "for"))
|
||||
(setq test-expr nil
|
||||
expr prev-expr))))
|
||||
(goto-char p)
|
||||
(setq test-expr (expr-next))
|
||||
(while (expr-compound expr test-expr)
|
||||
(setq test-expr (gud-next-expr))
|
||||
(while (gud-expr-compound expr test-expr)
|
||||
(setq expr (cons (car expr) (cdr test-expr)))
|
||||
(setq test-expr (expr-next))
|
||||
(setq test-expr (gud-next-expr))
|
||||
)
|
||||
(buffer-substring (car expr) (cdr expr)))))
|
||||
|
||||
(defun expr-cur ()
|
||||
"Returns the expr that point is in; point is set to beginning of expr.
|
||||
(defun gud-innermost-expr ()
|
||||
"Returns the smallest expr that point is in; move point to beginning of it.
|
||||
The expr is represented as a cons cell, where the car specifies the point in
|
||||
the current buffer that marks the beginning of the expr and the cdr specifies
|
||||
the character after the end of the expr."
|
||||
(let ((p (point)) (begin) (end))
|
||||
(expr-backward-sexp)
|
||||
(let ((p (point)) begin end)
|
||||
(gud-backward-sexp)
|
||||
(setq begin (point))
|
||||
(expr-forward-sexp)
|
||||
(gud-forward-sexp)
|
||||
(setq end (point))
|
||||
(if (>= p end)
|
||||
(progn
|
||||
(setq begin p)
|
||||
(goto-char p)
|
||||
(expr-forward-sexp)
|
||||
(setq end (point))
|
||||
)
|
||||
(gud-forward-sexp)
|
||||
(setq end (point)))
|
||||
)
|
||||
(goto-char begin)
|
||||
(cons begin end)))
|
||||
|
||||
(defun expr-backward-sexp ()
|
||||
(defun gud-backward-sexp ()
|
||||
"Version of `backward-sexp' that catches errors."
|
||||
(condition-case nil
|
||||
(backward-sexp)
|
||||
(error t)))
|
||||
|
||||
(defun expr-forward-sexp ()
|
||||
(defun gud-forward-sexp ()
|
||||
"Version of `forward-sexp' that catches errors."
|
||||
(condition-case nil
|
||||
(forward-sexp)
|
||||
(error t)))
|
||||
|
||||
(defun expr-prev ()
|
||||
(defun gud-prev-expr ()
|
||||
"Returns the previous expr, point is set to beginning of that expr.
|
||||
The expr is represented as a cons cell, where the car specifies the point in
|
||||
the current buffer that marks the beginning of the expr and the cdr specifies
|
||||
the character after the end of the expr"
|
||||
(let ((begin) (end))
|
||||
(expr-backward-sexp)
|
||||
(gud-backward-sexp)
|
||||
(setq begin (point))
|
||||
(expr-forward-sexp)
|
||||
(gud-forward-sexp)
|
||||
(setq end (point))
|
||||
(goto-char begin)
|
||||
(cons begin end)))
|
||||
|
||||
(defun expr-next ()
|
||||
(defun gud-next-expr ()
|
||||
"Returns the following expr, point is set to beginning of that expr.
|
||||
The expr is represented as a cons cell, where the car specifies the point in
|
||||
the current buffer that marks the beginning of the expr and the cdr specifies
|
||||
the character after the end of the expr."
|
||||
(let ((begin) (end))
|
||||
(expr-forward-sexp)
|
||||
(expr-forward-sexp)
|
||||
(gud-forward-sexp)
|
||||
(gud-forward-sexp)
|
||||
(setq end (point))
|
||||
(expr-backward-sexp)
|
||||
(gud-backward-sexp)
|
||||
(setq begin (point))
|
||||
(cons begin end)))
|
||||
|
||||
(defun expr-compound-sep (span-start span-end)
|
||||
"Returns '.' for '->' & '.', returns ' ' for white space,
|
||||
returns '?' for other punctuation."
|
||||
(let ((result ? )
|
||||
(defun gud-expr-compound-sep (span-start span-end)
|
||||
"Scan from SPAN-START to SPAN-END for punctuation characters.
|
||||
If `->' is found, return `?.'. If `.' is found, return `?.'.
|
||||
If any other punctuation is found, return `??'.
|
||||
If no punctuation is found, return `? '."
|
||||
(let ((result ?\ )
|
||||
(syntax))
|
||||
(while (< span-start span-end)
|
||||
(setq syntax (char-syntax (char-after span-start)))
|
||||
(cond
|
||||
((= syntax ? ) t)
|
||||
((= syntax ?\ ) t)
|
||||
((= syntax ?.) (setq syntax (char-after span-start))
|
||||
(cond
|
||||
((= syntax ?.) (setq result ?.))
|
||||
|
|
@ -1569,8 +1577,8 @@ returns '?' for other punctuation."
|
|||
(setq span-start (+ span-start 1)))
|
||||
result))
|
||||
|
||||
(defun expr-compound (first second)
|
||||
"Non-nil if concatenating FIRST and SECOND makes a single C token.
|
||||
(defun gud-expr-compound (first second)
|
||||
"Non-nil if concatenating FIRST and SECOND makes a single C expression.
|
||||
The two exprs are represented as a cons cells, where the car
|
||||
specifies the point in the current buffer that marks the beginning of the
|
||||
expr and the cdr specifies the character after the end of the expr.
|
||||
|
|
@ -1584,21 +1592,20 @@ Link exprs of the form:
|
|||
(let ((span-start (cdr first))
|
||||
(span-end (car second))
|
||||
(syntax))
|
||||
(setq syntax (expr-compound-sep span-start span-end))
|
||||
(setq syntax (gud-expr-compound-sep span-start span-end))
|
||||
(cond
|
||||
((= (car first) (car second)) nil)
|
||||
((= (cdr first) (cdr second)) nil)
|
||||
((= syntax ?.) t)
|
||||
((= syntax ? )
|
||||
((= syntax ?\ )
|
||||
(setq span-start (char-after (- span-start 1)))
|
||||
(setq span-end (char-after span-end))
|
||||
(cond
|
||||
((= span-start ?) ) t )
|
||||
((= span-start ?] ) t )
|
||||
((= span-end ?( ) t )
|
||||
((= span-end ?[ ) t )
|
||||
(t nil))
|
||||
)
|
||||
((= span-start ?)) t)
|
||||
((= span-start ?]) t)
|
||||
((= span-end ?() t)
|
||||
((= span-end ?[) t)
|
||||
(t nil)))
|
||||
(t nil))))
|
||||
|
||||
(provide 'gud)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue