                   (pattern/def->symbol wrapping-def)
                   (count (first raw-method))
                   (some (partial = '&) (first raw-method)))]
-    (ast `(def ~new-name
+    (ast `(def ^:single ^:static ~new-name
             (fn* ~raw-method))
          env)))
 

  Options
  -----------
    This pass takes no options"
  [whole-ast options]
  (let [munged-fns (atom #{})]
    (-> whole-ast
        (require-pass lift-lambdas)
        (update-forms rewrite-fn-decls   munged-fns)
        (update-forms rewrite-fn-invokes munged-fns)
        ;; FIXME
        ;;   Is this something I need to do? Are there cases in which
        ;;   this analysis is itself desructive? all existing fns,
        ;;   defs and vars should be preserved by this, including all
        ;;   metadata on them.
        (clobber-passes)
        (record-pass reduce-fn-arities))))

  bound with defs, as by the requirement of lambda lifting this must
  be the set of all fns in the input program."
  [ast munged-fns-atom]
  (if-not (and (pattern/def? ast)
               (not (contains? @munged-fns-atom
                               (pattern/def->var ast))))
    ast
    (let [top-level-forms (atom [])
          new-ast         (update ast :init
