(defn analyze* [env form name opts]
(let [passes *passes*
passes (if (nil? passes)
#?(:clj [infer-type check-invoke-arg-types ns-side-effects]
:cljs [infer-type check-invoke-arg-types])
passes)
form (if (instance? LazySeq form)
(if (seq form) form ())
form)
ast (analyze-form env form name opts)]
(reduce (fn [ast pass] (pass env ast opts)) ast passes)))