(defn analyze-js-value
[env ^JSValue form]
(let [val (.-val form)
expr-env (assoc env :context :expr)
items (if (map? val)
(zipmap (keys val)
(disallowing-recur (doall (map #(analyze expr-env %) (vals val)))))
(disallowing-recur (doall (map #(analyze expr-env %) val))))]
{:op :js-value
:js-type (if (map? val) :object :array)
:env env
:form form
:items items
:children items
:tag (if (map? val) 'object 'array)}))