(in-package #:safer-lisp) (define-condition safer-eval-error (safer-lisp-error) ()) (defun %safe-thing (thing) (cond ((symbolp thing) (%symbol-is-safe-p thing)) ((listp thing) (every #'%safe-thing thing)) ;; inline objects are considered safe (t t))) (defun safer-eval (expr) "Evaluates expr as if by eval, but only after verifying all symbols in the expression have been marked as safe." (if (%safe-thing expr) (eval expr) (error 'safer-eval-error :format-control "~a not safe!" :format-arguments (list expr))))