(defn parse-do
[[_ & exprs :as form] env]
(let [statements-env (ctx env :ctx/statement)
[statements ret] (loop [statements [] [e & exprs] exprs]
(if (seq exprs)
(recur (conj statements e) exprs)
[statements e]))
statements (mapv (analyze-in-env statements-env) statements)
ret (analyze-form ret env)]
{:op :do
:env env
:form form
:statements statements
:ret ret
:children [:statements :ret]}))