diff --git a/collects/lang/private/teach.rkt b/collects/lang/private/teach.rkt index 8763277f0a..80e565c045 100644 --- a/collects/lang/private/teach.rkt +++ b/collects/lang/private/teach.rkt @@ -1636,13 +1636,13 @@ ;; forms know that it's ok to expand in this internal ;; definition context. [int-def-ctx (build-expand-context (make-expanding-for-intermediate-local))]) - (let* ([partly-expanded-defns - (map (lambda (d) - (local-expand - d - int-def-ctx - (kernel-form-identifier-list))) - defns)] + (let* ([partly-expand (lambda (d) + (local-expand + d + int-def-ctx + (kernel-form-identifier-list)))] + [partly-expanded-defns + (map partly-expand defns)] [flattened-defns (let loop ([l partly-expanded-defns][origs defns]) (apply @@ -1653,7 +1653,7 @@ ;; or `define-syntaxes', because only macros can generate ;; them [(begin defn ...) - (let ([l (syntax->list (syntax (defn ...)))]) + (let ([l (map partly-expand (syntax->list (syntax (defn ...))))]) (loop l l))] [(define-values . _) (list d)] diff --git a/collects/tests/htdp-lang/intm-adv.rktl b/collects/tests/htdp-lang/intm-adv.rktl index c032984b98..6757cb56a3 100644 --- a/collects/tests/htdp-lang/intm-adv.rktl +++ b/collects/tests/htdp-lang/intm-adv.rktl @@ -115,3 +115,15 @@ (htdp-err/rt-test (-) (exn-type-and-msg exn:application:arity? "-: expects at least 1 argument, given 0")) (htdp-err/rt-test (/) (exn-type-and-msg exn:application:arity? "/: expects at least 1 argument, given 0")) ;(htdp-test 1 (/ 1) exn:application:arity?) + +;; Check that `local' works with macros that expand to `begin': +(module my-multi-defn racket/base + (provide multi) + (define-syntax-rule (multi a b) + (begin + (define a 1) + (define b 2)))) +(htdp-teachpack my-multi-defn) + +(htdp-test '(2 1) 'local (local [(multi x y)] + (list y x)))