diff --git a/collects/racket/private/for.rkt b/collects/racket/private/for.rkt index cdc1e951d9..63bf03fa3a 100644 --- a/collects/racket/private/for.rkt +++ b/collects/racket/private/for.rkt @@ -4,6 +4,7 @@ "misc.rkt" "define.rkt" "letstx-scheme.rkt" + "reverse.rkt" '#%unsafe (for-syntax '#%kernel "stx.rkt" @@ -1348,7 +1349,7 @@ (define-for-variants (for/list for*/list) ([fold-var null]) - (lambda (x) `(,#'reverse ,x)) + (lambda (x) `(,#'alt-reverse ,x)) (lambda (x) x) (lambda (x) `(,#'cons ,x ,#'fold-var))) diff --git a/collects/racket/private/list.rkt b/collects/racket/private/list.rkt index 49f8bc4b74..2202ec9a01 100644 --- a/collects/racket/private/list.rkt +++ b/collects/racket/private/list.rkt @@ -1,4 +1,5 @@ (module list "pre-base.rkt" + (require "reverse.rkt") (provide foldl foldr @@ -26,7 +27,7 @@ build-string build-list - (rename-out [alt-reverse reverse] + (rename-out [alt-reverse reverse] ; defined in "for.rkt" [alt-memq memq] [alt-memv memv] [alt-member member]) @@ -411,18 +412,6 @@ (mk-simple-compose app* f g)))) (values compose1 compose))) - (define alt-reverse - (if (eval-jit-enabled) - (let ([reverse - (lambda (l) - (unless (list? l) (raise-type-error 'reverse "list")) - (let loop ([a null] [l l]) - (if (null? l) - a - (loop (cons (car l) a) (cdr l)))))]) - reverse) - reverse)) - (define-values (alt-memq alt-memv alt-member) (if (eval-jit-enabled) (let () diff --git a/collects/racket/private/reverse.rkt b/collects/racket/private/reverse.rkt new file mode 100644 index 0000000000..42def93b1b --- /dev/null +++ b/collects/racket/private/reverse.rkt @@ -0,0 +1,20 @@ +(module reverse '#%kernel + (#%provide alt-reverse) + + (define-values (alt-reverse) + (if (eval-jit-enabled) + (let-values ([(reverse) + (lambda (l) + (if (list? l) + (void) + (raise-type-error 'reverse "list")) + (letrec-values ([(loop) + (lambda (a l) + (if (null? l) + a + (loop (cons (car l) a) (cdr l))))]) + (loop null l)))]) + reverse) + reverse))) + +