anchor.diff:                             :documentation documentation
                              :sublocation sublocation)))))
   
  +(defvar *cached-canonical-graphs* (make-hash-table :test #'equalp))
   (defun ensure-canonical-complex-graph (x &optional force-pattern)
  -  (gtools:canonical-graph
  -   (etypecase x
  -     (list (make-complex-graph x force-pattern))
  -     (complex-graph x))))
  +  (let* ((graph (etypecase x
  +                 (list (make-complex-graph x force-pattern))
  +                 (complex-graph x)))
  +        (found (gethash graph *cached-canonical-graphs*)))
  +    (if found (princ #\.))
  +    (or found
  +        (setf (gethash graph *cached-canonical-graphs*)
  +              (gtools:canonical-graph graph)))))
   
   
   ;;;
  
positive.code: ;;;; THE SOFTWARE.
  
  
  ;;; $Id: species-type.lisp,v 1.57 2008/09/11 21:50:08 amallavarapu Exp $
  ;;; $Name:  $
  
  ;;; File: complex-species-type.lisp
  
negative.code:                                      ,@body))))
       ',name)))
  (defun user-defined-complex-function (name)
    (gethash (if (fld-form-p name) (fld-form-object name) name)
             *complex-expansions*))
  (defun process-complex-macro-output (name complex-form)
    (assert (and (object-form-p complex-form) (object-form-p (object-form-object complex-form)))
        ()
  