[cl-utilities-cvs] CVS update: cl-utilities/with-unique-names.lisp

Peter Scott pscott at common-lisp.net
Thu May 26 20:00:00 UTC 2005


Update of /project/cl-utilities/cvsroot/cl-utilities
In directory common-lisp.net:/tmp/cvs-serv5859

Modified Files:
	with-unique-names.lisp 
Log Message:
Refactored and improved type checking.

Date: Thu May 26 22:00:00 2005
Author: pscott

Index: cl-utilities/with-unique-names.lisp
diff -u cl-utilities/with-unique-names.lisp:1.3 cl-utilities/with-unique-names.lisp:1.4
--- cl-utilities/with-unique-names.lisp:1.3	Mon May 16 21:12:00 2005
+++ cl-utilities/with-unique-names.lisp	Thu May 26 22:00:00 2005
@@ -6,17 +6,21 @@
   "Executes a series of forms with each var bound to a fresh,
 uninterned symbol. See http://www.cliki.net/WITH-UNIQUE-NAMES"
   `(let ,(mapcar #'(lambda (binding)
-                     (destructuring-bind (var prefix)
-			 (if (consp binding)
-			     binding
-			     (list binding binding))
-		       (if (symbolp var)
-			   `(,var (gensym ,(format nil "~A" prefix)))
-			   (error 'type-error
-				  :datum var
-				  :expected-type 'symbol))))
+                     (multiple-value-bind (var prefix)
+			 (%with-unique-names-binding-parts binding)
+		       (check-type var symbol)
+		       `(,var (gensym ,(format nil "~A"
+					       (or prefix var))))))
                  bindings)
     , at body))
+
+(defun %with-unique-names-binding-parts (binding)
+  "Return (values var prefix) from a WITH-UNIQUE-NAMES binding
+form. If PREFIX is not given in the binding, NIL is returned to
+indicate that the default should be used."
+  (if (consp binding)
+      (values (first binding) (second binding))
+      (values binding nil)))
 
 (define-condition list-binding-not-supported (warning)
   ((binding :initarg :binding :reader list-binding-not-supported-binding))




More information about the Cl-utilities-cvs mailing list