diff --git a/src/render/shader/walker.lisp b/src/render/shader/walker.lisp index 143b073..1e5b774 100644 --- a/src/render/shader/walker.lisp +++ b/src/render/shader/walker.lisp @@ -27,6 +27,26 @@ "Retreive the handler for the symbol FIRST." (gethash first *form-handlers* *default-handler*)) +(defun binding-to-symbol (binding) + (let ((name (safe-first binding))) + (cond ((listp name) + (assert (eq 'setf (first name))) + (check-type (second name) symbol) + (second name)) + (t + name)))) + +(defmacro with-imposed-bindings (&body body) + #-sbcl + `(locally ,@body) + #+sbcl + (destructuring-bind ((binder bindings &rest binder-body)) + body + `(locally + (declare (sb-ext:disable-package-locks + ,@(mapcar 'binding-to-symbol bindings))) + (,binder ,bindings ,@binder-body)))) + (defun function-name-p (name) "Return whether NAME is the name of a function." (or (symbolp name)