         ;; will not be hit and therefore autoloads will not be
         ;; generated for the dependencies in that situation if we
         ;; don't do it again in `straight-use-package'.
-        (when-let ((dependencies (straight--get-dependencies package)))
+        (when-let* ((dependencies (straight--get-dependencies package)))
           (dolist (dependency dependencies)
             ;; The implicit meaning of the first argument to
             ;; `straight-use-package' here is that the default recipes

                                 (,p ,(funcall setter
                                               `(delq ,p ,getter)))))))))))))))



    ;; Definition from Emacs 25.3, subr-x.el
    (defmacro if-let (bindings then &rest else)
      "Process BINDINGS and if all values are non-nil eval THEN, else ELSE.
Argument BINDINGS is a list of tuples whose car is a symbol to be
bound and (optionally) used in THEN, and its cadr is a sexp to be
evalled to set symbol's value.  In the special case you only want
to bind a single value, BINDINGS can just be a plain tuple."
      (declare (indent 2)
               (debug ([&or (&rest (symbolp form)) (symbolp form)] form body)))
      (when (and (<= (length bindings) 2)
                 (not (listp (car bindings))))
        ;; Adjust the single binding case
        (setq bindings (list bindings)))
      `(let* ,(internal--build-bindings bindings)
         (if ,(car (internal--listify (car (last bindings))))
             ,then
           ,@else)))

    ;; Definition from Emacs 25.3, subr-x.el
    (defmacro when-let (bindings &rest body)
      "Process BINDINGS and if all values are non-nil eval BODY.
Argument BINDINGS is a list of tuples whose car is a symbol to be
bound and (optionally) used in BODY, and its cadr is a sexp to be
evalled to set symbol's value.  In the special case you only want
to bind a single value, BINDINGS can just be a plain tuple."
      (declare (indent 1) (debug if-let))
      (list 'if-let bindings (macroexp-progn body)))))

;; Definitions needed both at compile time and at runtime.
(eval-and-compile

                  (cl-block loop
                    (while t
                      (straight-popup
                        (if-let* ((err
                                   (condition-case-unless-debug e
                                       (progn
                                         (funcall func package)
                                         (setq next-repos (cdr next-repos))
                                         (cl-return-from loop))
                                     (error e)
                                     ;; Emacs 24.5 has a bug where the
                                     ;; byte-compiler signals an unused
                                     ;; argument warning for the target
                                     ;; of a `condition-case' unless
                                     ;; it's used on every error
                                     ;; handler.
                                     (quit (ignore e)))))
                            (format (concat "While processing repository %S, "
                                            "an error occurred:\n\n  %S")
                                    local-repo (error-message-string err))
