       `(doall (map ~func ~@iterator)))))
 
 
+(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 -visitBlock
+  "A block doesn't return a list, it only returns a single expression.
+  However, if there are multiple expressions coming from that block,
+  it wraps them in a do expression"
   [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)))))
+  (cond
+    (. ctx expression) (self-visit this ctx expression)
+
+    ;;(. ctx term) (into [] (map #(.. this (visitStatementTerm %)) (. ctx term)))
+
+    (. ctx term) (let [num-terms (.. (. ctx term) size)]
+                   (cond
+                     (= 0 num-terms) (throw (new NotImplementedException))
+                     (= 1 num-terms) (.. this (visitStatementTerm (.. (. ctx term) (get 0))))
+                     :else `(do ~@(into [] (map #(.. this (visitStatementTerm %)) (. ctx term))))))
+
+    ;;(. ctx scope) (into [] (map #(.. this (visitVarScope %)) (. ctx scope)))
+
+    (. ctx scope) (let [num-scopes (.. (. ctx scope) size)]
+                    (cond
+                      (= 0 num-scopes) (throw NotImplementedException)
+                      (= 1 num-scopes) (.. this (visitVarScope (.. (. ctx scope) (get 0))))
+                      :else `(do ~@(into [] (map #(.. this (visitVarScope %)) (. ctx scope))))))
+
+    :else (throw (new ClojureSourceGenerator$BadSource ctx))))
 
 
 (defn -visitVarScope

(defn -visitStatementTerm
  [this ^JestParser$StatementTermContext ctx]

  (cond
    (. ctx statement)   (self-visit this ctx statement)
    (. ctx functionDef) (self-visit this ctx functionDef)

  `(defn
     ~(get-symbol ctx name)
     [~@(self-visit this ctx functionDefParams)]
     ~(self-visit this ctx block)))


(defn -visitMethodDef
  [this ^JestParser$MethodDefContext ctx]

  ;
  ;if (ctx.typeAnnotation() != null) {
  ;                                   annotation = String.format("(t/ann %s [%s ->%s])\n",
  ;                                                               ctx.name.getText(),
  ;                                                               this.visitFuncTypeAnnotation(ctx.a).getSingleLine(),
  ;                                                               this.visitTypeAnnotation(ctx.c).getSingleLine());
  ;                                   }


  `(~(symbol (.. ctx name getText)) [~@(self-visit this ctx functionDefParams)]
     ~(self-visit this ctx block)))


(defn -visitFunctionDefParams
