Function: hack-one-local-variable-eval-safep
hack-one-local-variable-eval-safep is a byte-compiled function defined
in files.el.gz.
Signature
(hack-one-local-variable-eval-safep EXP)
Documentation
Return non-nil if it is safe to eval EXP when it is found in a file.
Source Code
;; Defined in /usr/src/emacs/lisp/files.el.gz
(defun hack-one-local-variable-eval-safep (exp)
"Return non-nil if it is safe to eval EXP when it is found in a file."
(or (not (consp exp))
;; Detect certain `put' expressions.
(and (eq (car exp) 'put)
(hack-one-local-variable-quotep (nth 1 exp))
(hack-one-local-variable-quotep (nth 2 exp))
(let ((prop (nth 1 (nth 2 exp)))
(val (nth 3 exp)))
(cond ((memq prop '(lisp-indent-hook
lisp-indent-function
scheme-indent-function))
;; Allow only safe values (not functions).
(or (numberp val)
(and (hack-one-local-variable-quotep val)
(eq (nth 1 val) 'defun))))
((eq prop 'edebug-form-spec)
;; Allow only indirect form specs.
;; During bootstrapping, edebug-basic-spec might not be
;; defined yet.
(and (fboundp 'edebug-basic-spec)
(hack-one-local-variable-quotep val)
(edebug-basic-spec (nth 1 val)))))))
;; Allow expressions that the user requested.
(member exp safe-local-eval-forms)
;; Certain functions can be allowed with safe arguments
;; or can specify verification functions to try.
(and (symbolp (car exp))
;; Allow (minor)-modes calls with no arguments.
;; This obsoletes the use of "mode:" for such things. (Bug#8613)
(or (and (member (cdr exp) '(nil (1) (0) (-1)))
(string-match "-mode\\'" (symbol-name (car exp))))
(let ((prop (get (car exp) 'safe-local-eval-function)))
(cond ((eq prop t)
(let ((ok t))
(dolist (arg (cdr exp))
(unless (macroexp-const-p arg)
(setq ok nil)))
ok))
((functionp prop)
(funcall prop exp))
((listp prop)
(let ((ok nil))
(dolist (function prop)
(if (funcall function exp)
(setq ok t)))
ok))))))))