From f8c1db21925b95c4d86dca0e3f49f937e99aeb15 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Renaud=20Casenave-P=C3=A9r=C3=A9?= Date: Wed, 25 Mar 2015 23:25:25 +0100 Subject: [PATCH] Add helpers for let handler --- src/render/shader/walker.lisp | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) 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)