    (when-not (contains? @*loaded* name)
      (*load-fn* name
        (fn [source]
-         (compile* bound-vars source opts (fn [ret] (cb true))))))))
+         (eval-str* bound-vars source opts
+           (fn [ret] (cb true))))))))
 
 (declare ns-side-effects)
 

;; Compile

(defn compile* [bound-vars source opts cb]
  (binding [env/*compiler    (:*compiler* bound-vars)
            *eval-fn*        (:*eval-fn* bound-vars)
            ana/*cljs-ns*    (:*cljs-ns* bound-vars)
            *ns*             (:*ns* bound-vars)
            r/*data-readers* (:*data-readers* bound-vars)]
    ))

(defn compile
  ([env source cb] (compile env source cb))

       :*ns*           (create-ns 'cljs.user)
       :*data-readers* tags/*cljs-data-readers*
       :*eval-fn*      (or (:js-eval opts) js/eval)}`
      source opts cb)))

;; -----------------------------------------------------------------------------
;; Evaluate String

(defn eval-str* [bound-vars source opts cb]
  (let [rdr  (rt/string-push-back-reader source)
        eof  (js-obj)
        aenv (ana/empty-env)
        sb   (StringBuffer.)]
    ((fn compile-loop []
       (binding [env/*compiler*   (:*compiler* bound-vars)
                 *eval-fn*        (:*eval-fn* bound-vars)
                 ana/*cljs-ns*    (:*cljs-ns* bound-vars)
                 *ns*             (:*ns* bound-vars)
                 r/*data-readers* (:*data-readers* bound-vars)]
         (let [form (r/read {:eof eof} rdr)]
           (if-not (identical? eof form)
             (let [aenv (assoc aenv :ns (ana/get-namespace ana/*cljs-ns*))
                   ast  (.append sb (comp/emit (ana/analyze aenv form)))]
               (if (= :ns (:op ast))
                 (ns-side-effects bound-vars aenv ast opts
                   (fn [_] (compile-loop)))
                 (recur)))
             (cb (.toString cb)))))))))

(defn eval-str
  ([env source cb] (eval-str env source cb))
  ([env source opts cb]
   (eval-str*
     {:*compiler*     env
      :*cljs-ns*      'cljs.user
      :*ns*           (create-ns 'cljs.user)
      :*data-readers* tags/*cljs-data-readers*
      :*eval-fn*      (or (:js-eval opts) js/eval)}`
       source opts cb)))