anchor.diff:       ,@body))
   
   (defmacro with-submodule (submodule &body body)
  -  `(let ((*submodule* ,submodule))
  -     (with-submodule-context *submodule*
  -       ,@body)))
  +  (alexandria:once-only (submodule)
  +    `(if (eq *submodule* ,submodule)
  +         (progn ,@body)
  +         (let ((*submodule* ,submodule))
  +           (with-submodule-context *submodule*
  +             ,@body)))))
   
   (defun submodule-baseurl (submodule)
     (with-submodule-context submodule
  
positive.code:                                                                        (submodule-module obj))))
                (collect (make-instance 'submodule
                                        :symbol key
                                        :module (car thing)
                                        :context (copy-restas-context (cdr thing))
                                        :parent obj))))
    (let ((*submodule* obj))
  
negative.code:                      prefix)
          prefix)))
  
  (defun find-upper-submodule (module &optional (current-submodule *submodule*)
                               &aux (package (find-package module)))
    (unless current-submodule
      (error "Can not find a submodule: ~A" package))
    (if (eql (submodule-module current-submodule) package)
        current-submodule
        (find-upper-submodule module (submodule-parent current-submodule))))
  
  