Mercurial > emacs
changeset 55324:8e480ee75c47
(compilation-gcpro): New var
(compilation-fake-loc): Use it.
(compilation-forget-errors): Reset it.
author | Stefan Monnier <monnier@iro.umontreal.ca> |
---|---|
date | Sun, 02 May 2004 20:44:55 +0000 |
parents | 7e20ba796eb0 |
children | e95e9c689608 |
files | lisp/progmodes/compile.el |
diffstat | 1 files changed, 10 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/progmodes/compile.el Sun May 02 19:27:59 2004 +0000 +++ b/lisp/progmodes/compile.el Sun May 02 20:44:55 2004 +0000 @@ -1457,6 +1457,10 @@ (compilation-goto-locus marker (nth 3 loc) (nth 3 end-loc)) (setcdr (nthcdr 3 loc) t))) ; Set this one as visited. +(defvar compilation-gcpro nil + "Internal variable used to keep some values from being GC'd.") +(make-variable-buffer-local 'compilation-gcpro) + (defun compilation-fake-loc (marker file &optional line col) "Preassociate MARKER with FILE. FILE should be ABSOLUTE-FILENAME or (RELATIVE-FILENAME . DIRNAME). @@ -1476,6 +1480,11 @@ region and the first line of the next region." (or (consp file) (setq file (list file))) (setq file (compilation-get-file-structure file)) + ;; Between the current call to compilation-fake-loc and the first occurrence + ;; of an error message referring to `file', the data is only kept is the + ;; weak hash-table compilation-locs, so we need to prevent this entry + ;; in compilation-locs from being GC'd away. --Stef + (push file compilation-gcpro) (let ((loc (compilation-assq (or line 1) (cdr file)))) (setq loc (compilation-assq col loc)) (if (cdr loc) @@ -1730,6 +1739,7 @@ ;; In case we hit the same file/line specs, we want to recompute a new ;; marker for them, so flush our cache. (setq compilation-locs (make-hash-table :test 'equal :weakness 'value)) + (setq compilation-gcpro nil) ;; FIXME: the old code reset the directory-stack, so maybe we should ;; put a `directory change' marker of some sort, but where? -stef ;;