 ;;   [x] )
 
 (defmethod tree minijava.ast.Block
-  [x] (Seq (for [s ($ (.statements x))] (tree s))))
+  [x] (Seq (map tree ($ (.statements x)))))
 
 (defmethod tree minijava.ast.BooleanLiteral
   [x] (if (.value x) (Const 1) (Const 0)))
 
 (defmethod tree minijava.ast.Call
-  [x] (Call (Name (label (.name x)))
-            (for [a ($ (.rargs x))] (unEx (tree a)))))
+  [x] (Call (Name (.name x))
+            (cons (-> x .receiver tree unEx)
+                  (map (comp unEx tree) ($ (.rargs x))))))
 
 ;; (defmethod tree minijava.ast.ClassDecl
 ;;   [x] )

(defmulti tree type)

(defn binop [op x]
  (BinaryOp op (unEx (tree (.e1 x))) (unEx (tree (.e2 x)))))

(defmethod tree minijava.ast.And
  [x] (let [t1   (label)

  [x] (let [t (label)
            f (label)
            d (label)]
        (Seq [(-> x .tst tree (unCx (Name t) (Name f)))
              (Label t)
              (-> x .thn tree unNx)
              (Jump d)
              (Label f)
              (-> x .els tree unNx)
              (Label d)])))

(defmethod tree minijava.ast.IntegerLiteral
