fix defstruct pointer members

This commit is contained in:
Kristin Rutenkolk 2025-02-23 16:54:06 +01:00
parent f307d1ed51
commit 6383c6e425

View file

@ -1723,8 +1723,9 @@
:aliased-type any?)) :aliased-type any?))
(defn- coffitype->typename [in] (defn- coffitype->typename [in]
(let [[arr type n & {:keys [raw?] :as opts}] (if (vector? in) in [:- in]) (let [[indirect-type type n & {:keys [raw?] :as opts}] (if (vector? in) in [:- in])
arr? (= arr ::array) arr? (= indirect-type ::array)
ptr? (= indirect-type ::pointer)
array-types {::byte 'bytes array-types {::byte 'bytes
::short 'shorts ::short 'shorts
::int 'ints ::int 'ints
@ -1742,6 +1743,7 @@
::c-string 'String}] ::c-string 'String}]
(cond (and arr? raw?) (get array-types type 'objects) (cond (and arr? raw?) (get array-types type 'objects)
(and arr?) `clojure.lang.IPersistentVector (and arr?) `clojure.lang.IPersistentVector
(and ptr?) `java.lang.foreign.MemorySegment
:default (get single-types type type)))) :default (get single-types type type))))
(defn- coffitype->array-fn [type] (defn- coffitype->array-fn [type]
@ -1858,7 +1860,7 @@
(defmethod generate-serialize :coffi.mem/char [_type source-form offset segment-source-form] `(write-char ~segment-source-form ~offset ~source-form)) (defmethod generate-serialize :coffi.mem/char [_type source-form offset segment-source-form] `(write-char ~segment-source-form ~offset ~source-form))
(defmethod generate-serialize :coffi.mem/float [_type source-form offset segment-source-form] `(write-float ~segment-source-form ~offset ~source-form)) (defmethod generate-serialize :coffi.mem/float [_type source-form offset segment-source-form] `(write-float ~segment-source-form ~offset ~source-form))
(defmethod generate-serialize :coffi.mem/double [_type source-form offset segment-source-form] `(write-double ~segment-source-form ~offset ~source-form)) (defmethod generate-serialize :coffi.mem/double [_type source-form offset segment-source-form] `(write-double ~segment-source-form ~offset ~source-form))
(defmethod generate-serialize :coffi.mem/pointer [_type source-form offset segment-source-form] `(write-pointer ~segment-source-form ~offset ~source-form)) (defmethod generate-serialize :coffi.mem/pointer [_type source-form offset segment-source-form] `(write-address ~segment-source-form ~offset ~source-form))
(defmethod generate-serialize :coffi.mem/c-string [_type source-form offset segment-source-form] `(write-address ~segment-source-form ~offset (.allocateFrom (Arena/ofAuto) ~source-form))) (defmethod generate-serialize :coffi.mem/c-string [_type source-form offset segment-source-form] `(write-address ~segment-source-form ~offset (.allocateFrom (Arena/ofAuto) ~source-form)))
(defn- generate-serialize-array-as-array-bulk [member-type length source-form offset segment-source-form] (defn- generate-serialize-array-as-array-bulk [member-type length source-form offset segment-source-form]