anchor.diff:                 (progn ,@body)
                (return nil)))))))
   
  +(defmacro with-tree-iterator ((key value tree) &body body)
  +  "Iterates over each element in TREE (an instance of TOKEN-TREE) and
  +  evaluates BODY. RETURN may be used to exit from the iterator with
  +  specified results."
  +  (let ((generator (gensym))
  +        (foundp (gensym))
  +        (token-list (gensym))
  +        (token (gensym))
  +        (rval (gensym)))
  +    `(with-hash-table-iterator (,generator (get-table ,tree))
  +       (loop
  +         (multiple-value-bind (,foundp ,key ,token-list)
  +             (,generator)
  +           (if ,foundp
  +               (let ((,rval
  +                      (dolist (,token ,token-list)
  +                        (setf ,value ,token)
  +                        ,@body)))
  +                 (when ,rval
  +                   (return ,rval)))
  +             (return nil)))))))
  +
   (defun make-token-tree (&key (use-sortcode-p nil))
     (make-instance 'token-tree :use-sortcode use-sortcode-p))
  
positive.code:          (table (get-table self))
           (tokens (gethash hash table)))
      (setf (gethash hash table)
            (nconc tokens `(,token)))))
  
  (defmethod remove-token ((self token-tree) (tok token))
    (with-accessors ((table get-table)) self
      (let* ((key (create-hash-code self tok))
             (obj (gethash key table)))
        (unless (null obj)
          (remhash key table))
        (values obj))))
  
  (defun use-sortcode-p (tree)
    (declare (type token-tree tree))
    (get-use-sortcode tree))
  
  (defun create-hash-code (tree token)
    (declare (type token-tree tree) (type token token))
  
negative.code: ;;; File: token-tree.lisp
  ;;; Description: Maintains a hashed collection of tokens.
  
  ;;; $Id: token-tree.lisp,v 1.14 2001/02/09 15:19:56 youngde Exp $
  
  (in-package :lisa)
  
  