anchor.diff:  :PRUNE - When :THREAD is T, try to prune away stack frames above the WITH-PROFILING call."
     `(call-with-allocation-profiling (lambda () ,@body) ,@options))
   
  -(defun call-with-allocation-profiling (function &key path (verbosity :report) (prune t))
  +(defun call-with-allocation-profiling (function &key path (verbosity :report) (prune t) (ignore-functions *ignorable-function-names*))
     (let* ((raw-buffer (make-array 0 :adjustable t :fill-pointer 0))
            (results (let* ((mezzano.runtime::*allocation-profile* raw-buffer)
                            (mezzano.runtime::*enable-allocation-profiling* t))
                       (multiple-value-list (funcall function))))
  -         (profile-buffer (decode-profile-buffer raw-buffer (if prune #'call-with-allocation-profiling nil))))
  +         (profile-buffer (decode-profile-buffer raw-buffer (if prune #'call-with-allocation-profiling nil) ignore-functions)))
       (cond (path
              (save-profile path profile-buffer :verbosity verbosity)
              (values-list results))
  
positive.code:                       (let ((fn (consume))
                              (offset (consume)))
                          (unless stop
                            (vector-push-extend (cons fn offset) call-stack)
                            (when (eql fn prune-function)
                              (setf stop t)))))
                       (t (return))))
  
negative.code:   wait-item
    call-stack)
  
  (defmacro with-profiling ((&whole options &key buffer-size path thread verbosity prune ignore-functions) &body body)
    "Profile BODY.
  :THREAD - Thread to sample.
            If NIL, then sample all threads.
  