diff --git a/racket/src/cs/rumble/prefab.ss b/racket/src/cs/rumble/prefab.ss index b6010a8e80..d878e35a04 100644 --- a/racket/src/cs/rumble/prefab.ss +++ b/racket/src/cs/rumble/prefab.ss @@ -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]) diff --git a/racket/src/cs/rumble/struct.ss b/racket/src/cs/rumble/struct.ss index 0709f5db37..c7d3006553 100644 --- a/racket/src/cs/rumble/struct.ss +++ b/racket/src/cs/rumble/struct.ss @@ -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))