     (swap! namespaces #(-> %
                            (assoc-in [name :name] name)
                            (assoc-in [name :excludes] excludes)
+                           (assoc-in [name :uses] uses)
                            (assoc-in [name :requires] requires)
                            (assoc-in [name :requires-macros]
                                      (into {} (map (fn [[alias nsym]]
                                                      [alias (find-ns nsym)])
                                                    requires-macros)))))
-    {:env env :op :ns :name name :requires requires
+    {:env env :op :ns :name name :uses uses :requires requires
      :requires-macros requires-macros :excludes excludes}))
 
 (defmethod parse 'deftype*

                  ast (analyze env (first forms))]
              (do (emit ast)
                  (if (= (:op ast) :ns)
                    (recur (rest forms) (:name ast) (:requires ast))
                    (recur (rest forms) ns-name deps))))
            {:ns (or ns-name 'cljs.user)
             :provides [ns-name]
             :requires (if (= ns-name 'cljs.core) (vals deps) (conj (vals deps) 'cljs.core))
             :file dest}))))))

(defn requires-compilation?

                      (do
                        (confirm-var-exists env prefix (symbol suffix))
                        sym))))

           (get-in @namespaces [(-> env :ns :name) :uses sym])
           (symbol (str (get-in @namespaces [(-> env :ns :name) :uses sym]) "." (munge (name sym))))

           :else
           (let [full-ns (if (core-name? env sym)
