sci: update to new reify config

This commit is contained in:
Michiel Borkent 2021-03-06 11:17:39 +01:00
parent 0fae952d4d
commit 1391f028bf

View file

@ -1,6 +1,7 @@
(ns babashka.impl.reify (ns babashka.impl.reify
{:no-doc true} {:no-doc true}
(:require [clojure.math.combinatorics :as combo])) (:require [clojure.math.combinatorics :as combo]
[sci.impl.types]))
(set! *warn-on-reflection* false) (set! *warn-on-reflection* false)
@ -8,13 +9,25 @@
"Generates pre-compiled reify combinations" "Generates pre-compiled reify combinations"
[methods] [methods]
(let [subsets (rest (combo/subsets (seq methods)))] (let [subsets (rest (combo/subsets (seq methods)))]
(reduce (fn [opts classes] (reduce (fn [opts [classes protocols?]]
(let [prelude '[reify]
prelude (if protocols?
(conj prelude
'sci.impl.types.IReified
'(getInterfaces [this]
interfaces)
'(getMethods [this]
methods)
'(getProtocols [this]
protocols))
prelude)]
(assoc opts (assoc opts
(set (map (fn [[class _]] (cond-> (set (map #(list 'quote %)
(list 'quote class)) (map first classes)))
classes)) protocols?
(list 'fn ['methods] (conj (list 'quote 'sci.impl.types.IReified)))
(list* 'reify (list 'fn ['interfaces 'methods 'protocols]
(concat prelude
(mapcat (mapcat
(fn [[clazz methods]] (fn [[clazz methods]]
(cons clazz (cons clazz
@ -24,14 +37,20 @@
(fn [arity] (fn [arity]
(list meth arity (list meth arity
(list* (list*
(list 'get-in 'methods (list 'get 'methods (list 'quote meth))
[(list 'quote clazz) (list 'quote meth)])
arity))) arity)))
arities)) arities))
methods))) methods)))
classes))))) classes))))))
{} {}
subsets))) (concat (map (fn [subset bool]
[subset bool])
subsets
(repeat true))
(map (fn [subset bool]
[subset bool])
subsets
(repeat false))))))
#_(prn (macroexpand '(gen-reify-combos #_(prn (macroexpand '(gen-reify-combos
{java.io.FileFilter {accept [[this f]]}}))) {java.io.FileFilter {accept [[this f]]}})))