summaryrefslogtreecommitdiff
path: root/lisp
diff options
context:
space:
mode:
authorStefan Monnier <monnier@iro.umontreal.ca>2004-05-02 20:44:55 +0000
committerStefan Monnier <monnier@iro.umontreal.ca>2004-05-02 20:44:55 +0000
commite3bef839dd6c7c7da8caaec0eb1dc06b83bce621 (patch)
tree1c3f1913d170cfb6b946f901283e796ea905f88b /lisp
parent55f2eb7e341cbf56388f2d0fadca14e58df93f02 (diff)
downloademacs-e3bef839dd6c7c7da8caaec0eb1dc06b83bce621.tar.gz
(compilation-gcpro): New var
(compilation-fake-loc): Use it. (compilation-forget-errors): Reset it.
Diffstat (limited to 'lisp')
-rw-r--r--lisp/progmodes/compile.el10
1 files changed, 10 insertions, 0 deletions
diff --git a/lisp/progmodes/compile.el b/lisp/progmodes/compile.el
index da05a7ff8bb..e2d3e94e80a 100644
--- a/lisp/progmodes/compile.el
+++ b/lisp/progmodes/compile.el
@@ -1457,6 +1457,10 @@ Use this command in a compilation log buffer. Sets the mark at point there."
(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 @@ call this several times, once each for the last line of one
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 @@ FILE should be (ABSOLUTE-FILENAME) or (RELATIVE-FILENAME . DIRNAME)."
;; 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
;;