 ;;   [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] )

            f (label)
            d (label)
            r (minijava.ir.temp.Temp.)]
        (ExpSeq [(unCx (tree (.e x)) (Name t) (Name f))
                 (Label t)
                 (Move (Const 0) (Temp r))
                 (Jump d)

(defmulti tree type)

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

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