Mercurial > emacs
diff lisp/progmodes/compile.el @ 1294:81c5d1c4a7ed
(compilation-parse-errors): Save (match-beginning 0) in a variable, so the
looking-at call doesn't clobber its value when we want to use it to back up
before the error we discard.
Make sure compilation-error-list is at least two elts long before checking
its first two elts for being in the same file.
author | Roland McGrath <roland@gnu.org> |
---|---|
date | Thu, 01 Oct 1992 02:00:41 +0000 |
parents | bbf7e139412b |
children | 5af75a1a9a24 |
line wrap: on
line diff
--- a/lisp/progmodes/compile.el Thu Oct 01 01:58:57 1992 +0000 +++ b/lisp/progmodes/compile.el Thu Oct 01 02:00:41 1992 +0000 @@ -921,7 +921,8 @@ (error "compilation-parse-errors: Impossible regexp match!")) ;; Extract the file name and line number from the error message. - (let ((filename + (let ((beginning-of-match (match-beginning 0)) ;looking-at nukes + (filename (cons default-directory (buffer-substring (match-beginning (nth 1 alist)) (match-end (nth 1 alist))))) @@ -941,26 +942,30 @@ (setq compilation-error-list (cons (cons (point-marker) (cons filename linenum)) - compilation-error-list)))) - (setq compilation-num-errors-found - (1+ compilation-num-errors-found)) - (and find-at-least (>= compilation-num-errors-found find-at-least) - ;; We have found as many new errors as the user wants. - ;; We continue to parse until we have seen all - ;; the consecutive errors in the same file, - ;; so the error positions will be recorded as markers - ;; in this buffer that might change. - (not (equal (car (cdr (nth 0 compilation-error-list))) - (car (cdr (nth 1 compilation-error-list))))) - (progn - ;; Discard the error just parsed, so that the next - ;; parsing run can get it and the following errors in - ;; the same file all at once. If we didn't do this, we - ;; would have the same problem we are trying to avoid - ;; with the test above, just delayed until the next run! - (setq compilation-error-list (cdr compilation-error-list)) - (goto-char (match-beginning 0)) - (setq found-desired t))) + compilation-error-list))) + (setq compilation-num-errors-found + (1+ compilation-num-errors-found)) + (and find-at-least (>= compilation-num-errors-found + find-at-least) + ;; We have found as many new errors as the user wants. + ;; We continue to parse until we have seen all + ;; the consecutive errors in the same file, + ;; so the error positions will be recorded as markers + ;; in this buffer that might change. + (cdr compilation-error-list) ; Must check at least two. + (not (equal (car (cdr (nth 0 compilation-error-list))) + (car (cdr (nth 1 compilation-error-list))))) + (progn + ;; Discard the error just parsed, so that the next + ;; parsing run can get it and the following errors in + ;; the same file all at once. If we didn't do this, we + ;; would have the same problem we are trying to avoid + ;; with the test above, just delayed until the next run! + (setq compilation-error-list + (cdr compilation-error-list)) + (goto-char beginning-of-match) + (setq found-desired t))) + ) ) (t (error "compilation-parse-errors: impossible regexp match!")))