anchor.diff:  	 ;; Replacing an existing entry
   	 (setf (hash-table-value-at hash-table slot) value))
   	;; Adding a new entry.
  -	((and (eq (hash-table-key-at hash-table free-slot) *hash-table-unbound-value*)
  -	      (= (1+ (hash-table-used hash-table)) (hash-table-size hash-table)))
  +	((or (and (eq (hash-table-key-at hash-table free-slot) *hash-table-unbound-value*)
  +                  (= (1+ (hash-table-used hash-table)) (hash-table-size hash-table)))
  +             (>= (/ (hash-table-count hash-table) (hash-table-size hash-table))
  +                 (hash-table-rehash-threshold hash-table)))
   	 ;; There must always be at least one unbound slot in the hash table.
  -	 (hash-table-rehash hash-table)
  +	 (hash-table-rehash hash-table t)
   	 (multiple-value-bind (slot free-slot)
   	     (find-hash-table-slot key hash-table hash)
   	   (declare (ignore slot))
  
positive.code: (deftype hash-table ()
    `(satisfies hash-table-p))
  
  (defun make-hash-table (&key (test 'eql) (size 101) (rehash-size 50) (rehash-threshold 1))
    ;; Canonicalize and check the test function
    (cond ((eql test #'eq) (setf test 'eq))
  	((eql test #'eql) (setf test 'eql))
  
negative.code:       (when (funcall test key slot-key)
  	(return (values offset free-slot))))))
  
  (defun hash-table-rehash (hash-table resize-p)
    "Resize and rehash HASH-TABLE so that there are no tombstones the usage
  is below the rehash-threshold."
    (let ((new-size (if resize-p
                        (if (floatp (hash-table-rehash-size hash-table))
                            (ceiling (* (hash-table-size hash-table) (hash-table-rehash-size hash-table)))
                            (+ (hash-table-size hash-table) (hash-table-rehash-size hash-table)))
                        (hash-table-size hash-table)))
  	(old-size (hash-table-size hash-table))
  	(old-storage (hash-table-storage hash-table)))
      (setf (hash-table-storage hash-table) (make-array (* new-size 2)
  