How dangerous it is, to muffle this warning, when trying to find all the free variables of a form? The library seems to be outputting the right list of free variables anyways, but still got me thinking.
Here is what I am playing with:
(defvar *muffle-warnings?* t) (defmacro w/muffled-warnings (expected &body body) `(handler-bind ((warning (lambda (w) (bnd1 actual (apply #'format nil (simple-condition-format-control w) (simple-condition-format-arguments w)) (when (and *muffle-warnings?* (string-starts-with-p ,expected actual)) (muffle-warning)))))) ,@body)) (eval-when (:compile-toplevel :load-toplevel :execute) (defun free-vars (form) (bnd1 ast (clast:parse form) (remove-duplicates (w/muffled-warnings "CLAST: lambda list walking not yet implemented" (clast:free-variables ast)))))) (examples free-vars (is (equal (free-vars '(pr var1)) '(var1))) ;; duplicates (is (equal (free-vars '(progn (pr var1) (pr var1))) '(var1))) ;; order (is (equal (free-vars '(progn (pr var1) (pr var2))) '(var1 var2))) ;; lambda (is (equal (free-vars '(lambda () (pr "Hello " name))) '(name))) ;; lambda-list w/ muffled warnings (is (null (free-vars '(lambda (name) (pr "Hello " name))))) ;; lambda-list w/o muffled warnings (signals warning (bnd1 *muffle-warnings?* nil (free-vars '(lambda (name) (pr "Hello " name))))) )
Log in to post a comment.
How dangerous it is, to muffle this warning, when trying to find all the free variables of a form? The library seems to be outputting the right list of free variables anyways, but still got me thinking.
Here is what I am playing with: