diff --git a/pkgs/racket-test-core/tests/racket/macro.rktl b/pkgs/racket-test-core/tests/racket/macro.rktl index 4b751819ba..b2a3940acf 100644 --- a/pkgs/racket-test-core/tests/racket/macro.rktl +++ b/pkgs/racket-test-core/tests/racket/macro.rktl @@ -1642,6 +1642,29 @@ (m (check) (check2))) + +;; ---------------------------------------- +;; Check that `syntax-local-lift-values-expression` works rigth when lifts +;; are converted to `let`; in particular, make sure the order is +;; right + +(module uses-local-lift-values-at-expansion-time racket/base + (require (for-syntax racket/base)) + (begin-for-syntax + (require (for-syntax racket/base)) + + (define-syntax (m stx) + #`(values #,@(syntax-local-lift-values-expression 3 #'(values 1 2 3))))) + + (define-syntax (n stx) + (define-values (a b c) (m)) + #`(list #,a #,b #,c)) + + (provide l) + (define l (n))) + +(test '(1 2 3) dynamic-require ''uses-local-lift-values-at-expansion-time 'l) + ;; ---------------------------------------- (report-errs) diff --git a/racket/src/racket/src/compenv.c b/racket/src/racket/src/compenv.c index 4c732e69eb..77f85b7900 100644 --- a/racket/src/racket/src/compenv.c +++ b/racket/src/racket/src/compenv.c @@ -978,7 +978,7 @@ void scheme_set_compilation_variables(Scheme_Comp_Env *frame, Scheme_IR_Local ** for (i = 0; i < count; i++) { MZ_ASSERT(!frame->vars[i+pos]); - frame->vars[i+pos] = vars[i]; + frame->vars[i+pos] = vars[count - i - 1]; } }