           (emit-symbol env :context/expression gen (nth closed-overs n)))
         (. gen invokeConstructor (Type/getObjectType slashname)
            (Method. "<init>" Type/VOID_TYPE (into-array Type (repeat (count closed-overs) object-type))))))))
+
+(defmethod emit-seq 'case-lambda
+  [env context ^GeneratorAdapter gen case-lambda]
+  (emit-lambda env context gen case-lambda))
+
+(defmethod emit-seq 'lambda
+  [env context ^GeneratorAdapter gen [_ params & body :as lambda]]
+  (emit-lambda env context gen lambda))
 
 ;; (defmethod emit-seq 'define-class*
 ;;   [env context gen [_ fields :as defcls]])

        (. gen visitInsn Opcodes/ACONST_NULL)
        (. gen storeLocal list-local)
        (. gen invokeVirtual thistype (Method. "invoke" object-type (into-array Type (concat (repeat (dec variadic) object-type)
                                                                                             (list object-array-type)))))
        (. gen goTo end-switch-label))
      
      (. gen mark switch-label)
      ;; list count is on stack
      (. gen switchTable (int-array fixed-arities) end-switch-label)
      (. gen mark end-switch-label))
    
    (. gen returnValue)

  [env [_ params & body :as form]]
  (let [params (expand-params params)]
    (validate-params! params)
    (cons 'lambda (sanitize-method env params body))))

(defn sanitize-case-lambda
  [env [_ methods :as form]]
