From 89bf83cdc3abaf5f31fcc17f1ec3b649f0526af1 Mon Sep 17 00:00:00 2001 From: Chong Yidong Date: Sun, 19 Jul 2009 01:05:17 +0000 Subject: [PATCH] * files.el (hack-local-variables-filter): Rewrite. --- lisp/ChangeLog | 4 +++ lisp/files.el | 90 +++++++++++++++++++++++--------------------------- 2 files changed, 45 insertions(+), 49 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 04a93dfe596..2d5465a3d4f 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,7 @@ +2009-07-19 Chong Yidong + + * files.el (hack-local-variables-filter): Rewrite. + 2009-07-19 Glenn Morris * progmodes/verilog-mode.el (verilog-error-regexp-add-xemacs): diff --git a/lisp/files.el b/lisp/files.el index 7568bd0492d..5425626f82c 100644 --- a/lisp/files.el +++ b/lisp/files.el @@ -2931,55 +2931,47 @@ VARIABLES is the alist of variable-value settings. This alist is `file-local-variables-alist', without applying them. DIR-NAME is a directory name if these settings come from directory-local variables, or nil otherwise." - ;; Strip any variables that are in `ignored-local-variables'. - (dolist (ignored ignored-local-variables) - (setq variables (assq-delete-all ignored variables))) - ;; If `enable-local-eval' is nil, strip eval "variables". - (if (null enable-local-eval) - (setq variables (assq-delete-all 'eval variables))) - (setq variables (nreverse variables)) - (when variables - ;; Find those variables that we may want to save to - ;; `safe-local-variable-values'. - (let (risky-vars unsafe-vars) - (dolist (elt variables) - (let ((var (car elt)) - (val (cdr elt))) - ;; Don't query about the fake variables. - (or (memq var '(mode unibyte coding)) - (and (eq var 'eval) - (or (eq enable-local-eval t) - (hack-one-local-variable-eval-safep - (eval (quote val))))) - (safe-local-variable-p var val) - (and (risky-local-variable-p var val) - (push elt risky-vars)) - (push elt unsafe-vars)))) - (if (eq enable-local-variables :safe) - ;; If caller wants only safe variables, store only these. - (dolist (elt variables) - (unless (or (member elt unsafe-vars) - (member elt risky-vars)) - (let ((var (car elt))) - (unless (eq var 'eval) - (setq file-local-variables-alist - (assq-delete-all var file-local-variables-alist))) - (push elt file-local-variables-alist)))) - ;; Query, unless all are known safe or the user wants no - ;; querying. - (if (or (and (eq enable-local-variables t) - (null unsafe-vars) - (null risky-vars)) - (eq enable-local-variables :all) - (hack-local-variables-confirm - variables unsafe-vars risky-vars dir-name)) - (dolist (elt variables) - (let ((var (car elt))) - (unless (eq var 'eval) - (setq file-local-variables-alist - (assq-delete-all var file-local-variables-alist))) - (push elt file-local-variables-alist)))))))) - + ;; Find those variables that we may want to save to + ;; `safe-local-variable-values'. + (let (all-vars risky-vars unsafe-vars) + (dolist (elt variables) + (let ((var (car elt)) + (val (cdr elt))) + (cond ((memq var ignored-local-variables) + ;; Ignore any variable in `ignored-local-variables'. + nil) + ;; Obey `enable-local-eval'. + ((eq var 'eval) + (when enable-local-eval + (push elt all-vars) + (or (eq enable-local-eval t) + (hack-one-local-variable-eval-safep (eval (quote val))) + (push elt unsafe-vars)))) + ;; Ignore duplicates in the present list. + ((assq var all-vars) nil) + ;; Accept known-safe variables. + ((or (memq var '(mode unibyte coding)) + (safe-local-variable-p var val)) + (push elt all-vars)) + ;; The variable is either risky or unsafe: + ((not (eq enable-local-variables :safe)) + (push elt all-vars) + (if (risky-local-variable-p var val) + (push elt risky-vars) + (push elt unsafe-vars)))))) + (and all-vars + ;; Query, unless all vars are safe or user wants no querying. + (or (and (eq enable-local-variables t) + (null unsafe-vars) + (null risky-vars)) + (eq enable-local-variables :all) + (hack-local-variables-confirm all-vars unsafe-vars + risky-vars dir-name)) + (dolist (elt all-vars) + (unless (eq (car elt) 'eval) + (setq file-local-variables-alist + (assq-delete-all (car elt) file-local-variables-alist))) + (push elt file-local-variables-alist))))) (defun hack-local-variables (&optional mode-only) "Parse and put into effect this buffer's local variables spec. -- 2.39.2