diff lisp/progmodes/vhdl-mode.el @ 101756:5f840f1a34d4

(vhdl-prepare-search-1, vhdl-prepare-search-2): Properly cleanup on `quit'.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Mon, 02 Feb 2009 20:49:41 +0000
parents b6273f409a73
children 55ba5af4bf3a
line wrap: on
line diff
--- a/lisp/progmodes/vhdl-mode.el	Mon Feb 02 20:40:18 2009 +0000
+++ b/lisp/progmodes/vhdl-mode.el	Mon Feb 02 20:49:41 2009 +0000
@@ -2328,42 +2328,19 @@
   "Enable case insensitive search and switch to syntax table that includes '_',
 then execute BODY, and finally restore the old environment.  Used for
 consistent searching."
-  `(let ((case-fold-search t)		; case insensitive search
-	 (current-syntax-table (syntax-table))
-	 result
-	 (restore-prog			; program to restore enviroment
-	  '(progn
-	     ;; restore syntax table
-	     (set-syntax-table current-syntax-table))))
+  `(let ((case-fold-search t))		; case insensitive search
      ;; use extended syntax table
-     (set-syntax-table vhdl-mode-ext-syntax-table)
-     ;; execute BODY safely
-     (setq result
-	   (condition-case info
-	       (progn ,@body)
-	     (error (eval restore-prog)	; restore environment on error
-		    (error (cadr info))))) ; pass error up
-     ;; restore environment
-     (eval restore-prog)
-     result))
+     (with-syntax-table vhdl-mode-ext-syntax-table
+       ,@body)))
 
 (defmacro vhdl-prepare-search-2 (&rest body)
   "Enable case insensitive search, switch to syntax table that includes '_',
 and remove `intangible' overlays, then execute BODY, and finally restore the
 old environment.  Used for consistent searching."
+  ;; FIXME: Why not just let-bind `inhibit-point-motion-hooks'?  --Stef
   `(let ((case-fold-search t)		; case insensitive search
 	 (current-syntax-table (syntax-table))
-	 result overlay-all-list overlay-intangible-list overlay
-	 (restore-prog			; program to restore enviroment
-	  '(progn
-	     ;; restore syntax table
-	     (set-syntax-table current-syntax-table)
-	     ;; restore `intangible' overlays
-	     (when (fboundp 'overlay-lists)
-	       (while overlay-intangible-list
-		 (overlay-put (car overlay-intangible-list) 'intangible t)
-		 (setq overlay-intangible-list
-		       (cdr overlay-intangible-list)))))))
+	 overlay-all-list overlay-intangible-list overlay)
      ;; use extended syntax table
      (set-syntax-table vhdl-mode-ext-syntax-table)
      ;; remove `intangible' overlays
@@ -2379,14 +2356,16 @@
 	   (overlay-put overlay 'intangible nil))
 	 (setq overlay-all-list (cdr overlay-all-list))))
      ;; execute BODY safely
-     (setq result
-	   (condition-case info
-	       (progn ,@body)
-	     (error (eval restore-prog)	; restore environment on error
-		    (error (cadr info))))) ; pass error up
-     ;; restore environment
-     (eval restore-prog)
-     result))
+     (unwind-protect
+         (progn ,@body)
+       ;; restore syntax table
+       (set-syntax-table current-syntax-table)
+       ;; restore `intangible' overlays
+       (when (fboundp 'overlay-lists)
+         (while overlay-intangible-list
+           (overlay-put (car overlay-intangible-list) 'intangible t)
+           (setq overlay-intangible-list
+                 (cdr overlay-intangible-list)))))))
 
 (defmacro vhdl-visit-file (file-name issue-error &rest body)
   "Visit file FILE-NAME and execute BODY."