diff --git a/deps.edn b/deps.edn index cc02f222..d7d32bc2 100644 --- a/deps.edn +++ b/deps.edn @@ -20,7 +20,7 @@ "reify/src"], :deps {org.clojure/clojure {:mvn/version "1.11.1"}, org.babashka/sci {:local/root "sci"} - org.babashka/babashka.impl.reify {:mvn/version "0.1.2"} + org.babashka/babashka.impl.reify {:mvn/version "0.1.3"} org.babashka/sci.impl.types {:mvn/version "0.0.2"} babashka/babashka.curl {:local/root "babashka.curl"} babashka/fs {:local/root "fs"} diff --git a/project.clj b/project.clj index 9f70d430..82e1e98a 100644 --- a/project.clj +++ b/project.clj @@ -26,7 +26,7 @@ [nrepl/bencode "1.1.0"] [borkdude/sci.impl.reflector "0.0.1"] [org.babashka/sci.impl.types "0.0.2"] - [org.babashka/babashka.impl.reify "0.1.2"] + [org.babashka/babashka.impl.reify "0.1.3"] [org.clojure/core.async "1.5.648"] [org.clojure/test.check "1.1.1"] [com.github.clj-easy/graal-build-time "0.1.0"] diff --git a/reify/bb.edn b/reify/bb.edn new file mode 100644 index 00000000..adce8f9c --- /dev/null +++ b/reify/bb.edn @@ -0,0 +1,2 @@ +{:tasks {install (clojure "-T:build install") + deploy (clojure "-T:build deploy")}} diff --git a/reify/build.clj b/reify/build.clj index 87d76733..c0493917 100644 --- a/reify/build.clj +++ b/reify/build.clj @@ -3,7 +3,7 @@ [clojure.tools.build.api :as b])) (def lib 'org.babashka/babashka.impl.reify) -(def version "0.1.2") +(def version "0.1.3") (def class-dir "target/classes") (def basis (b/create-basis {:project "deps.edn"})) (def jar-file (format "target/%s-%s.jar" (name lib) version)) diff --git a/reify/src/babashka/impl/reify2.clj b/reify/src/babashka/impl/reify2.clj index 3186ceaf..dff57479 100644 --- a/reify/src/babashka/impl/reify2.clj +++ b/reify/src/babashka/impl/reify2.clj @@ -61,19 +61,6 @@ java.lang.Object (toString [this] (toString-fn this))))) -(defn reify-runnable [m] - (let [methods (:methods m) - run-fn (or (get methods 'run) - (fn [_]))] - (reify - sci.impl.types.IReified - (getMethods [_] (:methods m)) - (getInterfaces [_] (:interfaces m)) - (getProtocols [_] (:protocols m)) - java.lang.Runnable - (run [this] (run-fn this)))) - ) - (defmacro gen-reify-fn [] `(fn [~'m] (when (> (count (:interfaces ~'m)) 1) @@ -91,9 +78,7 @@ ["clojure.lang.IFn" `(reify-ifn ~'m) "java.lang.Object" - `(reify-object ~'m) - "java.lang.Runnable" - `(reify-runnable ~'m)] + `(reify-object ~'m)] (for [i interfaces] (let [in (.getName ^Class i)] [in diff --git a/reify/src/babashka/impl/reify2/interfaces.clj b/reify/src/babashka/impl/reify2/interfaces.clj index 416578a4..a94feec3 100644 --- a/reify/src/babashka/impl/reify2/interfaces.clj +++ b/reify/src/babashka/impl/reify2/interfaces.clj @@ -19,6 +19,7 @@ clojure.lang.Reversible clojure.lang.Seqable java.lang.Iterable + java.lang.Runnable java.net.http.WebSocket$Listener java.util.Iterator java.util.function.Consumer diff --git a/test/babashka/reify_test.clj b/test/babashka/reify_test.clj index 82c4a08a..a9911dd7 100644 --- a/test/babashka/reify_test.clj +++ b/test/babashka/reify_test.clj @@ -2,6 +2,7 @@ (:require [babashka.test-utils :as test-utils] [clojure.edn :as edn] + [clojure.string :as str] [clojure.test :as test :refer [deftest is testing]])) (defn bb [input & args] @@ -52,7 +53,7 @@ (deftest reify-object (testing "empty methods" - (is (clojure.string/starts-with? + (is (str/starts-with? (bb nil " (str (reify Object))") "babashka.impl.reify"))) @@ -144,7 +145,8 @@ (let [t (atom (Object.)) wr (java.lang.ref.WeakReference. @t)] (reset! t nil) - (while (.get wr) + (while (or (.get wr) + (not @deleted?)) (System/gc) (System/runFinalization)))) (make-cleanable-ref)