sci#540: one reify to rule them all

This commit is contained in:
Michiel Borkent 2021-03-07 11:43:35 +01:00
parent 874593bae9
commit d72aa3158a
3 changed files with 27 additions and 50 deletions

2
sci

@ -1 +1 @@
Subproject commit 076937baa88e774f02d50b967db29b0cdb0a3fb6 Subproject commit 7e79c5e4717debbcef39bf972b75475b45facb8d

View file

@ -8,28 +8,17 @@
(defmacro gen-reify-combos (defmacro gen-reify-combos
"Generates pre-compiled reify combinations" "Generates pre-compiled reify combinations"
[methods] [methods]
(let [subsets (rest (combo/subsets (seq methods)))] (let [prelude ['reify
(reduce (fn [opts [classes protocols?]]
(let [prelude '[reify]
prelude (if protocols?
(conj prelude
'sci.impl.types.IReified 'sci.impl.types.IReified
'(getInterfaces [this] '(getInterfaces [this]
interfaces) interfaces)
'(getMethods [this] '(getMethods [this]
methods) methods)
'(getProtocols [this] '(getProtocols [this]
protocols)) protocols)]]
prelude)]
(assoc opts
(cond-> (set (map #(list 'quote %)
(map first classes)))
protocols?
(conj (list 'quote 'sci.impl.types.IReified)))
(list 'fn ['interfaces 'methods 'protocols] (list 'fn ['interfaces 'methods 'protocols]
(concat prelude (concat prelude
(mapcat (mapcat (fn [[clazz methods]]
(fn [[clazz methods]]
(cons clazz (cons clazz
(mapcat (mapcat
(fn [[meth arities]] (fn [[meth arities]]
@ -41,22 +30,10 @@
arity))) arity)))
arities)) arities))
methods))) methods)))
classes)))))) methods)))))
{}
(concat (map (fn [subset bool]
[subset bool])
subsets
(repeat true))
(map (fn [subset bool]
[subset bool])
subsets
(repeat false))))))
#_(prn (macroexpand '(gen-reify-combos
{java.io.FileFilter {accept [[this f]]}})))
#_:clj-kondo/ignore #_:clj-kondo/ignore
(def reify-opts (def reify-fn
(gen-reify-combos (gen-reify-combos
{java.nio.file.FileVisitor {preVisitDirectory [[this p attrs]] {java.nio.file.FileVisitor {preVisitDirectory [[this p attrs]]
postVisitDirectory [[this p attrs]] postVisitDirectory [[this p attrs]]

View file

@ -26,7 +26,7 @@
[babashka.impl.pprint :refer [pprint-namespace]] [babashka.impl.pprint :refer [pprint-namespace]]
[babashka.impl.process :refer [process-namespace]] [babashka.impl.process :refer [process-namespace]]
[babashka.impl.protocols :refer [protocols-namespace]] [babashka.impl.protocols :refer [protocols-namespace]]
[babashka.impl.reify :refer [reify-opts]] [babashka.impl.reify :refer [reify-fn]]
[babashka.impl.repl :as repl] [babashka.impl.repl :as repl]
[babashka.impl.socket-repl :as socket-repl] [babashka.impl.socket-repl :as socket-repl]
[babashka.impl.test :as t] [babashka.impl.test :as t]
@ -569,7 +569,7 @@ Use -- to separate script command line args from bb command line args.
:load-fn load-fn :load-fn load-fn
:uberscript uberscript :uberscript uberscript
:readers core/data-readers :readers core/data-readers
:reify reify-opts} :reify-fn reify-fn}
opts (addons/future opts) opts (addons/future opts)
sci-ctx (sci/init opts) sci-ctx (sci/init opts)
_ (vreset! common/ctx sci-ctx) _ (vreset! common/ctx sci-ctx)