|
|
|
@ -76,9 +76,13 @@ https://github.com/mbutterick/restructure/blob/master/src/Struct.coffee
|
|
|
|
|
(define parent (mhasheq x:parent-key parent-arg
|
|
|
|
|
x:val-key val
|
|
|
|
|
x:pointer-size-key 0))
|
|
|
|
|
(define fields-size (for/sum ([(key type) (in-dict @fields)]
|
|
|
|
|
(define fields-size (let ([key-missing-signal (gensym)])
|
|
|
|
|
(for/sum ([(key type) (in-dict @fields)]
|
|
|
|
|
#:when (xenomorphic-type? type))
|
|
|
|
|
(send type x:size (and val (send type pre-encode (dict-ref val key))) parent)))
|
|
|
|
|
(match (dict-ref val key key-missing-signal)
|
|
|
|
|
[(== key-missing-signal eq?)
|
|
|
|
|
(raise-argument-error 'x:dict (format "dict that contains value for key ~v" key) val)]
|
|
|
|
|
[val (send type x:size (and val (send type pre-encode val)) parent)]))))
|
|
|
|
|
(define pointers-size (if include-pointers (dict-ref parent x:pointer-size-key) 0))
|
|
|
|
|
(+ fields-size pointers-size))))
|
|
|
|
|
|
|
|
|
|