Fix bug with incorrect padding size
This commit is contained in:
parent
49f9e60b11
commit
da12b26e3c
1 changed files with 4 additions and 3 deletions
|
|
@ -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)))
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue