From fce209d9f47e712971ce7838aa6a317cb9475a6d Mon Sep 17 00:00:00 2001 From: Philip McGrath Date: Mon, 1 Jul 2019 15:29:34 -0400 Subject: [PATCH] racket/private/serialize: eliminate unnecessary vector->list --- racket/collects/racket/private/serialize.rkt | 23 +++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/racket/collects/racket/private/serialize.rkt b/racket/collects/racket/private/serialize.rkt index b842440153..0a56edb8ee 100644 --- a/racket/collects/racket/private/serialize.rkt +++ b/racket/collects/racket/private/serialize.rkt @@ -253,8 +253,10 @@ (set! cycle-stack (cons v cycle-stack)) (cond [(serializable-struct? v) - (let ([info (serializable-info v)]) - (for-each loop (vector->list ((serialize-info-vectorizer info) v))))] + (let* ([info (serializable-info v)] + [vec ((serialize-info-vectorizer info) v)]) + (for ([x (in-vector vec)]) + (loop x)))] [(and (struct? v) (prefab-struct-key v)) (for-each loop (struct->list v))] @@ -266,7 +268,8 @@ ;; No sub-structure (void)] [(vector? v) - (for-each loop (vector->list v))] + (for ([x (in-vector v)]) + (loop x))] [(flvector? v) (void)] [(fxvector? v) (void)] [(pair? v) @@ -342,9 +345,10 @@ [(serializable-struct? v) (let ([info (serializable-info v)]) (cons (mod-to-id info mod-map mod-map-cache deser-path->relative-path) - (map (serial #t) - (vector->list - ((serialize-info-vectorizer info) v)))))] + (let ([loop (serial #t)] + [vec ((serialize-info-vectorizer info) v)]) + (for/list ([x (in-vector vec)]) + (loop x)))))] [(and (struct? v) (prefab-struct-key v)) => (lambda (k) @@ -361,7 +365,10 @@ (cons 'p* v-rel) (list* 'p+ (path->bytes v) (path-convention-type v))))] [(vector? v) - (define elems (map (serial #t) (vector->list v))) + (define elems + (let ([loop (serial #t)]) + (for/list ([x (in-vector v)]) + (loop x)))) (if (and (immutable? v) (andmap quotable? elems)) (cons 'q v) @@ -620,7 +627,7 @@ ;; Prefab (let ([s (apply make-prefab-struct (cadr v) - (vector->list (make-vector (cddr v) #f)))]) + (make-list (cddr v) #f))]) (vector-set! fixup n (lambda (v) (let-values ([(si skipped?) (struct-info s)]) (let loop ([si si])