   read-eval-call."
   [opts cb source]
   (try
-    (let [expression-form (repl-read-string source)
+    (let [expression-form (read-string {:read-cond :allow :features #{:cljs}} source)
           opts (normalize-opts opts) ;; AR - does the whole user option processing
           data {:form expression-form
                 :ns (:current-ns @app-env)

  cljs.analyzer/resolve-macro-var) a macro?"
  [var]
  (:macro var))

(defn extract-namespace
  [source]
  (let [first-form (repl-read-string source)]
    (when (ns-form? first-form)
      (second first-form))))

(defn resolve
  "From cljs.analyzer.api.clj. Given an analysis environment resolve a

  [f m]
  (reduce-kv (fn [r k v] (assoc r (f k) v)) {} m))

(defn read
  "Reading forms from a reader (see clojure.tools.reader.reader-types
  for reader implementations). This function throws if a valid form
  cannot be found."
  [opts rdr]
  (binding [ana/*cljs-ns* (:current-ns @app-env)
            env/*compiler* st
            r/*data-readers* tags/*cljs-data-readers*
            r/resolve-symbol ana/resolve-symbol]
    (r/read opts rdr)))

(defn read-string
  "Reading forms from a string. This function throws if a valid one
  cannot be found."
  [opts s]
  (binding [ana/*cljs-ns* (:current-ns @app-env)
            env/*compiler* st
            r/*data-readers* tags/*cljs-data-readers*
            r/resolve-symbol ana/resolve-symbol]
    (r/read-string opts s)))

(defn ns-form?
  [form]
