Fix bug with incorrect padding size

This commit is contained in:
Joshua Suskalo 2022-01-10 14:06:34 -06:00
parent 49f9e60b11
commit da12b26e3c

View file

@ -17,13 +17,14 @@
(let [[[_ type :as field] & fields] fields (let [[[_ type :as field] & fields] fields
size (mem/size-of type) size (mem/size-of type)
r (rem offset (mem/align-of type))] r (rem offset (mem/align-of type))]
(recur (+ offset r size) (recur (cond-> (+ offset size)
(pos? r) (+ (- size r)))
(cond-> aligned-fields (cond-> aligned-fields
(pos? r) (conj [:padding [::mem/padding r]]) (pos? r) (conj [::padding [::mem/padding (- size r)]])
:always (conj field)) :always (conj field))
fields)) fields))
(let [strongest-alignment (mem/align-of struct-spec) (let [strongest-alignment (mem/align-of struct-spec)
r (rem offset strongest-alignment)] r (rem offset strongest-alignment)]
(cond-> aligned-fields (cond-> aligned-fields
(pos? r) (conj [:padding [::mem/padding r]])))))] (pos? r) (conj [::padding [::mem/padding (- strongest-alignment r)]])))))]
(assoc struct-spec 1 aligned-fields))) (assoc struct-spec 1 aligned-fields)))