anchor.diff:  be stack allocated if supported by the implementation."
     (unless size-var
       (setf size-var (gensym "SIZE")))
  -  `(fli:with-dynamic-foreign-objects ()
  -     (let* ((,size-var ,size)
  -            (,var (fli:alloca :pointer-type :pointer :nelems ,size-var)))
  -       ,@body)))
  +  `(let* ((,size-var ,size)
  +          (,var (foreign-alloc ,size-var)))
  +     (unwind-protect
  +          (progn ,@body)
  +       (foreign-free ,var))))
  +
  +;  `(fli:with-dynamic-foreign-objects ()
  +;     (let* ((,size-var ,size)
  +;            (,var (fli:alloca :pointer-type :pointer :nelems ,size-var)))
  +;       ,@body)))
   
   ;;;# Shareable Vectors
   
  
positive.code:     (setf ptr (inc-ptr ptr offset)))
    (setf (fli:dereference ptr :type (convert-foreign-type type)) value))
  
  (defun test-foreign-aref ()
    (with-foreign-ptr (p 100)
      (setf (%mem-ref p :double) pi)
      (%mem-ref p :double)))
  
  ;;;# Foreign Type Operations
  
  
negative.code: 
  (defun inc-ptr (ptr offset)
    "Return a pointer OFFSET bytes past PTR."
    (fli:make-pointer :type :void
                      :address (+ (fli:pointer-address ptr) offset)))
  
  ;; FLI:INCF-POINTER doesn't seem to work at all..
  ;; tested on lispworks 4.4.5 darwin/ppc and linux/x86:
  ;; (fli:incf-pointer (fli:make-pointer :type :void :address #xBEEF)
  ;;                   #xDEAD0000)
  ;; => #<Pointer to type :VOID = #x0000BEEF>
  ;(fli:incf-pointer (fli:copy-pointer ptr) offset))
  
  ;;;# Allocation
  
  