Add address metadata key to defcfn as well

This commit is contained in:
Joshua Suskalo 2021-09-30 15:45:10 -05:00
parent 5ab2bae1fa
commit daa1949f32
2 changed files with 6 additions and 3 deletions

View file

@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. This change
## [Unreleased]
### Added
- An `::ffi/address` key to deserialized function pointers' metadata
- An `::ffi/address` key to wrapper functions' metadata
## [0.1.184] - 2021-09-30
### Fixed

View file

@ -545,6 +545,7 @@
(let [args (s/conform ::defcfn-args args)
args-types (gensym "args-types")
ret-type (gensym "ret-type")
address (gensym "symbol")
invoke (gensym "invoke")
native-sym (gensym "native")
[arity fn-tail] (-> args :wrapper :fn-tail)
@ -558,7 +559,8 @@
nil))]
`(let [~args-types ~(:native-arglist args)
~ret-type ~(:return-type args)
~invoke (make-downcall ~(name (:symbol args)) ~args-types ~ret-type)
~address (find-symbol ~(name (:symbol args)))
~invoke (make-downcall ~address ~args-types ~ret-type)
~(or (-> args :wrapper :native-fn) native-sym)
~(if (and (every? #(= % (mem/primitive-type %))
(:native-arglist args))
@ -581,7 +583,8 @@
(list
(mapv (comp symbol name)
(:native-arglist args)))))))
(:attr-map args)))
(assoc (:attr-map args)
::address address)))
~@(when-let [doc (:doc args)]
(list doc))
fun#))))