   (let [names (into [] (map #(symbol (. % getText)) (. ctx name)))
         vals (into [] (map #(.. this (visitExpression %)) (. ctx exp)))
         bindings (apply concat (zip names vals))
-        expressions (into [] (map #(. this (visitStatementTerm %)) (. ctx terms)))]
+        expressions (map #(. this (visitStatementTerm %)) (. ctx terms))]
     `(let [~@bindings] ~@expressions)))
 
-
-(defn- wrap-in-do
-  [expressions]
-  (cond
-    (not (instance? List expressions)) expressions
-    (= 0 (count expressions)) (throw (new NotImplementedException))
-    (= 1 (count expressions)) (first expressions)
-    :else `(do ~@expressions)))
 
 
 (defn -visitConditional
   [this ^JestParser$ConditionalContext ctx]
 
   (let [conditions (map #( .. this (visitExpression %)) (merge-items (. ctx ifCondition) (. ctx elifExpression)))
-        results (map #(wrap-in-do (.. this (visitBlock %))) (merge-items (. ctx iftrue) (. ctx elifBlock)))
-        else (if (. ctx elseBlock) (wrap-in-do (.. this (visitBlock (. ctx elseBlock)))) nil)
+        results (map #(.. this (visitBlock %)) (merge-items (. ctx iftrue) (. ctx elifBlock)))
+        else (if (. ctx elseBlock) (.. this (visitBlock (. ctx elseBlock))) nil)
         single-if (= (. conditions size) 1)]
 
     (cond

    :else [obj]))


;; HELPER
(defn merge-items
  "Takes two items and joins them as a single sequence."

(defn -visitBlock
  [this ^JestParser$BlockContext ctx]

  (wrap-in-do
    (cond
      (. ctx expression) (self-visit this ctx expression)

      ;;(. ctx term) (into [] (map #(.. this (visitStatementTerm %)) (. ctx term)))

      (. ctx term) (map #(.. this (visitStatementTerm %)) (. ctx term))

      (. ctx scope) (map #(.. this (visitVarScope %)) (. ctx scope))

      :else (throw (new ClojureSourceGenerator$BadSource ctx)))))


(defn -visitVarScope
