            (-> (:*cljs-dep-set* bound-vars) meta :dep-path)))
        (if (seq deps)
          (let [dep (first deps)]
-           ((:*load-fn* bound-vars) (ns->relpath dep)
-             (fn [resolved]
-               (assert (or (map? resolved) (nil? resolved))
+           ((:*load-fn* bound-vars) {:name dep :path (ns->relpath dep)}
+             (fn [resource]
+               (assert (or (map? resource) (nil? resource))
                  "*load-fn* may only return a map or nil")
-               (if resolved
-                 (let [{:keys [lang source]} resolved]
+               (if resource
+                 (let [{:keys [lang source]} resource]
                    (condp = lang
                      :clj (analyze* bound-vars source opts
                             (fn []

             (let [js-source (.toString sb)]
               (when (:verbose opts)
                 (debug-prn js-source))
               (cb (*eval-fn* js-source))))))))))

(defn eval-str
  ([state source cb]
   (eval-str state source nil cb))
  ([state source opts cb]
   (eval-str*
     {:*compiler*     state
      :*cljs-ns*      'cljs.user

     (reset! *loaded* #{}))
   (when-not (contains? @*loaded* name)
     (let [env (:*env* bound-vars)]
       ((:*load-fn* bound-vars) {:name name :path (ns->relpath name)}
         (fn [resource]
           (assert (or (map? resource) (nil? resource))
             "*load-fn* may only return a map or nil")
           (if resource
             (let [{:keys [lang source]} resource]
               (condp = lang
                 :clj (eval-str* bound-vars source opts
                        (fn [ret] (cb true)))
                 :js  (do
                        ((:*eval-fn* bound-vars) resource)
                        (cb true))
                 (throw
                   (js/Error.
