remove typename argument from typelist

This commit is contained in:
Kristin Rutenkolk 2025-01-04 21:02:25 +01:00
parent 637f156663
commit 06cd910279

View file

@ -1863,19 +1863,18 @@
(generate-deserialize-array-as-array array-type n offset segment-source-form) (generate-deserialize-array-as-array array-type n offset segment-source-form)
(generate-deserialize-array-as-vector array-type n offset segment-source-form))) (generate-deserialize-array-as-vector array-type n offset segment-source-form)))
(defn- typelist [typename fields] (defn- typelist [fields]
(->> (->>
(partition 2 2 (interleave (reductions + 0 (map (comp size-of second) fields)) fields)) (partition 2 2 (interleave (reductions + 0 (map (comp size-of second) fields)) fields))
(filter (fn [[_ [_ field-type]]] (not (and (vector? field-type) (= "padding" (name (first field-type))))))))) (filter (fn [[_ [_ field-type]]] (not (and (vector? field-type) (= "padding" (name (first field-type)))))))))
(defn register-new-struct-deserialization [typename [_struct fields]] (defn register-new-struct-deserialization [typename [_struct fields]]
(let [typelist (typelist typename fields)] (defmethod generate-deserialize typename [_type global-offset segment-source-form]
(defmethod generate-deserialize typename [_type global-offset segment-source-form] (->> (typelist fields)
(->> typelist (map-indexed
(map-indexed (fn [index [offset [_ field-type]]]
(fn [index [offset [_ field-type]]] (generate-deserialize field-type (+ global-offset offset) segment-source-form)))
(generate-deserialize field-type (+ global-offset offset) segment-source-form))) (cons (symbol (str (name typename) "."))))))
(cons (symbol (str (name typename) ".")))))))
(defmulti generate-serialize (fn [& xs] (if (vector? (first xs)) (ffirst xs) (first xs)))) (defmulti generate-serialize (fn [& xs] (if (vector? (first xs)) (ffirst xs) (first xs))))
@ -1944,10 +1943,9 @@
(generate-serialize-vector-as-array member-type length source-form offset segment-source-form))) (generate-serialize-vector-as-array member-type length source-form offset segment-source-form)))
(defn register-new-struct-serialization [typename [_struct fields]] (defn register-new-struct-serialization [typename [_struct fields]]
(let [typelist (typelist typename fields) (let [fieldnames (filter #(not= "padding" (name %)) (map first fields))]
fieldnames (filter #(not= "padding" (name %)) (map first fields))]
(defmethod generate-serialize typename [_type source-form global-offset segment-source-form] (defmethod generate-serialize typename [_type source-form global-offset segment-source-form]
(->> typelist (->> (typelist fields)
(map-indexed (map-indexed
(fn [index [offset [_ field-type]]] (fn [index [offset [_ field-type]]]
(generate-serialize field-type (list (symbol (str "." (name (nth fieldnames index)))) 'source-obj) (if (number? global-offset) (+ global-offset offset) `(+ ~global-offset ~offset)) segment-source-form))) (generate-serialize field-type (list (symbol (str "." (name (nth fieldnames index)))) 'source-obj) (if (number? global-offset) (+ global-offset offset) `(+ ~global-offset ~offset)) segment-source-form)))