(defn analyze-js-star* [env jsform args form]
(let [enve (assoc env :context :expr)
argexprs (vec (map #(analyze enve %) args))
form-meta (meta form)
segs (js-star-seg jsform)
tag (get-js-tag form)
js-op (:js-op form-meta)
numeric (:numeric form-meta)
validate (fn [warning-type valid-types?]
(let [types (map #(infer-tag env %) argexprs)]
(when-not (valid-types? types)
(warning warning-type env
{:js-op js-op
:types (into [] types)}))))
op-match? (fn [sym]
#?(:clj (= sym (:js-op form-meta))
:cljs (symbol-identical? sym (:js-op form-meta))))]
(when (true? numeric)
(validate :invalid-arithmetic #(every? numeric-type? %)))
{:op :js
:env env
:segs segs
:args argexprs
:tag tag
:form form
:children argexprs
:js-op js-op
:numeric numeric}))