From 6f984d868c4d72fa3d4c915d5d518cc801ee6cb5 Mon Sep 17 00:00:00 2001 From: Matthew Flatt Date: Sat, 9 May 2015 18:32:49 -0600 Subject: [PATCH] fix expander problem with `set!` --- pkgs/racket-test-core/tests/racket/object.rktl | 13 +++++++++++++ racket/src/racket/src/compenv.c | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/pkgs/racket-test-core/tests/racket/object.rktl b/pkgs/racket-test-core/tests/racket/object.rktl index c29d320ded..0d45f4a192 100644 --- a/pkgs/racket-test-core/tests/racket/object.rktl +++ b/pkgs/racket-test-core/tests/racket/object.rktl @@ -2100,6 +2100,19 @@ m)))) m)) +;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; Make sure that `set!` works right in forced subform expansion: + +(let () + (define (time-print-mixin t%) + (define start-time #f) + (class t% + (super-new) + (define/override (m) + (set! start-time 1) + (super m)))) + (void time-print-mixin)) + ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (report-errs) diff --git a/racket/src/racket/src/compenv.c b/racket/src/racket/src/compenv.c index d9394d3aa9..3eb86f95fd 100644 --- a/racket/src/racket/src/compenv.c +++ b/racket/src/racket/src/compenv.c @@ -1799,7 +1799,7 @@ scheme_lookup_binding(Scheme_Object *find_id, Scheme_Comp_Env *env, int flags, if (SCHEME_FALSEP(val)) { /* Corresponds to a run-time binding (but will be replaced later through a renaming to a different binding) */ - if (flags & SCHEME_OUT_OF_CONTEXT_LOCAL) + if (flags & (SCHEME_OUT_OF_CONTEXT_LOCAL | SCHEME_SETTING)) return scheme_make_local(scheme_local_type, 0, 0); return NULL; }