mirror of
https://github.com/justinethier/cyclone.git
synced 2025-05-23 20:15:05 +02:00
Do not use vector-set when creating record types
This improves performance as mutations force the GC to do more work.
This commit is contained in:
parent
f5b68ee8d2
commit
0f0beb024c
1 changed files with 15 additions and 10 deletions
|
@ -1818,11 +1818,13 @@
|
|||
;; Record-type definitions
|
||||
(define record-marker (list 'record-marker))
|
||||
(define (register-simple-type name parent field-tags)
|
||||
(let ((new (make-vector 3 #f)))
|
||||
(vector-set! new 0 record-marker)
|
||||
(vector-set! new 1 name)
|
||||
(vector-set! new 2 field-tags)
|
||||
new))
|
||||
(vector record-marker name field-tags)
|
||||
;(let ((new (make-vector 3 #f)))
|
||||
; (vector-set! new 0 record-marker)
|
||||
; (vector-set! new 1 name)
|
||||
; (vector-set! new 2 field-tags)
|
||||
; new)
|
||||
)
|
||||
(define (make-type-predicate pred name)
|
||||
(lambda (obj)
|
||||
(and (vector? obj)
|
||||
|
@ -1832,12 +1834,15 @@
|
|||
(lambda ()
|
||||
(let* ((field-tags (vector-ref name 2))
|
||||
(field-values (make-vector (length field-tags) #f))
|
||||
(new (make-vector 3 #f))
|
||||
; (new (make-vector 3 #f))
|
||||
)
|
||||
(vector-set! new 0 record-marker)
|
||||
(vector-set! new 1 name)
|
||||
(vector-set! new 2 field-values)
|
||||
new)))
|
||||
; (vector-set! new 0 record-marker)
|
||||
; (vector-set! new 1 name)
|
||||
; (vector-set! new 2 field-values)
|
||||
; new
|
||||
(vector record-marker name field-values)
|
||||
)
|
||||
));
|
||||
(define (type-slot-offset name sym)
|
||||
(let ((field-tags (vector-ref name 2)))
|
||||
(_list-index sym field-tags)))
|
||||
|
|
Loading…
Add table
Reference in a new issue