[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Get rid of verilog-no-change-functions
From: |
Stefan Monnier |
Subject: |
Get rid of verilog-no-change-functions |
Date: |
Sat, 12 Sep 2015 00:22:01 -0400 |
User-agent: |
Gnus/5.13 (Gnus v5.13) Emacs/25.0.50 (gnu/linux) |
I believe the patch below replaces a workaround with an actual fix.
It's indeed unsafe to call syntax-ppss when before-change-functions is
let-bound, but the patch avoids the problem by not let-binding
before-change-functions, relying on the cleaner
inhibit-modification-hooks, which was introduced way back in Emacs-21
for similar reasons.
Any objection to my applying this to Emacs's version of verilog-mode.el?
Stefan
diff --git a/lisp/progmodes/verilog-mode.el b/lisp/progmodes/verilog-mode.el
index 5fcdba6..0f90d60 100644
--- a/lisp/progmodes/verilog-mode.el
+++ b/lisp/progmodes/verilog-mode.el
@@ -408,10 +408,6 @@ This function may be removed when Emacs 21 is no longer
supported."
;; And GNU Emacs 22 has obsoleted last-command-char
last-command-event)))
-(defvar verilog-no-change-functions nil
- "True if `after-change-functions' is disabled.
-Use of `syntax-ppss' may break, as ppss's cache may get corrupted.")
-
(defvar verilog-in-hooks nil
"True when within a `verilog-run-hooks' block.")
@@ -422,14 +418,13 @@ Set `verilog-in-hooks' during this time, to assist AUTO
caches."
(run-hooks ,@hooks)))
(defun verilog-syntax-ppss (&optional pos)
- (when verilog-no-change-functions
- (if verilog-in-hooks
- (verilog-scan-cache-flush)
- ;; else don't let the AUTO code itself get away with flushing the cache,
- ;; as that'll make things very slow
- (backtrace)
- (error "%s: Internal problem; use of syntax-ppss when cache may be
corrupt"
- (verilog-point-text))))
+ (if verilog-in-hooks
+ (verilog-scan-cache-flush)
+ ;; else don't let the AUTO code itself get away with flushing the cache,
+ ;; as that'll make things very slow
+ (backtrace)
+ (error "%s: Internal problem; use of syntax-ppss when cache may be corrupt"
+ (verilog-point-text)))
(if (fboundp 'syntax-ppss)
(syntax-ppss pos)
(parse-partial-sexp (point-min) (or pos (point)))))
@@ -3230,9 +3225,7 @@ user-visible changes to the buffer must not be within a
(buffer-undo-list t)
(inhibit-read-only t)
(inhibit-point-motion-hooks t)
- (verilog-no-change-functions t)
- before-change-functions
- after-change-functions
+ (inhibit-modification-hooks t)
deactivate-mark
buffer-file-name ; Prevent primitives checking
buffer-file-truename) ; for file modification
@@ -3246,9 +3239,7 @@ user-visible changes to the buffer must not be within a
"Execute BODY forms, disabling all change hooks in BODY.
For insignificant changes, see instead `verilog-save-buffer-state'."
`(let* ((inhibit-point-motion-hooks t)
- (verilog-no-change-functions t)
- before-change-functions
- after-change-functions)
+ (inhibit-modification-hooks t))
(progn ,@body)))
(defvar verilog-save-font-mod-hooked nil
- Get rid of verilog-no-change-functions,
Stefan Monnier <=