   #?(:cljs (:require-macros [cljs.analyzer.macros
                              :refer [no-warn wrapping-errors
                                      disallowing-recur allowing-redef]]))
-  #?(:clj (:require [cljs.util :as util :refer [ns->relpath]]
+  #?(:clj (:require [cljs.util :as util :refer [ns->relpath topo-sort]]
                     [clojure.java.io :as io]
                     [clojure.string :as string]
                     [clojure.set :as set]

                (vector? form) (analyze-vector env form)
                (set? form) (analyze-set env form)
                (keyword? form) (analyze-keyword env form)
                (instance? JSValue form) (analyze-js-value env form)
                (= form ()) (analyze-list env form)
                :else
                (let [tag (cond

                             :name (symbol (str ns) (str k)))))]))
             (into {}))))))

#?(:clj
   (defn load-core []
     (when (not @-cljs-macros-loaded)
       (reset! -cljs-macros-loaded true)
       (if *cljs-macros-is-classpath*
         (load *cljs-macros-path*)
         (load-file *cljs-macros-path*)))
     (intern-macros 'cljs.core)))

#?(:clj
   (defmacro with-core-macros
