        ,@(cddr definition)))
 
 (defun el-patch--autoload-function (function-name feature)
+  "Generate the code for an autoload stub.
+This will return a list starting with `defun'. The function is
+called FUNCTION-NAME. When the function is called, it will load
+FEATURE (which is expected to redefine FUNCTION-NAME) and then
+call itself. If FEATURE did not redefine FUNCTION-NAME, an error
+is signaled."
   (let ((recursive-autoload
          (intern (format "el-patch--recursive-autoload--%S"
                          function-name))))


(defun el-patch--ediff-forms (name1 form1 name2 form2)
  "Ediff two forms.
Obtain empty buffers named NAME1 and NAME2, pretty-print FORM1
and FORM2 into them respectively, and run Ediff on the two
buffers wordwise."
  (let ((min1) (max1) (min2) (max2))
    (with-current-buffer (get-buffer-create name1)
      (erase-buffer)

      (unless el-patch--feature
        (error "You must specify an `el-patch-feature' directive for `%S'"
               function-name))
      (eval
       (el-patch--autoload-function function-name el-patch--feature)))
    (advice-add function-name :override advice-name)))

