- #-clisp
- (if (and #+(or cmu sbcl)t (constantp size))
- (let ((memory (make-symbol "MEMORY"))
- (size (eval size)))
- `(with-alien ((,memory (array #+sbcl(sb-alien:unsigned 8) #+cmu(alien:unsigned 8) ,size)))
- (let ((,var (alien-sap ,memory)))
- (clear-memory ,var ,size)
- ,@body)))
- `(let ((,var (allocate-memory ,size)))
- (unwind-protect
- (progn ,@body)
- (deallocate-memory ,var))))
- #+clisp
- (let ((memory (make-symbol "MEMORY")))
- `(ffi:with-foreign-object (,memory `(ffi:c-array ffi:uint8 ,,size))
- (let ((,var (ffi:foreign-address ,memory)))
- ,@body))))
+ (cond
+ #+(or cmu sbcl)
+ ((constantp size)
+ (let ((memory (make-symbol "MEMORY"))
+ (size (eval size)))
+ `(with-alien ((,memory (array #+sbcl(sb-alien:unsigned 8) #+cmu(alien:unsigned 8) ,size)))
+ (let ((,var (alien-sap ,memory)))
+ (clear-memory ,var ,size)
+ ,@body))))
+ (t
+ #-clisp
+ `(let ((,var (allocate-memory ,size)))
+ (unwind-protect
+ (progn ,@body)
+ (deallocate-memory ,var)))
+ #+clisp
+ (let ((memory (make-symbol "MEMORY")))
+ `(ffi:with-foreign-object (,memory `(ffi:c-array ffi:uint8 ,,size))
+ (let ((,var (ffi:foreign-address ,memory)))
+ ,@body))))))