cs: fix assignment to auto struct fields

This commit is contained in:
Matthew Flatt 2018-10-15 17:22:14 -06:00
parent c347bc0c99
commit e9855fa64f
2 changed files with 9 additions and 6 deletions

View File

@ -280,7 +280,7 @@
(let* ([l (if parent-key+size
(prefab-key+size->prefab-key-tail parent-key+size)
'())]
[l (let ([mutables (immutables->mutables immutables fields-count)])
[l (let ([mutables (immutables->mutables immutables fields-count 0)])
(if (fx= 0 (#%vector-length mutables))
l
(cons mutables l)))]
@ -305,14 +305,17 @@
(define (encode-prefab-key+count-as-symbol prefab-key+count)
(string->symbol (chez:format "~a" prefab-key+count)))
(define (immutables->mutables immutables init-count)
(define (immutables->mutables immutables init-count auto-count)
(vector->immutable-vector
(list->vector
(let loop ([i 0])
(cond
[(= i init-count) null]
[(chez:member i immutables) (loop (add1 i))]
[else (cons i (loop (add1 i)))])))))
[(fx= i init-count) (let loop ([i 0])
(cond
[(fx= i auto-count) null]
[else (cons (fx+ i init-count) (loop (fx+ i 1)))]))]
[(#%memv i immutables) (loop (fx+ 1 i))]
[else (cons i (loop (fx+ i 1)))])))))
(define (mutables->immutables mutables init-count)
(let loop ([i 0])

View File

@ -508,7 +508,7 @@
[all-immutables (if (integer? proc-spec)
(cons proc-spec immutables)
immutables)]
[mutables (immutables->mutables all-immutables init-count)])
[mutables (immutables->mutables all-immutables init-count auto-count)])
(when (not parent-rtd*)
(record-type-equal-procedure rtd default-struct-equal?)
(record-type-hash-procedure rtd default-struct-hash))