diff --git a/src/babashka/impl/proxy.clj b/src/babashka/impl/proxy.clj new file mode 100644 index 00000000..59bfec91 --- /dev/null +++ b/src/babashka/impl/proxy.clj @@ -0,0 +1,18 @@ +(ns babashka.impl.proxy + {:no-doc true} + (:require [sci.impl.types])) + +(set! *warn-on-reflection* false) + +(defn method-or-bust [methods k] + (or (get methods k) + (throw (UnsupportedOperationException. "Method not implemented: " k)))) + +(defn proxy-fn [{:keys [:class :methods]}] + (case (.getName ^Class class) + "clojure.lang.APersistentMap" + (proxy [clojure.lang.APersistentMap] [] + (seq [] ((method-or-bust methods 'seq))) + (valAt + ([k] ((method-or-bust methods 'valAt) k)) + ([k default] ((method-or-bust methods 'valAt) k default))))))