anchor.diff:         (notice-foreign-type
           ',name (make-instance ',dtype :name ',name :actual-type ,btype)))))
   
  -;;; For Verrazano.
  +;;; For Verrazano.  We memoize the type this way to help detect cycles.
   (defmacro defctype* (name base-type)
     "Like DEFCTYPE but defers instantiation until parse-time."
  -  `(define-parse-method ,name ()
  -     (make-instance 'foreign-typedef :name ',name
  -                    :actual-type (parse-type ',base-type))))
  +  `(let (memoized-type)
  +     (define-parse-method ,name ()
  +       (unless memoized-type
  +         (setf memoized-type (make-instance 'foreign-typedef :name ',name
  +                                            :actual-type nil)
  +               (actual-type memoized-type) (parse-type ',base-type)))
  +       memoized-type)))
  
positive.code: (defmethod unparse-type ((type enhanced-foreign-type))
    (unparsed-type type))
  
  ;;; Only now we define PARSE-TYPE because it needs to do some extra
  ;;; work for ENHANCED-FOREIGN-TYPES.
  (defun parse-type (type)
    (let* ((spec (ensure-list type))
           (ptype (apply (find-type-parser (car spec)) (cdr spec))))
      (when (typep ptype 'enhanced-foreign-type)
        (setf (unparsed-type ptype) type))
      ptype))
  
negative.code:         *runtime-translator-form*
          `(let ((,var ,expansion))
             ,@body))))
  
  ;;; User interface for converting values from/to foreign using the
  ;;; type translators.  The compiler macros use the expanders when
  