Commit 304188d6 authored by Jim Blandy's avatar Jim Blandy
Browse files

* gud.el (gud-gdb-marker-filter): Preserve the match data across

the filter's execution.

* gud.el (gud-gdb-marker-filter): If we received some text after
the position marker, append it to any text before the marker,
instead of throwing away the text before the marker.
parent bac7913a
......@@ -165,48 +165,49 @@ we're in the GUD buffer)."
(defvar gud-gdb-marker-acc "")
(defun gud-gdb-marker-filter (string)
(setq gud-gdb-marker-acc (concat gud-gdb-marker-acc string))
(let ((output ""))
;; Process all the complete markers in this chunk.
(while (string-match "^\032\032\\([^:\n]*\\):\\([0-9]*\\):.*\n"
gud-gdb-marker-acc)
(setq
;; Extract the frame position from the marker.
gud-last-frame
(cons (substring gud-gdb-marker-acc (match-beginning 1) (match-end 1))
(string-to-int (substring gud-gdb-marker-acc
(match-beginning 2)
(match-end 2))))
;; Append any text before the marker to the output we're going
;; to return - we don't include the marker in this text.
output (concat output
(substring gud-gdb-marker-acc 0 (match-beginning 0)))
;; Set the accumulator to the remaining text.
gud-gdb-marker-acc (substring gud-gdb-marker-acc (match-end 0))))
;; Does the remaining text look like it might end with the
;; beginning of another marker? If it does, then keep it in
;; gud-gdb-marker-acc until we receive the rest of it. Since we
;; know the full marker regexp above failed, it's pretty simple to
;; test for marker starts.
(if (string-match "^\032.*\\'" gud-gdb-marker-acc)
(progn
;; Everything before the potential marker start can be output.
(setq output (concat output (substring gud-gdb-marker-acc
0 (match-beginning 0))))
(save-match-data
(setq gud-gdb-marker-acc (concat gud-gdb-marker-acc string))
(let ((output ""))
;; Process all the complete markers in this chunk.
(while (string-match "^\032\032\\([^:\n]*\\):\\([0-9]*\\):.*\n"
gud-gdb-marker-acc)
(setq
;; Extract the frame position from the marker.
gud-last-frame
(cons (substring gud-gdb-marker-acc (match-beginning 1) (match-end 1))
(string-to-int (substring gud-gdb-marker-acc
(match-beginning 2)
(match-end 2))))
;; Append any text before the marker to the output we're going
;; to return - we don't include the marker in this text.
output (concat output
(substring gud-gdb-marker-acc 0 (match-beginning 0)))
;; Set the accumulator to the remaining text.
gud-gdb-marker-acc (substring gud-gdb-marker-acc (match-end 0))))
;; Does the remaining text look like it might end with the
;; beginning of another marker? If it does, then keep it in
;; gud-gdb-marker-acc until we receive the rest of it. Since we
;; know the full marker regexp above failed, it's pretty simple to
;; test for marker starts.
(if (string-match "^\032.*\\'" gud-gdb-marker-acc)
(progn
;; Everything before the potential marker start can be output.
(setq output (concat output (substring gud-gdb-marker-acc
0 (match-beginning 0))))
;; Everything after, we save, to combine with later input.
(setq gud-gdb-marker-acc
(substring gud-gdb-marker-acc (match-beginning 0))))
;; Everything after, we save, to combine with later input.
(setq gud-gdb-marker-acc
(substring gud-gdb-marker-acc (match-beginning 0))))
(setq output gud-gdb-marker-acc
gud-gdb-marker-acc ""))
(setq output (concat output gud-gdb-marker-acc)
gud-gdb-marker-acc ""))
output))
output)))
(defun gud-gdb-find-file (f)
(find-file-noselect f))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment