+ (defun ,(p "FREE-" ) (p) (declare (ignore p)))
+ (defmacro ,(p "WITH-") (var (&rest field-values) &body body)
+ (labels ((field-name (x)
+ (intern (concatenate 'string
+ (symbol-name ',name) "-"
+ (symbol-name x))
+ ,(symbol-package name))))
+ (append `(let ((,var ,'(,(p "ALLOCATE-")))))
+ (mapcar (lambda (pair)
+ `(setf (,(field-name (car pair)) ,var) ,(cadr pair)))
+ field-values)
+ body))))))