From 70459f4105ed23f5f588550f7148cbce3e542c4c Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Tue, 26 Nov 2019 15:46:25 -0700 Subject: [PATCH] schemify: preserve variable assignment order at module end A sequence of definitions (or `define-values`) at the end of a module could get reordered. That only matters for the order of checks for attempting to assign to a constant, though. --- pkgs/racket-test-core/tests/racket/module.rktl | 14 ++++++++------ racket/src/schemify/schemify.rkt | 3 +-- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/pkgs/racket-test-core/tests/racket/module.rktl b/pkgs/racket-test-core/tests/racket/module.rktl index 9d153bed3b..dbc17bd696 100644 --- a/pkgs/racket-test-core/tests/racket/module.rktl +++ b/pkgs/racket-test-core/tests/racket/module.rktl @@ -3144,13 +3144,15 @@ case of module-leve bindings; it doesn't cover local bindings. (test #t namespace? (module->namespace ''lang-is-imports-uses-local-expand))) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Check order of checking for redefinition of a constant -(test '(1 2 3) - call-with-continuation-prompt - (lambda () - (eval (quote (begin (abort-current-continuation (default-continuation-prompt-tag) 1 2 3) 10)))) - (default-continuation-prompt-tag) - list) +(let ([e '(module defines-a-spider-struct-type racket/base + (struct spider (legs)))]) + (eval e) + (namespace-require ''defines-a-spider-struct-type) + (err/rt-test (eval e) + exn:fail:contract:variable? + #rx"struct:spider")) ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; diff --git a/racket/src/schemify/schemify.rkt b/racket/src/schemify/schemify.rkt index 1d220ee951..48ba6ec100 100644 --- a/racket/src/schemify/schemify.rkt +++ b/racket/src/schemify/schemify.rkt @@ -243,8 +243,7 @@ (cond [(null? accum-exprs) '((void))] [else (reverse accum-exprs)])] - [else (append (reverse accum-exprs) - set-vars)])] + [else (reverse (append set-vars accum-exprs))])] [else (define form (car l)) (define schemified (schemify form