(defn
analyze-str
"Analyze ClojureScript source. The compiler state will be populated with\n the results of analyzes. The parameters:\n\n state (atom)\n the compiler state\n\n source (string)\n the ClojureScript source\n\n name (symbol or string)\n optional, the name of the source\n\n opts (map)\n compilation options.\n\n :eval - eval function to invoke, see *eval-fn*\n :load - library resolution function, see *load-fn*\n :source-map - set to true to generate inline source map information\n :def-emits-var - sets whether def (and derived) forms return either a Var\n (if set to true) or the def init value (if false).\n Defaults to false.\n :checked-arrays - if :warn or :error, checks inferred types and values passed\n to aget/aset. Logs for incorrect values if :warn, throws if\n :error. Defaults to false.\n :static-fns - employ static dispatch to specific function arities in\n emitted JavaScript, as opposed to making use of the\n `call` construct. Defaults to false.\n :fn-invoke-direct - if `true`, does not generate `.call(null...)` calls for\n unknown functions, but instead direct invokes via\n `f(a0,a1...)`. Defaults to `false`.\n :target - use `:nodejs` if targeting Node.js. Takes no other options\n at the moment.\n :ns - optional, the namespace in which to evaluate the source.\n :verbose - optional, emit details from compiler activity. Defaults to\n false.\n :context - optional, sets the context for the source. Possible values\n are `:expr`, `:statement` and `:return`. Defaults to\n `:expr`.\n\n cb (function)\n callback, will be invoked with a map. If successful the map will contain\n a key :value, the actual value is not meaningful. If unsuccessful the\n map will contain a key :error with an ex-info instance describing the cause\n of failure."
([state source cb] (analyze-str state source nil cb))
([state source name cb] (analyze-str state source name nil cb))
([state source name opts cb]
{:pre
[(atom? state)
(string? source)
(valid-name? name)
(valid-opts? opts)
(fn? cb)]}
(analyze-str*
{:*compiler* state,
:*data-readers* tags/*cljs-data-readers*,
:*passes* (or (:passes opts) ana/*passes*),
:*analyze-deps* (:analyze-deps opts true),
:*cljs-dep-set* ana/*cljs-dep-set*,
:*load-macros* (:load-macros opts true),
:*load-fn* (or (:load opts) *load-fn*),
:*eval-fn* (or (:eval opts) *eval-fn*)}
source
name
opts
cb)))