changeset 111604:149090e9b891

* lisp/files.el (safe-local-variable-p): Gracefully handle errors. * lisp/emacs-lisp/bytecomp.el (byte-compile-warnings): Simplify the safety predicate.
author Stefan Monnier <monnier@iro.umontreal.ca>
date Thu, 11 Nov 2010 17:19:01 -0500
parents c901fac3b428
children ca8b605ca70f
files lisp/ChangeLog lisp/emacs-lisp/bytecomp.el lisp/files.el
diffstat 3 files changed, 13 insertions(+), 14 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/ChangeLog	Thu Nov 11 00:08:25 2010 -0500
+++ b/lisp/ChangeLog	Thu Nov 11 17:19:01 2010 -0500
@@ -1,5 +1,10 @@
 2010-11-11  Stefan Monnier  <monnier@iro.umontreal.ca>
 
+	* emacs-lisp/bytecomp.el (byte-compile-warnings): Simplify the
+	safety predicate.
+
+	* files.el (safe-local-variable-p): Gracefully handle errors.
+
 	* emacs-lisp/smie.el (smie-rule-parent, smie-indent--rule):
 	Use smie-indent-virtual when indenting relative to an opener.
 	(smie-rule-separator): Use smie-rule-parent.
--- a/lisp/emacs-lisp/bytecomp.el	Thu Nov 11 00:08:25 2010 -0500
+++ b/lisp/emacs-lisp/bytecomp.el	Thu Nov 11 17:19:01 2010 -0500
@@ -294,21 +294,12 @@
 		 (set :menu-tag "Some"
                       ,@(mapcar (lambda (x) `(const ,x))
                                 byte-compile-warning-types))))
-;;;###autoload(put 'byte-compile-warnings 'safe-local-variable 'byte-compile-warnings-safe-p)
 
 ;;;###autoload
-(defun byte-compile-warnings-safe-p (x)
-  "Return non-nil if X is valid as a value of `byte-compile-warnings'."
-  (or (booleanp x)
-      (and (listp x)
-           (if (eq (car x) 'not) (setq x (cdr x))
-             t)
-	   (equal (mapcar
-		   (lambda (e)
-		     (when (memq e byte-compile-warning-types)
-		       e))
-		   x)
-		  x))))
+(put 'byte-compile-warnings 'safe-local-variable
+     (lambda (v)
+       (or (symbolp v)
+           (null (delq nil (mapcar (lambda (x) (not (symbolp x))) v))))))
 
 (defun byte-compile-warning-enabled-p (warning)
   "Return non-nil if WARNING is enabled, according to `byte-compile-warnings'."
--- a/lisp/files.el	Thu Nov 11 00:08:25 2010 -0500
+++ b/lisp/files.el	Thu Nov 11 17:19:01 2010 -0500
@@ -3134,7 +3134,10 @@
    evaluates to a non-nil value with VAL as an argument."
   (or (member (cons sym val) safe-local-variable-values)
       (let ((safep (get sym 'safe-local-variable)))
-        (and (functionp safep) (funcall safep val)))))
+        (and (functionp safep)
+             ;; If the function signals an error, that means it
+             ;; can't assure us that the value is safe.
+             (with-demoted-errors (funcall safep val))))))
 
 (defun risky-local-variable-p (sym &optional ignored)
   "Non-nil if SYM could be dangerous as a file-local variable.